0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Linux】ネット環境がない(スタンドアロン)サーバーに、パッケージをインストールする方法

Last updated at Posted at 2020-02-16

はじめに

本番環境など、セキュリティの観点からグローバルネットワークに繋がっていない、
いわゆるスタンドアロンと言われるサーバーがあります。

そのようなサーバーにライブラリやパッケージを追加でインストールしたい時、
どのようにすればインストールできるのか。

以前の仕事ではまったことがあり、その時の解決方法を少しまとめた形にして記したいと思います。
どなたかの参考になれば、幸いです。

記事の最後に、この方法を自動実行するスクリプトを紹介しています。(Gif画像付き)
私個人が作成した物のため動作を保証するものではありませんが、もし機会があれば利用してみてください。

前提条件

記事に使用する単語を以下のように定義します。

単語 定義
スタンドアロン環境 グローバルネットワークに繋がらないサーバー。インストール先。
ローカルPC 自分の作業用PC。ネットワークには繋がっている。

使用環境

名称 OS バージョン 備考
スタンドアロン環境 CentOS 7 AWS EC2(検証用)
ローカルPC macOS Catalina
Dockerコンテナ CentOS 7

全体の流れ

以下のような流れで行います。

  1. ローカルPCでDockerコンテナを立ち上げる
  2. Dockerコンテナでパッケージをダウンロード
  3. ダウンロード先のフォルダをリポジトリとして作成する
  4. 作成したリポジトリをスタンドアロン環境に移す
  5. スタンドアロン環境でリポジトリの設定をする
  6. スタンドアロン環境でインストールする

記事後半にて、上記の詳細な手順を説明していきます。

Docker環境がない場合、ローカルPCで実行しても可能かもしれません。
しかし、依存関係によってはうまく行かないケースが考えられます。
ほとんど何も入っていない、まっさらな環境を利用することをオススメします。

注意点

  • スタンドアロン環境の状態によっては、依存関係でインストールに失敗することがあります。
  • 依存関係が無く、単一のrpmになるパッケージに関しては、rpmコマンドでインストールした方が早いし楽です。
  • この方法では、一度に必要なパッケージを全てインストールすることをオススメします。

詳細な手順

それでは実際にやっていきましょう!

0. スタンドアロン環境準備

検証環境に使用するため、AWS EC2をスタンドアロン環境のサーバーとして用意しました。
グローバルネットワークから隔離するため、ssh(22番ポート)以外の通信はできないようにしています。

↓ スタンドアロン環境でyum updateを実行した結果
スクリーンショット 2020-02-13 18.11.11.png

1. ローカルPCでDockerコンテナを立ち上げる

スタンドアロン環境とできるだけ同じ環境のDockerコンテナを立ち上げます。
今回は、CentOS7のコンテナを立ち上げます。
立ち上がったら、そのコンテナの中にアクセスしましょう。

$ docker run -itd --name centos7 centos:centos7
$ docker exec -it centos7 bash

2. Dockerコンテナでパッケージをダウンロード

まずはパッケージのダウンロード先となるディレクトリを作成します。

# mkdir standalone_install

作成したディレクトリに、スタンドアロン環境に必要なパッケージをまとめてダウンロードします。
今回は、gitiproute2(ネットワーク系のコマンド詰め合わせ)をまとめてダウンロードします。

--downloadonlyオプションを付けることで、インストールは行わないでダウンロードだけ実行することが可能です。

# yum install -y --downloadonly --downloaddir=standalone_install git iproute2

yum install --downloadonly --downloaddir=<directory> <package> 1

ダウンロードしたディレクトリの中を見ると、大量のrpmファイルが入っていることがわかります。

スクリーンショット 2020-02-13 19.01.37.png

3. ダウンロード先のフォルダをリポジトリとして作成する

リポジトリ作成のコマンドcreaterepoをインストールします。

# yum install -y createrepo

早速インストールしたcreaterepoコマンドを使用して、リポジトリを作成します。
ディレクトリを指定して実行するだけで、メタデータが作成されリポジトリとして機能するようになります。

# createrepo standalone_install

repodatacreaterepoコマンドによって作成されたメタデータです。
image.png

次の手順でスタンドアロン環境にファイルを移すので、必要であればファイル圧縮をしておきましょう。

4. 作成したリポジトリをスタンドアロン環境に移す

createrepoコマンドで作成したリポジトリのフォルダを、スタンドアロン環境に移動させます。
今回は、ちょっと面倒ですが以下の手順で移動させます。

  1. Dockerコンテナから抜ける
  2. DockerコンテナからローカルPCにフォルダをコピー
  3. ローカルPCからスタンドアロン環境にフォルダをコピー
# exit  ←コンテナから抜けます。Ctrl+DでもOKです。
$ docker cp centos7:/standalone_install/ ./
$ scp -r standalone_install standalone_ec2:/home/centos/

5. スタンドアロン環境でリポジトリの設定をする

残るはスタンドアロン環境での作業のみとなります。

.repoファイルを作成して、移したリポジトリを設定してあげます。
設定項目は以下になります。

項目名 設定項目
name リポジトリの名前
baseurl リポジトリの実体があるディレクトリのパス
gpgcheck グッピグチェック GPG署名を確認するか否か。 0=false,1=true
$ sudo vi /etc/yum.repo.d/standalone_install.repo
[standalone_repo]
name=standalone_repo
baseurl=file:///home/centos/standalone_install/
gpgcheck=0

file:////は3本です。

6. スタンドアロン環境でインストールする

--enablerepoオプションでリポジトリを指定して、パッケージをインストールします。
その際、外のリポジトリを探しに行かないように--disablerepo=*を設定しています。
--disablerepoオプションは、--enablerepoより前に設定する必要があります)

$ sudo yum install -y --disablerepo=* --enablerepo=standalone_repo git iproute2

検証環境(EC2)でもこの方法でインストールすることができました!
(この画像では全く証明になりませんが...笑)
スクリーンショット 2020-02-15 23.08.01.png

まとめ・おまけ

このインストール方法のキーポイントは、以下になります。

  • スタンドアロン環境と同じOS・バージョンのDockerコンテナを使用すること
  • --downloadonlyオプションを使ってrpmファイルをダウンロードすること
  • createrepoコマンドでリポジトリを作成すること
  • .repoファイルを作ってリポジトリを設定すること
  • --enablerepoでリポジトリを指定してインストールすること

記事の冒頭でも紹介しましたが、このインストール方法を自動実行するスクリプトを個人的に作成しました。
Readmeに利用方法を記載していますので、機会があれば利用してみてください。
https://github.com/hesma2/standalone_install

↓動作イメージ(手順1~3を1つのスクリプトで実行しています)
demo

参考

  1. yum を使用して、パッケージをインストールせずにダウンロードだけ行う

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?