Sincronizar e configurar o site espelho no sistema CentOS

Configurar um site espelho é adequado para intranets e redes isoladas. Em particular, há dois sentimentos sobre o ativo e nenhuma fonte na rede isolada. Aqui, tomo o sistema CentOS como um exemplo para registrar minha própria experiência de configuração de um site espelho. .
 

Use reposync para sincronizar

Instale a ferramenta de sincronização

No passado, a ferramenta rsync plus createrepo era usada para gerar metadados para sincronização, mas agora existe uma maneira melhor de usar a ferramenta reposync no CentOS.

# CentOS 7
sudo yum install yum-utils
# CentOS 8
sudo dns install dnf-utils

Sincronizar o armazém padrão

Após a conclusão da instalação, você pode executar imediatamente a sincronização do warehouse.
 
O repositório padrão do CentOS 7 contém:

  • base
  • atualizações
  • extras

O repositório padrão do CentOS 8 contém:
 

Primeira sincronização

// CentOS 7
sudo reposync --download-metadata -p /home/repos
// CentOS 8
sudo dnf reposync --download-metadata --destdir /home/repos

Descrição:

  1. "--Download-metadata" baixa os metadados, caso contrário, você precisa usar o createrepo para gerar.
  2. "-P" e "--destdir" especificam o diretório de armazenamento, o padrão é o diretório atual onde o comando é executado.
  3. O comando acima irá sincronizar todas as fontes atuais válidas, você pode usar o comando "yum repolist" para ver, ou ver a descrição em "[]" no arquivo .repo, e habilitar = 1 ao mesmo tempo.

Sincronização de atualização

// CentOS 7
sudo reposync --download-metadata -p /home/repos --delete -n

Descrição:

  1. "--Delete" exclui pacotes que não existem no warehouse.
  2. "-N" apenas atualiza a atualização incremental mais recente.

Atualizar EPEL

EPEL: Pacotes extras para Enterprise Linux, que são necessários em muitos lugares como uma fonte importante do CentOS.

  • Instalar fonte epel
// CentOS 7
sudo yum install epel-release
// CentOS 8
  • Atualizar fonte epel

O método de operação pode usar a atualização incremental acima ou "-repo <repo_id>" para atualizar a fonte especificada.

// CentOS 7
sudo reposync --download-metadata -p /home/repo --repo epel
// CentOS 8
sudo dnf reposync --download-metadata -p /home/repo --repo epel

De acordo com o documento oficial da EPEL, se EPEL for usado no CentOS 8, é recomendado habilitar a fonte de ferramentas elétricas

sudo dnf reposync --download-metadata -p /home/repo --repo powertools

Atualize o espelho de origem de outras arquiteturas

Antes de atualizar a imagem de origem de outras arquiteturas (principalmente ARM), usei o QEMU para virtualizar uma máquina virtual aarch64. Embora o problema tenha sido resolvido, não foi tão rápido quanto x86_64. Além disso, se você usar o vbox no Windows, você ainda trabalha Não consigo resolver o problema de virtualização de aarch64, então estudei novamente.
 
Uma é olhar para os parâmetros: reposync ou dnf reposync tem uma opção de parâmetro --arch, que se parece com isso, mas não teve sucesso, mas o pacote noarch foi sincronizado; a outra é alterar o URL de origem, que foi bem-sucedido A seguir está o tempo de modificação. Diversas variáveis ​​que precisam ser explicadas.

  • $ releasever: O número da versão de lançamento do sistema atual, como "7", você pode usar o seguinte comando para visualizar
    rpm -q --qf %{version} centos-release
  • $ basearch: A arquitetura da CPU do sistema atual, como "x86_64", "aarch64", você pode usar o seguinte comando para visualizar
    rpm -q --qf %{arch} centos-release
  • $ infra: is stock, as variáveis ​​personalizadas no diretório / etc / yum / vars /
    também podem ver as informações do pacote centos-release através do seguinte comando
    rpm -qi centos-release

    Depois de conhecer as variáveis ​​acima, você pode especificar $ basearch como a organização que precisa ser sincronizada para realizar as operações de sincronização de origem. Por exemplo, modifique $ basearch para aarch64 para sincronizar os pacotes aarch64.

Instalar site espelho

O site é implementado usando Apache (porque o sistema vem com ele).

