インターネットが使えない時にrpmでパッケージをインストールする話

訂正

先に述べておくと完全オフラインでrpmパッケージをインストールという訳ではないです。
この記事はLinuxサーバがINに接続出来ない状況において、別端末でrpmパッケージを用意しつつそれをLinuxサーバに転送してインストールするまでの手順ということです。

先日上記の様な超特殊状況に身を置く羽目に会いました。
INに接続出来ないLinuxサーバにどうしてもtcpdumpをインストールしてくれと命じられた訳ですが、そこでとった苦肉の対応をここに記述します。

環境

  • ホストOS
    • CentOS7(minimum)
  • Dockerインストール済み
    • イメージOS:CentOS7
  • インストールするパッケージ
    • tcpdump

自機を汚したくないので例によってawsでインスタンスを用意して、Dockerを利用して環境を構築していきます。
仮想マシンだろうがオンプレだろうが、問題なく動作するのでDocker分からない人でも大丈夫です。

今回はtcpdumpをインストールする練習ですので、標準ではtcpdumpが含まれないように最小構成のディストリビューションでOSをインストールします。

大まかな流れ

  1. IN接続可能なホストでrpmファイルをDLする
  2. scpで該当サーバに転送する
  3. rpm -i でインストールする
  4. 足りなければ1~3を繰り返す

無駄にもったいつけましたが要は上に書いた通りのことをするだけです。

コンテナ(環境)構築

まずはDockerをインストールしてコンテナを起動します。

FROM centos:centos7
RUN yum update -y
RUN yum install -y epel-release
RUN yum update -y
RUN yum install -y gcc
RUN yum install -y wget

本来ならINに接続出来ない想定なのでscpで送ると述べておりましたが、あれは嘘です。
今回は面倒なのでwgetでrpmをコンテナ(Linuxサーバ)に直接用意しちゃいます。甘えですがご容赦下さい。

Dockerfileが書けたらイメージをビルドしてコンテナ作成します。

Dockerfileを元にイメージ作成
$ docker build -t labo:centos7 .
コンテナ起動
$ docker run -td labo:centos7
コンテナ内ログイン
$ docker exec -it 【コンテナID】 bash

tcpdumpインストール

準備が整いましたのでいよいよ具体的な作業を行っていきます。

tcpdumpをインストールしたいので以下の手順を実施すると……

rpmダウンロード
$ wget https://rpmfind.net/linux/centos/7.7.1908/os/x86_64/Packages/tcpdump-4.9.2-4.el7.x86_64.rpm
インストール
$ rpm -i tcpdump-4.9.2-4.el7.x86_64.rpm

依存関係のエラーが出てくる筈です。

error: Failed dependencies:
        libpcap >= 14:1.5.3-10 is needed by tcpdump-14:4.9.2-4.el7.x86_64
        libpcap.so.1()(64bit) is needed by tcpdump-14:4.9.2-4.el7.x86_64

上記エラーではlibpcapも用意しなくてはいけないと言っております。
そこで依存関係を解決しようとすると……

libpcapをDL
$ wget http://rpmfind.net/linux/centos/7.7.1908/os/x86_64/Packages/libpcap-1.5.3-11.el7.i686.rpm
再度インストール
$ rpm -i ./*

またまた依存関係のエラーが出てくる筈です。
ここまで来れば気付いたと思いますが、この一連の作業を繰り返すことで依存関係を怒られなくなるまで解決していきます。
先日はwgetすらインストール出来ない状況だったので、windowsでrpmをDLして転送するという作業も、ひたすら繰り返しましたw

結局

tcpdumpに関しては以下のパッケージを揃えればインストール出来ると思います。

  • glibc-2.17-292.el7.i686.rpm
  • glibc-2.17-292.el7.x86_64.rpm
  • libpcap-1.5.3-11.el7.i686.rpm
  • libpcap-1.5.3-11.el7.x86_64.rpm
  • nss-softokn-freebl-3.44.0-5.el7.i686.rpm
  • tcpdump-4.9.2-4.el7.x86_64.rpm

また、「既にインストールされています」みたいなエラーが出てきたら次のコマンドを実行すれば大丈夫です。
ところでワイルドカードで全部指定しても依存関係勝手に解決してくれるの地味に便利ですね。

$ rpm -i ./* --replacepkgs

普通の労働環境ならインターネットに繋いでyumを使えて、依存解決も自動でやれると思いますので、こんな事をする必要はないかもしれません。

以上。
趣旨が分かりにくい記事になってしまったかと思いますが最後までお読みいただきありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA