CentOSシステムでミラーサイトを同期して設定する

ミラーサイトのセットアップは、イントラネットと分離ネットワークに適しています。特に、分離ネットワークにはアクティブなソースとソースがないという2つの感覚があります。ここでは、CentOSシステムを例として取り上げ、ミラーサイトのセットアップの自分の経験を記録します。 。
 

reposyncを使用して同期します

同期ツールをインストールする

以前は、rsyncツールとcreaterepoを使用して同期用のメタデータを生成していましたが、CentOSでreposyncツールを使用するためのより良い方法があります。

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

デフォルトのウェアハウスを同期します

インストールが完了したら、すぐにウェアハウスの同期を実行できます。
 
CentOS7のデフォルトリポジトリには次のものが含まれています。

  • ベース
  • 更新
  • エキストラ

CentOS8のデフォルトリポジトリには次のものが含まれます。
 

最初の同期

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

説明:

  1. 「--Download-metadata」はメタデータをダウンロードします。それ以外の場合は、createrepoを使用して生成する必要があります。
  2. 「-P」および「--destdir」はストレージディレクトリを指定します。デフォルトは、コマンドが実行される現在のディレクトリです。
  3. 上記のコマンドは、現在有効なすべてのソースを同期します。コマンド「yum repolist」を使用して、.repoファイルの「[]」の説明を表示または表示し、同時にenable = 1を実行できます。

同期の更新

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

説明:

  1. 「--Delete」は、ウェアハウスに存在しないパッケージを削除します。
  2. 「-N」は、最新の増分更新のみを更新します。

EPELを更新する

EPEL:重要なCentOSソースとして多くの場所で必要とされるエンタープライズLinux用の追加パッケージ。

  • epelソースをインストールする
// CentOS 7
sudo yum install epel-release
// CentOS 8
  • epelソースを更新する

操作方法では、上記の増分更新、または「-repo <repo_id>」を使用して指定されたソースを更新できます。

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

公式EPELドキュメントによると、EPELがCentOS 8で使用されている場合は、powertoolsソースを有効にすることをお勧めします

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

他のアーキテクチャのソースミラーを更新する

他のアーキテクチャ(主にARM)のソースイメージを更新する前に、QEMUを使用してaarch64仮想マシンを仮想化しました。問題は解決しましたが、x86_64ほど高速ではありませんでした。さらに、Windowsでvboxを使用する場合でも、 aarch64の仮想化の問題を解決できないので、もう一度調べました。
 
1つはパラメータを確認することです。reposyncまたはdnfreposyncには--archのパラメータオプションがあります。これは似ていますが、失敗しましたが、noarchパッケージは同期されました。もう1つは、ソースURLを変更することです。これは成功しました。 。以下は変更時間です。説明が必要ないくつかの変数。

  • $ releasever:「7」など、現在のシステムのリリースバージョン番号。次のコマンドを使用して表示できます。
    rpm -q --qf %{version} centos-release
  • $ basearch:「x86_64」、「aarch64」などの現在のシステムのCPUアーキテクチャでは、次のコマンドを使用して表示できます。
    rpm -q --qf %{arch} centos-release
  • $ infra:は在庫です。/etc/yum/vars/ディレクトリのカスタム変数は
    、次のコマンドを使用して、centos-releaseパッケージの情報を表示することもできます。
    rpm -qi centos-release

    上記の変数を知った後、ソース同期操作を実行するために同期する必要がある組織として$ basearchを指定できます。たとえば、$ basearchをaarch64に変更して、aarch64パッケージを同期します。

ミラーサイトをインストールする

WebサイトはApacheを使用して実装されています(システムに付属しているため)。

Apacheをインストールする

sudo yum install httpd -y

Apacheを構成する

ソースミラーサイトの新しい構成ファイルrepos.conf

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>

Apache属性の説明

Apacheは<Directory> ... </ Directory>を使用して、指定されたディレクトリのアクセス許可を設定します。この設定は、5つの属性を含むことができるサブディレクトリにも有効です。

Options
AllowOverride
Order
Allow
Deny
  • オプションは、次のオプションを組み合わせて設定できます。
    All:用户可以在此目录中作任何事情。
    ExecCGI:允许在此目录中执行CGI程序。
    FollowSymLinks:服务器可使用符号链接指向的文件或目录。
    Indexes:服务器可生成此目录的文件列表。
    None:不允许访问此目录。
  • AllowOverrideは、最初に設定されたアクセス許可を変更するために、設定値に従ってディレクトリ内の.htaccessファイルを読み取るかどうかを決定します。
    All:读取.htaccess文件的内容,修改原来的访问权限。
    None:不读取.htaccess文件

    ユーザーがアクセス許可を変更するために.htaccessファイルを作成できないようにするために、apache2.confファイルの各ディレクトリのデフォルト設定は次のとおりです。

    AllowOverride None。
  • Allowは、Apacheサーバーへのアクセスを許可するホストを設定するために使用されます。次に例を示します。
    Allow from all  # 允许所有主机的访问
    Allow from 202.96.0.97 202.96.0.98  # 允许来自指定IP地址主机的访问
  • 拒否は、Apacheサーバーへのアクセスを拒否するホストを設定するために使用されます。次に例を示します。
    Deny from all  # 拒绝来自所有主机的访问
    Deny from 202.96.0.99 202.96.0.88 # 拒绝指定IP地址主机的访问
  • Orderは、許可と拒否の順序を指定するために使用されます:Order allow、deny