Instale o Apache

sudo yum install httpd -y

Configurar Apache

Novo arquivo de configuração repos.conf para o site espelho de origem

sudo vim /etc/httpd/conf.d/repos.conf

Alias /repos /var/www/repos
<Directory /var/www/repos>
  Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Descrição do atributo Apache

O Apache usa <Directory> ... </Directory> para definir as permissões de acesso do diretório especificado. Esta configuração também é válida para subdiretórios, que podem conter cinco atributos:

Options
AllowOverride
Order
Allow
Deny
  • As opções podem definir as seguintes opções em combinação:
    All:用户可以在此目录中作任何事情。
    ExecCGI:允许在此目录中执行CGI程序。
    FollowSymLinks:服务器可使用符号链接指向的文件或目录。
    Indexes:服务器可生成此目录的文件列表。
    None:不允许访问此目录。
  • AllowOverride determinará se deve ler o arquivo .htaccess no diretório de acordo com o valor definido para alterar as permissões originalmente definidas:
    All:读取.htaccess文件的内容,修改原来的访问权限。
    None:不读取.htaccess文件

    Para evitar que os usuários criem arquivos .htaccess para modificar as permissões de acesso, as configurações padrão para cada diretório no arquivo apache2.conf são:

    AllowOverride None。
  • Permitir é usado para definir o host que tem permissão para acessar o servidor Apache, por exemplo:
    Allow from all  # 允许所有主机的访问
    Allow from 202.96.0.97 202.96.0.98  # 允许来自指定IP地址主机的访问
  • Negar é usado para definir o host que nega acesso ao servidor Apache, por exemplo:
    Deny from all  # 拒绝来自所有主机的访问
    Deny from 202.96.0.99 202.96.0.88 # 拒绝指定IP地址主机的访问
  • A ordem é usada para especificar a ordem de permitir e negar: Ordem, permitir, negar

Variáveis ​​booleanas do SELinux do Apache

Para serviços de rede, o SElinux abre apenas os requisitos operacionais mínimos. Para aproveitar as vantagens das funções do servidor Apache, o valor booleano deve ser ativado para permitir certos comportamentos, incluindo permitir acesso à rede de script httpd, permitindo que httpd acesse NFS e CIFS sistemas de arquivos, permitindo Executar o script CGI (Common Gateway Interface). Você pode usar o comando getsebool para consultar a variável booleana atual. Em seguida, você pode usar o seguinte comando setsebool para abrir a variável booleana:

#setsebool - P httpd_enable_cgi on

As seguintes são variáveis ​​booleanas comumente usadas:

allow_httpd_anon_write 禁用时这个布尔变量允许的 httpd 到只有标记文件 public_content_rw_t 类型的读取访问。启用此布尔变量将允许的 httpd 写入到文件标记与一个公共文件目录包含一个公共文件传输服务,如 public_content_rw_t 类型。
allow_httpd_mod_auth_pam 启用此布尔变量允许 mod_auth_pam 模块访问 httpd。
allow_httpd_sys_script_anon_write 这个布尔变量定义 HTTP 脚本是否允许写访问到文件标记在一个公共文件传输服务 public_content_rw_t 类型。
httpd_builtin_scripting 这个布尔变量定义 httpd 的脚本的访问。在这个布尔变量启用,往往需要为 PHP 内容。
httpd_can_network_connect 禁用时这个布尔变量防止从网络或远程端口发起连接的 HTTP 脚本和模块。打开这个布尔变量允许这种访问。
httpd_can_network_connect_db 禁用时这个布尔变量防止发起一个连接到数据库服务器的 HTTP 脚本和模块。打开这个布尔变量允许这种访问。
httpd_can_network_relay 打开这个当布尔变量的 httpd 正在使用正向或反向代理。
httpd_can_sendmail 禁用时这个布尔变量防止发送邮件的 HTTP 模块。这可以防止垃圾邮件的***漏洞中发现的 httpd。打开这个布尔变量允许 HTTP 模块发送邮件。
httpd_dbus_avahi 关闭时这个布尔变量拒绝服务的 avahi 通过 D-BUS 的 httpd 访问。打开这个布尔变量允许这种访问。
httpd_enable_cgi 禁用时这个布尔变量防止 httpd 的执行 CGI 脚本。打开这个布尔变量让 httpd 的执行 CGI 脚本。
httpd_enable_ftp_server 开放这个布尔变量会容许的 httpd 作为 FTP 服务器的 FTP 端口和行为。
httpd_enable_homedirs 禁用时这个布尔变量阻止访问用户主目录的 httpd。打开这个布尔变量允许 httpd 访问用户主目录。
httpd_execmem 启用时这个布尔变量允许 httpd 的执行程序需要的内存地址。建议不要启用这个布尔变量从安全角度来看,因为它减少了对缓冲区溢出,但是某些模块和应用程序(如 Java 和 Mono 应用)的保护需要这种特权。
httpd_ssi_exec 这个布尔变量定义服务器端包含(SSI)的网页中的元素是否可以执行。
httpd_tty_comm 这个布尔变量定义的 httpd 是否被允许访问的控制终端。这种访问通常是不需要的,但是,如配置 SSL 证书文件的情况下,终端访问所需的显示和处理一个密码提示。
httpd_use_cifs 打开这个布尔变量允许 httpd 访问 CIFS 文件系统上标记的文件,如通过 Samba 挂载的文件系统,cifs_t 类型。
httpd_use_nfs 打开这个布尔变量允许 httpd 访问 NFS 文件系统上的标记文件 nfs_t 类型,如文件系统,通过 NFS 挂载。

