注目キーワード
  1. SEO
  2. デザイン
  3. 集客

【第3回】SVN構築編:AlmaLinuxへのSVNインストールとリポジトリ初期設定:閉塞環境での構築術

はじめに

第2回でActive Directory側の準備が整いました。第3回では、Subversion(SVN)の本体をAlmaLinuxにインストールし、リポジトリを作成します。

単にインストールするだけでなく、インターネットに接続できない「閉塞環境」でのパッケージ導入手順や、ADユーザーがWeb経由で操作するために不可欠な「Linux側の権限設定・SELinux」について詳しく解説します。

構築のポイント(お急ぎの方へ)

  1. パッケージ導入: dnf を使い、閉塞環境(DVD/ISO)からApache、SVN、さらに次回の連携で使う mod_ldap を一括インストール。

  2. リポジトリ作成: svnadmin create コマンドで「箱」を初期化。

  3. 権限設定: 所有者を apache に変更するだけでなく、グループ書き込み権限(775) を与えるのが成功の鍵。

  4. SELinux対策: ファイルの所有者を変えるだけでなく、セキュリティラベル(httpd_sys_rw_content_t) を付与しないと書き込みは拒否されます。

必要なパッケージのインストール

パッケージ検索先の変更(閉塞環境対応)

インターネットに繋がらない環境のため、インストールメディア(ISO)をリポジトリとして使用します。

DVD(ISO)のマウント確認

sudo ls /mnt/
# AppStream BaseOS EFI EULA LICENSE RPM-GPG-KEY-AlmaLinux-10 boot extra_files.json images media.repo

AppStreamBaseOS が表示されればOKです。

マウントされていない場合の対処方法

  1. Hyper-VでISOを「再挿入」する
    1. Hyper-VマネージャーでAlmaLinuxを右クリック > 「設定」

    2. 「SCSI コントローラー」「DVD ドライブ」 を選択。

    3. 「イメージ ファイル」で、第1回で取得した ISO を指定し直して「適用」を押します。

  2. 再度マウントを試みる
    Linux側で以下のコマンドを打ちます。

    sudo mount /dev/sr0 /mnt

リポジトリ設定ファイル(local.repo)の作成

インターネットに繋がらない「閉塞環境」では、通常の設定のまま dnf install を実行しても、外部のリポジトリサーバーに繋ごうとしてエラーになってしまいます。

そこで、「インターネットではなく、マウントしたDVD(ISO)の中を見に行ってね」とOSに教えてあげるための設定ファイルを作成します。

sudo vi /etc/yum.repos.d/local.repo

以下のコードを記載します。

[local-baseos] 
name=Local BaseOS 
baseurl=file:///mnt/BaseOS 
enabled=1 
gpgcheck=0 

[local-appstream] 
name=Local AppStream 
baseurl=file:///mnt/AppStream 
enabled=1 
gpgcheck=0 

Linux(AlmaLinux)でソフトをインストールする dnf コマンドは、あらかじめ「どこにソフトのデータ(パッケージ)があるか」が書かれた設定ファイルを見に行きます。

  • 通常: インターネット上のサーバー(ミラーサイト)を見に行きます。

  • 閉塞環境: ネットに繋がらないため、標準の設定ファイル(/etc/yum.repos.d/almalinux.repo など)をそのまま使うと「ネットに繋がらない」というエラーで止まってしまいます。

設定ファイル(local.repo)の内容解説

作成したファイルの中身をパーツごとに分解して見ていきましょう。

  1. セクション名 [local-baseos]

    • システムが内部でリポジトリを区別するための名前(ID)です。

  2. name=Local BaseOS

    • 人間が見てわかりやすいリポジトリの表示名です。

  3. baseurl=file:///mnt/BaseOS (★最重要)

    • パッケージ(.rpmファイル)が実際に置いてある場所のパスです。

    • 通常のネット経由なら http:// ですが、今回はローカルファイルなので file:// ではじめます。その後の /mnt/BaseOS は、DVDをマウントした場所です。

  4. enabled=1

    • このリポジトリ設定を有効にするかどうかを指定します(1なら有効)。

  5. gpgcheck=0

    • パッケージの「署名(正しい配布元か)」を検証するかどうかです。本来はセキュリティのため 1(検証する)が望ましいですが、信頼できるDVDメディアからのインストールであれば、検証をスキップしたほうが署名キーのインポート等の手間が省け、トラブルが少なくなります。

一括インストール

今回はSVN本体だけでなく、次回のAD連携で必要になる mod_ldap も一緒にインストールしておきます。これでサーバー側の準備は万全です。

# インストール実行 
sudo dnf install -y httpd subversion mod_dav_svn mod_ldap --disablerepo=* --enablerepo=local-*
  • --disablerepo=*: まず、登録されているすべてのリポジトリ(標準のインターネット用など)を一旦 「無効(OFF)」 にします。これにより、存在しないネットへ繋ごうとしてエラーになるのを防ぎます。

  • --enablerepo=local-*: その直後に、先ほど設定ファイル(local.repo)で作成した、名前が「local-」で始まるリポジトリだけを「有効(ON)」 に戻します。

  • *(ワイルドカード)の意味: local-* と書くことで、設定ファイル内の [local-baseos][local-appstream]両方を一括で指定しています。