ApacheのSELinuxのブール変数

ネットワークサービスの場合、SElinuxは最小動作要件のみを開きます。Apacheサーバーの機能を利用するには、httpdスクリプトネットワークアクセスの許可、httpdによるNFSおよびCIFSへのアクセスの許可など、特定の動作を許可するためにブール値をオンにする必要があります。ファイルシステム、Common Gateway Interface(CGI)スクリプトの実行を許可します。コマンドgetseboolを使用して、現在のブール変数を照会できます。次に、次のsetseboolコマンドを使用して、ブール変数を開くことができます。

#setsebool – P httpd_enable_cgi on

以下は、一般的に使用されるブール変数です。

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 挂载。

ApacheのSELinuxのファイルタイプ

SELinuxが有効になっている場合、Apache HTTPサーバー(httpd)はデフォルトで制限付きhttpd_tドメインで実行され、他の制限付きネットワークサービスから分離されます。ネットワークサービスが誰かによって破壊されたとしても、その人のリソースと起こりうる損害は限られています。

次の例は、SELinuxでのhttpdプロセスを示しています。

$ 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:00httpd
……

SELinuxコンテキストに関連するhttpdプロセスはsystem_u:system_r:httpd_t:s0です。httpdプロセスはすべてhttpd_tドメインで実行されています。httpdアクセスには、ファイルタイプを正しく設定する必要があります。たとえば、httpdはファイルタイプhttpd_sys_content_tを読み取ることはできますが、書き込みや変更を行うことはできません。
 
さらに、httpdはタイプsamba_share_tのファイル(Sambaアクセスによって制御されるファイル)にアクセスすることも、ユーザーのホームディレクトリにあるuser_home_tでマークされたタイプのファイルにアクセスすることもできません。主な目的はhttpdがユーザーのホームでファイルを読み書きできないようにすることです。ディレクトリとそのアクセス許可を継承します。httpdが読み書きできるファイルの種類はhttpd_sys_content_rw_tです。
 
Apacheのデフォルトのドキュメントルートディレクトリタイプはhttpd_sys_content_tです。特に設定されていない限り、httpdは/ var / www / html /ディレクトリ内のhttpd_sys_content_tファイルとサブディレクトリにのみアクセスできます。
 