Tipos de arquivo do SELinux do Apache

Quando o SELinux está habilitado, o servidor Apache HTTP (httpd) é executado no domínio httpd_t restrito por padrão e é separado de outros serviços de rede restritos. Mesmo que um serviço de rede seja destruído por alguém, os recursos da pessoa e possíveis danos são limitados.

O exemplo a seguir demonstra o processo httpd no SELinux.

$ ps -eZ | grep httpd
unconfined_u: system_r: httpd_t: s0 2850? 00:00:00 httpd
unconfined_u: system_r: httpd_t: s0 2852? 00:00:00 httpd
……

O processo httpd relacionado ao contexto SELinux é system_u: system_r: httpd_t: s0. Os processos httpd estão todos em execução no domínio httpd_t. O tipo de arquivo deve ser definido corretamente para acesso httpd. Por exemplo, httpd pode ler o tipo de arquivo httpd_sys_content_t, mas não pode gravá-lo ou modificá-lo.
 
Além disso, o httpd não pode acessar arquivos do tipo samba_share_t (arquivos controlados pelo acesso Samba), nem pode acessar arquivos do tipo marcado com user_home_t no diretório home do usuário. O principal objetivo é evitar que o httpd leia e grave arquivos na casa do usuário diretório e herdando suas permissões de acesso. O tipo de arquivo que httpd pode ler e gravar é httpd_sys_content_rw_t.
 
O tipo de diretório raiz de documento padrão do Apache é httpd_sys_content_t. A menos que seja definido de outra forma, httpd pode acessar somente arquivos httpd_sys_content_t e subdiretórios no diretório / var / www / html /.
 
