訂正
先に述べておくと完全オフラインでrpmパッケージをインストールという訳ではないです。
この記事はLinuxサーバがINに接続出来ない状況において、別端末でrpmパッケージを用意しつつそれをLinuxサーバに転送してインストールするまでの手順ということです。
先日上記の様な超特殊状況に身を置く羽目に会いました。
INに接続出来ないLinuxサーバにどうしてもtcpdump
をインストールしてくれと命じられた訳ですが、そこでとった苦肉の対応をここに記述します。
環境
- ホストOS
- CentOS7(minimum)
- Dockerインストール済み
- イメージOS:CentOS7
- インストールするパッケージ
- tcpdump
自機を汚したくないので例によってawsでインスタンスを用意して、Dockerを利用して環境を構築していきます。
仮想マシンだろうがオンプレだろうが、問題なく動作するのでDocker分からない人でも大丈夫です。
今回はtcpdump
をインストールする練習ですので、標準ではtcpdump
が含まれないように最小構成のディストリビューションでOSをインストールします。
大まかな流れ
- IN接続可能なホストでrpmファイルをDLする
- scpで該当サーバに転送する
- rpm -i でインストールする
- 足りなければ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を使えて、依存解決も自動でやれると思いますので、こんな事をする必要はないかもしれません。
以上。
趣旨が分かりにくい記事になってしまったかと思いますが最後までお読みいただきありがとうございます。