Apacheの起動とファイアウォールの開放

インストールが完了したら、Apacheを起動します。同時に、外部のPC(クライアント)からブラウザでアクセスできるように、Linux側のファイアウォールの穴あけを行います。

サービスの起動と自動起動設定

# Apacheを起動
sudo systemctl start httpd

# OS再起動時も自動で起動するように設定
sudo systemctl enable httpd

ファイアウォールの開放

AlmaLinuxの標準設定では、外部からのブラウザ接続(HTTP/80番)がブロックされています。以下のコマンドで許可リストに http を追加します。

# HTTP(80番ポート)の通信を恒久的に許可 
sudo firewall-cmd --permanent --add-service=http 

# 設定を即座に反映 
sudo firewall-cmd --reload

設定の確認

以下のコマンドを実行し、services の欄に http が含まれていることを確認します。

sudo firewall-cmd --list-all

[確認結果の例]

public (active)
 target: default
 ...
 services: cockpit dhcpv6-client ssh http <-- これがあればOK!
 ...

SVNリポジトリの作成・設定

リポジトリ保存用ディレクトリの作成

リポジトリを配置するディレクトリを作成します。今回は /var/www/svn をベースディレクトリとします。

# リポジトリ保存用ディレクトリの作成
sudo mkdir -p /var/www/svn

ディレクトリ権限の設定

作成した直後のディレクトリは、所有者が root になっています。このままだと、Apache(ADユーザー)がWeb経由でファイルを書き込むことができず、エラーが発生してしまいます。
所有者の変更と合わせて、グループに対しても適切な書き込み権限を付与します。

# 所有者をapacheユーザーに一括変更 
sudo chown -R apache:apache /var/www/svn

# 書き込み権限を付与
sudo chmod -R 755 /var/www/svn

# 権限の確認 
ls -l /var/www/svn

SELinuxの設定(ファイル書き込み許可)

SELinuxが有効な環境では、「このフォルダはApacheが読み書きしていい場所である」 という専用のラベル(コンテキスト)をフォルダに貼る必要があります。

これを設定しないと、ログインはできても、いざファイルをアップロード(コミット)しようとした際に拒否されます。

# SVNディレクトリに対して「httpdが読み書き可能」なラベルを定義 
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/svn(/.*)?" 

# ラベルを適用
sudo restorecon -Rv /var/www/svn

# 反映確認
ls -Zd /var/www/svn
# unconfined_u:object_r:httpd_sys_rw_content_t:s0 /var/www/svn <- httpd_sys_rw_content_tの真ん中のセクションが「rw(Read/Write)」になっていればOK

設定の解説

  • httpd_sys_rw_content_t: これが「Apache(httpd)が読み書き(rw)できるコンテンツですよ」という印です。

  • semanage fcontext: OSの設定リストに「このフォルダはこのラベルで運用する」と登録します。

  • restorecon:台帳を見て、現物のラベルを正しいものに貼り直す作業です。

SVNリポジトリの作成

テスト用として2つのリポジトリを作成します。

# リポジトリ「repo_a」の作成
svnadmin create /var/www/svn/repo_a

# 同様に「repo_b」も作成(テスト用)
svnadmin create /var/www/svn/repo_b

【疎通テスト】簡易版設定での確認

まずは Apache 経由でリポジトリが「見える」かどうかをテストします。

テスト用の設定ファイル作成

認証なしで誰でも閲覧できる簡易設定を作成します。

sudo vi /etc/httpd/conf.d/subversion.conf

以下の内容を記載して保存します。

<Location /svn/repo_a>
  DAV svn
  SVNPath /var/www/svn/repo_a
</Location>

設定の反映とブラウザ確認

# 設定の文法チェック(Syntax OKが出れば成功) 
sudo apachectl configtest 

# Apacheを再起動して反映 
sudo systemctl restart httpd

ブラウザで http://192.168.10.11/svn/repo_a にアクセスしてください。「repo_a – Revision 0: /」と表示されれば、OKです。

なお、片方のhttp://192.168.10.11/svn/repo_b にアクセスしてみると、「Not Found」と表示されます。

おわりに

これでLinux側に「リポジトリ」という箱が完成し、ファイルシステムとしてのアクセス権も整いました。検証の結果、「所有者・パーミッション・SELinuxラベル」の3つが揃って初めて、SVNへの書き込みが可能になることが分かりました。

現時点では簡易的な設定のため、誰でもリポジトリが見える状態です。また、これだけではまだADユーザーでのログインはできません。

次回、第3回で導入済みの mod_ldap を活用し、Apacheの設定ファイルを仕上げます。さらに、「ADとの通信を許可するSELinux設定」や、最新のAD環境で突き当たる「署名要件の壁」を突破して、Active Directory連携を完成させます!

【構築編:第4回/全5回】

はじめに 第4回では、Apacheのモジュールである mod_dav_svn と mod_ldap を使い、SVNの認証をActive Directoryに丸投げする設定を行います。 この設定が完了すれば、ユーザーはWindowsの[…]

最新情報をチェックしよう!