Além disso, o SELinux também define alguns tipos de arquivo para httpd:

  • httpd_sys_content_t é usado principalmente para fornecer arquivos para serviços de conteúdo estático, como arquivos usados ​​por sites HTML estáticos. Este tipo de arquivo de marcação pode acessar (somente leitura) httpd e executar o script httpd. Por padrão, este tipo de tag de arquivo e diretório não pode ser escrito ou modificado por httpd ou outros processos. Nota: Por padrão, o arquivo criado ou copiado para a tag de tipo / var / www / html / httpd_sys_content_t.
  • httpd_sys_script_exec_t é usado principalmente para definir o script cgi no diretório / var / www / cgi-bin /. Por padrão, a política SELinux impede que o httpd execute scripts CGI.
  • httpd_sys_content_rw_t usa a tag de tipo de httpd_sys_content_rw_t para ler e gravar o tipo de arquivo de tag de script httpd_sys_script_exec_t.
  • httpd_sys_content_ra_t Use a tag de tipo de httpd_sys_content_ra_t para ler e anexar o tipo de arquivo de script marcado httpd_sys_script_exec_t.
     
    Para alterar o diretório do arquivo de destino do link simbólico e seus atributos de arquivo, execute o seguinte comando
    sudo chcon -R -t httpd_sys_content_t /home/mgr/repos

    Ao mesmo tempo, certifique-se de que a permissão de operação de arquivo do caminho / home / mgr / repos seja 755.
     
    Descrição: Use o comando chcon para reidentificar o tipo de arquivo. No entanto, esse logotipo não é uma modificação permanente. Assim que o sistema for reiniciado, o logotipo será alterado novamente. Para mudanças permanentes de tipos de arquivo, os comandos semanage e restorecon são necessários.

    # semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"
    # restorecon -R -v /mywebsite

    Como usar os três comandos chcon, semanage fcontext e restorecon:


  • função do comando chcon : o comando chcon é usado para alterar os atributos dos arquivos SELinux, ou seja, para modificar o contexto de segurança do arquivo.
    Uso: chcon [opções]
    Opções principais do arquivo CONTEXTO :
    -R: altera recursivamente o contexto dos arquivos e diretórios .
    --reference: copia o contexto de segurança do arquivo de origem para o arquivo de destino
    -h, --no-dereference: afeta o link de destino.
    -v, --verbose: produz o diagnóstico de cada arquivo de verificação.
    -u, --user = USER: Define o contexto de segurança do usuário alvo.
    -r, --role = ROLE: Defina a função do domínio de segurança de destino.
    -t, --type = TYPE: O tipo de contexto de segurança definido no destino.
    -l, --range = RANGE: define a função definida ROLE no intervalo de contexto de segurança de destino do contexto de segurança de destino.
    -f: Exibe algumas mensagens de erro.
  • comando restorecon
    função: restaurar atributo SELinux arquivo atributo de arquivo é restaurar o contexto do arquivo de segurança.
    Uso: restorecon [-iFnrRv] [-e ExcludeDir] [-o arquivo] [nome do arquivo -f | caminho ...]
    opções principais:
    -i: ignora o arquivo que não existe.
    -f: infilename O arquivo a ser processado é registrado no arquivo infilename.
    -e: diretório exclui diretórios.
    -R -r: Processa diretórios recursivamente.
    -n: Não altera o rótulo do arquivo.
    -o outfilename: salva a lista de arquivos em outfilename, se o arquivo estiver incorreto.
    -v: Exibe o processo na tela.
    -F: Força a recuperação do contexto de segurança do arquivo.
    Nota: O comando restorecon é semelhante ao comando chcon, mas define o contexto de segurança do objeto relacionado ao arquivo com base no arquivo de contexto de arquivo padrão da política atual. Portanto, o usuário não especifica um contexto de segurança. Em vez disso, o restorecon usa a entrada do arquivo de contexto do arquivo para corresponder ao nome do arquivo. Em seguida, aplique um contexto de segurança específico e, em alguns casos, está restaurando o contexto de segurança correto.

  • função de comando semanage fcontext : gerenciar contexto de segurança de arquivo
    Uso:
    semanage fcontext [-S store] - {a | d | m | l | n | D} [-frst] file_spec semanage
    fcontext [-S store] - {a | d | m | l | n | D} -e
    opções principais de destino de substituição :
    -a: adicionar
    -d: excluir
    -m: modificar
    -l: enumerar
    -n: não imprimir o cabeçalho de descrição
    -D: excluir todos
    -f: arquivo
    - s: User-
    t: type-
    r: role para
     
    visualizar os atributos do arquivo usando o seguinte comando:
    # ls -dZ /mywebsite

    Sobre a alteração do número da porta
     
    De acordo com a configuração da política, o serviço só pode ser executado em um número de porta específico. Tentar alterar a porta na qual o serviço é executado, sem alterar a política, pode fazer com que o serviço falhe ao iniciar. Primeiro, verifique se o SELinux permite que o HTTP escute nas portas TCP, use o comando:

    # semanage port -l | grep -w http_port_t
    http_port_t tcp 80, 443, 488, 8008, 8009, 8443

    Use o comando para modificar:

    # semanage port -a -t http_port_t -p tcp 12345

    Em seguida, confirme:

    # semanage port -l | grep -w http_port_t
    http_port_t      tcp      12345, 80, 443, 488, 8008, 8009, 8443

    Configuração de cliente

Modifique o arquivo de origem após fazer backup do arquivo de origem

sudo vim CentOS-Base.repo 
[Base]
name=base
baseurl=http://172.16.1.254/centos/7/Base/x86_64
enabled=1
gpgcheck=0
gpgkey=http://172.16.1.254/RPM-GPG-KEY-CentOS-6