さらに、SELinuxはhttpdのいくつかのファイルタイプも定義しています。

  • httpd_sys_content_tは主に、HTML静的Webサイトで使用されるファイルなど、静的コンテンツサービス用のファイルを提供するために使用されます。このタイプのマークアップファイルは、(読み取り専用)httpdにアクセスし、スクリプトhttpdを実行できます。デフォルトでは、このタイプのファイルおよびディレクトリタグは、httpdまたは他のプロセスによって書き込みまたは変更することはできません。注:デフォルトでは、ファイルは/ var / www / html / httpd_sys_content_tタイプタグに作成またはコピーされます。
  • httpd_sys_script_exec_tは、主に/ var / www / cgi-bin /ディレクトリにcgiスクリプトを設定するために使用されます。デフォルトでは、SELinuxポリシーはhttpdがCGIスクリプトを実行することを防ぎます。
  • httpd_sys_content_rw_tは、httpd_sys_content_rw_tのタイプタグを使用して、スクリプトタグファイルhttpd_sys_script_exec_tのタイプの読み取りと書き込みを行います。
  • httpd_sys_content_ra_t httpd_sys_content_ra_tのtypeタグを使用して、マークされたスクリプトファイルhttpd_sys_script_exec_ttypeを読み取って添付します。
     
    ソフトリンクの宛先ファイルディレクトリとそのファイル属性を変更するには、次のコマンドを実行します
    sudo chcon -R -t httpd_sys_content_t /home/mgr/repos

    同時に、パス/ home / mgr / reposのファイル操作権限が755であることを確認してください。
     
    説明:chconコマンドを使用して、ファイルタイプを再識別します。ただし、このようなロゴは恒久的な変更ではありません。システムが再起動すると、ロゴは元に戻ります。ファイルタイプを永続的に変更するには、semanageコマンドとrestoreconコマンドが必要です。

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

    3つのコマンドchcon、semanage fcontext、restoreconの使用方法:

  • chconコマンド
    機能:chconコマンドは、SELinuxファイルの属性を変更するため、つまりファイルのセキュリティコンテキストを変更するために
    使用されます。使用法:chcon [オプション] CONTEXTファイルの
    主なオプション:
    -R:ファイルとディレクトリのコンテキストを再帰的に変更します。 。
    --reference:セキュリティコンテキストをソースファイルからターゲットファイルにコピーします
    -h、-no-dereference:ターゲットリンクに影響します。
    -v、-verbose:各チェックファイルの診断を出力します。
    -u、-user = USER:ターゲットユーザーのセキュリティコンテキストを設定します。
    -r、-role = ROLE:ターゲットセキュリティドメインの役割を設定します。
    -t、-type = TYPE:ターゲットに設定されているセキュリティコンテキストのタイプ。
    -l、-range = RANGE:ターゲットセキュリティコンテキストのターゲットセキュリティコンテキスト範囲に設定されたロールROLEを設定します。
    -f:いくつかのエラーメッセージを表示します。
  • restoreconコマンド
    機能:restore SELinuxファイル属性file属性は、ファイルのセキュリティコンテキストを復元することです。
    使用法:restorecon [-iFnrRv] [-e excludeir] [-o filename] [-f filename | pathname ...]
    主なオプション:
    -i:存在しないファイルを無視します。
    -f:infilename処理するファイルはinfilenameファイルに記録されます。
    -e:ディレクトリ除外ディレクトリ。
    -R -r:ディレクトリを再帰的に処理します。
    -n:ファイルラベルを変更しません。
    -o outfilename:ファイルが正しくない場合は、ファイルリストをoutfilenameに保存します。
    -v:プロセスを画面に表示します。
    -F:ファイルセキュリティコンテキストの強制回復。
    注:restoreconコマンドはchconコマンドに似ていますが、現在のポリシーのデフォルトファイルコンテキストファイルに基づいて、ファイルに関連するオブジェクトのセキュリティコンテキストを設定します。したがって、ユーザーはセキュリティコンテキストを指定しません。代わりに、restoreconはファイル名と一致するファイルコンテキストファイルエントリ。次に、特定のセキュリティコンテキストを適用すると、場合によっては、正しいセキュリティコンテキストが復元されます。
  • semanage fcontextコマンド
    機能:ファイルセキュリティコンテキストの管理
    使用法:
    semanage fcontext [-Sストア]-{a | d | m | l | n | D} [-frst] file_spec
    semanage fcontext [-Sストア]-{a | d | m | l | n | D} -e置換ターゲットの
    主なオプション:
    -a:追加
    -d:削除
    -m:変更
    -l:列挙
    -n:説明ヘッダーを出力しない
    -D:すべて削除
    -f:ファイル
    - s:ユーザー
    -t:タイプ
    -r:
     
    次のコマンドを使用してファイル属性を表示する役割
    # ls -dZ /mywebsite

    ポート番号の変更について
     
    ポリシー設定により、サービスは特定のポート番号でのみ実行を許可される場合があります。ポリシーを変更せずにサービスを実行するポートを変更しようとすると、サービスの開始に失敗する場合があります。まず、SELinuxがHTTPにTCPポートでのリッスンを許可していることを確認し、次のコマンドを使用します。

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

    次のコマンドを使用して変更します。

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

    次に確認します。

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

    クライアント構成

ソースファイルをバックアップした後、ソースファイルを変更します

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

rsyncを使用してミラーソースサイトを同期します

rsyncを使用してミラーソースサイトを同期するには、サイトがrsyncプロトコルをサポートしている必要があります。中国では中国科学技術大学と清華大学を使用できることがわかりましたが、清華大学への接続速度が遅すぎます。たとえば、ソースミラーサイト。
 
サイトミラーリングにrsyncを使用するもう1つの利点は、さまざまなアーキテクチャソース、さらにはpypiなどの他のソフトウェアソースをミラーリングできることです。以下に、同期的に使用するスクリプトを示します。

Centos7を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

rsyncを使用してCentosStream8を同期します

#!/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

rsyncを使用して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

Kubernetesを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

その他の指示

rsyncを使用して同期するのは比較的簡単です。後続のApacheセットアップは前のセットアップと似ているため、繰り返しません。また、rsyncを使用して中国科学技術大学のソースを同期する場合は、次のコマンドを使用して特定のディレクトリを表示することをお勧めします。ルートディレクトリのリポジトリとcentosのソースディレクトリを使用して説明します。 。

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

おすすめ

転載: blog.51cto.com/huanghai/2642897