sudo vim epel.repo
[epel]
name=epel
baseurl=http://172.16.1.254/epel/7/x86_64
enabled=1
gpgcheck=0
gpgkey=http://172.16.1.254/RPM-GPG-KEY-CentOS-6

Use rsync para sincronizar o site de origem espelho

Para usar o rsync para sincronizar o site de origem do espelho, o site precisa oferecer suporte ao protocolo rsync. Descobri que a China University of Science and Technology e a Tsinghua University podem ser usadas na China, mas a velocidade da minha conexão com a Tsinghua University é muito lenta. O site espelho de origem, por exemplo.
 
Outra vantagem de usar rsync para espelhamento de site é que ele pode espelhar diferentes fontes de arquitetura e até mesmo outras fontes de software, como pypi. A seguir estão os scripts que utilizo de forma síncrona.

Sincronizar Centos 7 com rsync

#!/bin/bash

VER='7'
REPOS=(os updates extras)

for REPO in ${REPOS[@]}
do
    rsync -auvz --delete --exclude='repodata' \
    rsync://rsync.mirrors.ustc.edu.cn/repo/centos/${VER}/${REPO}/x86_64/ ~/repo/centos/${VER}/${REPO}/x86_64/
    createrepo ~/repo/centos/${VER}/${REPO}/x86_64/
done
for REPO in ${REPOS[@]}
do
    rsync -avz --delete --exclude='repodata' \
    rsync://rsync.mirrors.ustc.edu.cn/repo/centos-altarch/${VER}/${REPO}/aarch64/ ~/repo/centos/${VER}/${REPO}/x86_64/
    createrepo ~/repo/centos/${VER}/${REPO}/x86_64/
done

Use rsync para sincronizar Centos Stream 8

#!/bin/bash

VER='8-stream'
ARCHS=(x86_64 aarch64)
REPOS=(AppStream BaseOS HighAvailability PowerTools extras)

for ARCH in ${ARCHS[@]}
do
    for REPO in ${REPOS[@]}
    do
        rsync -avuz --delete --exclude='repodata' \
        rsync://rsync.mirrors.ustc.edu.cn/repo/centos/${VER}/${REPO}/${ARCH}/ ~/repo/centos/${VER}/${REPO}/${ARCH}/
        createrepo ~/repo/centos/${VER}/${REPO}/${ARCH}/
    done
done

Use rsync para sincronizar epel

#!/bin/bash

VERS=(7 8)
ARCHS=(x86_64 aarch64)

# sync epel7
for VER in ${VERS[@]}
do
    for ARCH in ${ARCHS[@]}
    do
        rsync -avuz --delete --exclude={'repodata','debug'} \
        rsync://rsync.mirrors.ustc.edu.cn/repo/epel/${VER}/Everything/${ARCH}/ \
        ~/repo/epel/${VER}/Everything/${ARCH}
        createrepo ~/repo/epel/${VER}/Everything/${ARCH}
    done
done

Sincronizar Kubernetes com rsync

#!/bin/bash

REPOS=(kubernetes-el7-x86_64 kubernetes-el7-aarch64 minikube-el7-x86_64)

for REPO in ${REPOS[@]}
do
    rsync -avz --delete --exclude='repodata' \
    rsync://rsync.mirrors.ustc.edu.cn/repo/kubernetes/yum/repos/${REPO} \
    ~/repo/kubernetes/yum/repos
    createrepo ~/repo/kubernetes/yum/repos
done

outras instruções

É relativamente simples usar o rsync para sincronizar. A configuração subsequente do Apache é semelhante à anterior, então não vou repeti-la. Além disso, quando você usa rsync para sincronizar a fonte da Universidade de Ciência e Tecnologia da China, é recomendado usar o seguinte comando para visualizar o diretório específico, e o diretório fonte do diretório raiz repo e centos é usado para explicação .

rsync rsync://rsync://rsync.mirrors.ustc.edu.cn/repo/ # 查看根repo目录下的内容
rsync rsync://rsync://rsync.mirrors.ustc.edu.cn/repo/centos # 查看根centos目录下的内容

Acho que você gosta

Origin blog.51cto.com/huanghai/2642897
Recomendado
Clasificación