
Ubuntu日本語フォーラム

ログインしていません。
こんちにちは。
インターネットに接続できないオフライン環境のサーバに
apt-get でパッケージを追加したいと考えています。
ネットの情報を参考にして
後述の手順で試してみましたが
うまくインストールができない状態です。
apt リポジトリの作成が失敗しているのだと思いますが
どのように作業すれば成功するのかわかりません。
どなたかヒントや解決策をご存知の方がいらっしゃたら
ご教示いただけると助かります。
宜しくお願い致します。
■環境情報
OS: Ubuntu 9.04 Server Edition
■手順
次の手順で試しました。
A) 鍵の作成
$ sudo ntpdate hogehoge
$ gpg --gen-key
$ sudo apt-key add ~/.gnupg/pubring.gpg
$ sudo apt-key list
→ 作成した鍵が表示されました。
B) パッケージファイルの転送
検証環境の Ubuntu 9.04 Server Edition の
/var/cache/apt/archives/*.deb
を取得して SSH で対象サーバの
~/archives
にファイル転送しました。
C) sources.list の編集
以下の1行のみを有効にしました。
deb file:/usr/local/src/apt/ ./
D) パッケージのコピー
$ sudo mkdir -p /usr/local/src/apt/archives/
$ sudo cp ~/archives/* /usr/local/src/apt/archives/
E) apt リポジトリの作成
$ cd /usr/local/src/apt/archives/
$ sudo sh -c 'apt-ftparchive sources . > /usr/local/src/apt/Sources'
$ sudo sh -c 'apt-ftparchive packages . > /usr/local/src/apt/Packages'
$ sudo sh -c 'apt-ftparchive contents . > /usr/local/src/apt/Contents-$(dpkg --print-architecture)'
$ sudo sh -c 'apt-ftparchive release . > /usr/local/src/apt/Release'
$ sudo sh -c 'gzip -c /usr/local/src/apt/Sources > /usr/local/src/apt/Sources.gz'
$ sudo sh -c 'gzip -c /usr/local/src/apt/Packages > /usr/local/src/apt/Packages.gz'
$ sudo sh -c 'gzip -c /usr/local/src/apt/Contents-$(dpkg --print-architecture) > /usr/local/src/apt/Contents-$(dpkg --print-architecture).gz'
$ sudo rm -f /usr/local/src/apt/Release.gpg
$ sudo gpg --sign -b -a -o /usr/local/src/apt/Release.gpg /usr/local/src/apt/Release
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“hogehoge”
1024ビットDSA鍵, ID C8CBF993作成日付は2009-07-10
gpg: このセッションでgpg-agentは無効です
パスフレーズを入力: xxxxx
$ ls -l /usr/local/src/apt/
rw-r--r-- 1 root root 1943068 2009-07-10 21:46 Contents-i386
-rw-r--r-- 1 root root 156912 2009-07-10 21:46 Contents-i386.gz
-rw-r--r-- 1 root root 221901 2009-07-10 21:46 Packages
-rw-r--r-- 1 root root 72707 2009-07-10 21:46 Packages.gz
-rw-r--r-- 1 root root 58 2009-07-10 21:46 Release
-rw-r--r-- 1 root root 197 2009-07-10 21:46 Release.gpg
-rw-r--r-- 1 root root 0 2009-07-10 21:45 Sources
-rw-r--r-- 1 root root 28 2009-07-10 21:46 Sources.gz
drwxr-xr-x 2 root root 20480 2009-07-10 21:45 archives
F) apt リポジトリの更新
$ sudo aptitude update
取得:1 file: ./ Release.gpg [197B]
無視 file: ./ Translation-ja
取得:2 file: ./ Release [58B]
パッケージリストを読み込んでいます... 完了
$ sudo apt-get update
取得:1 file: ./ Release.gpg [197B]
無視 file: ./ Translation-ja
取得:2 file: ./ Release [58B]
W: file:/usr/local/src/apt/./Release の取得に失敗しました Unable to find expected entry Packages in Meta-index file (malformed Release file?)
E: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。
G) パッケージのインストール
$ sudo apt-get install make
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ make が見つかりません
オフライン
パッケージが有るのにインストールされないのでしょうか、
もし無いなら
検証環境の Ubuntu 9.04 Server Edition の
/var/cache/apt/archives/*.deb
apt-get install make を実行してパッケージを転送するか、依存関係も含めて手動で対象となるマシンにパッケージを持ってきください。
パッケージがあるのでしたらパスが間違っているのかも。
オフライン
hir0 さん回答ありがとうございます。
hir0 による投稿:
パッケージが有るのにインストールされないのでしょうか
検証環境の Ubuntu 上で必要なパッケージを
apt-get install xxxxx でインストールしてから
/var/cache/apt/archives/ 配下に
いろいろな deb ファイルができている事は確認しています。
OS インストール直後の
/var/cache/apt/archives/ 配下のファイルリストを
テキストファイルに保存しており、
apt-get install でパッケージをインストールする毎に
どんな deb ファイルが追加されたのかを参考のためにメモってます。
検証環境の Ubuntu 上で、
必要なパッケージを全て apt-get install でインストールしてから
動作検証し、問題ない事を確認した後で
オフライン環境の Ubuntu に転送しているといったカンジです。
hir0 による投稿:
パッケージがあるのでしたらパスが間違っているのかも。
apt-get update の実行時に
file:/usr/local/src/apt/./Release の取得に失敗しました
とメッセージが出ているので
パスが間違っているのかな?と思いましたが、
上記のパスを ls コマンドの引数としてコピペして実行したら
ちゃんと存在はしているようでした。
オーナー・グループ・パーミッションも
/var/cache/apt/ 配下を参考にしたので
おもいっきり的外れではないと思っているのですが...。
私の方も引き続き調査しますが、
何かありましたらヒントでもかまいませんので
宜しくお願いします。
オフライン
friendee による投稿:
B) パッケージファイルの転送
検証環境の Ubuntu 9.04 Server Edition の
/var/cache/apt/archives/*.deb
を取得して SSH で対象サーバの
~/archives
にファイル転送しました。
(snip)
G) パッケージのインストール
$ sudo apt-get install make
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ make が見つかりません
makeがそもそもダウンロードされていなかったのでは?
apt-cache policy make
を実行してみましょう。
オフライン
n_saito さん回答ありがとうございます。
前回に引き続き、今回もアドバイスいただいて本当に感謝です。
n_saito による投稿:
makeがそもそもダウンロードされていなかったのでは?
apt-cache policy make
を実行してみましょう。
検証環境の Ubuntu 上では
sudo apt-get install make を実行し、
/var/cache/apt/archives/ 配下に
関係しそうな deb ファイルができている事を確認してから
オフライン環境の Ubuntu に転送したのですが、
これだけだとダウンロードできているという判断は
できないという認識でよろしいでしょうか?
どっちにしろアドバイスいただいたコマンドについては
月曜日に出社しないと試せませんので、
コマンドの結果については改めてご連絡させていただきます。
他にもお気づきの点などありましたら
どんどんご指摘いただけると助かります。
以上です。
宜しくお願い致します。
オフライン
より情報を集めるためにmake以外の結果も欲しいですね。
makeがインストールされ無いのか転送したパッケージがインストールされないのかで変わってきます。
apt-cacheでオプションを使い検索してみるのも良いかもしれません、それにより apt が有効かどうかの確認にもなります。
より情報を集めて月曜日にアタックする手段集まりますように。
オフライン
■検証環境の Ubuntu
(1) 現状のメモ
$ sudo ls -l /var/cache/apt/archives/ | sed "s/ \+/ /g" | cut -d " " -f 8 > ~/apt-archives_01.txt
$ sudo dpkg --list > ~/dpkg_list_01.txt
(2) 各種パッケージのインストール
$ sudo apt-get update
※/etc/apt/sources.list はOSインストール直後のままです。編集していません。
$ sudo apt-get install make
$ sudo apt-get install gcc
$ sudo apt-get install linux-headers-`uname -r`
$ sudo apt-get install build-essential
$ apt-cache policy make
make:
インストールされているバージョン: 3.81-5
候補: 3.81-5
バージョンテーブル:
*** 3.81-5 0
500 http://jp.archive.ubuntu.com jaunty/main Packages
100 /var/lib/dpkg/status
$ apt-cache policy gcc
gcc:
インストールされているバージョン: 4:4.3.3-1ubuntu1
候補: 4:4.3.3-1ubuntu1
バージョンテーブル:
*** 4:4.3.3-1ubuntu1 0
500 http://jp.archive.ubuntu.com jaunty/main Packages
100 /var/lib/dpkg/status
$ apt-cache policy linux-headers-`uname -r`
linux-headers-2.6.28-11-server:
インストールされているバージョン: 2.6.28-11.42
候補: 2.6.28-11.42
バージョンテーブル:
*** 2.6.28-11.42 0
500 http://jp.archive.ubuntu.com jaunty/main Packages
100 /var/lib/dpkg/status
$ apt-cache policy build-essential
build-essential:
インストールされているバージョン: 11.4
候補: 11.4
バージョンテーブル:
*** 11.4 0
500 http://jp.archive.ubuntu.com jaunty/main Packages
100 /var/lib/dpkg/status
(3) 現状のメモ
$ sudo ls -l /var/cache/apt/archives/ | sed "s/ \+/ /g" | cut -d " " -f 8 > ~/apt-archives_02.txt
$ sudo dpkg --list > ~/dpkg_list_02.txt
(4) メモの比較
A) apt-archives_01.txt と apt-archives_02.txt を比較した結果、apt-archives_02.txt に以下のファイルが追加されていた。
binutils_2.19.1-0ubuntu3_i386.deb
build-essential_11.4_i386.deb
dpkg-dev_1.14.24ubuntu1_all.deb
g++-4.3_4.3.3-5ubuntu4_i386.deb
g++_4%3a4.3.3-1ubuntu1_i386.deb
gcc-4.3_4.3.3-5ubuntu4_i386.deb
gcc_4%3a4.3.3-1ubuntu1_i386.deb
libc6-dev_2.9-4ubuntu6_i386.deb
libgomp1_4.3.3-5ubuntu4_i386.deb
libstdc++6-4.3-dev_4.3.3-5ubuntu4_i386.deb
linux-headers-2.6.28-11-server_2.6.28-11.42_i386.deb
linux-headers-2.6.28-11_2.6.28-11.42_all.deb
linux-libc-dev_2.6.28-13.45_i386.deb
make_3.81-5_i386.deb
B) dpkg_list_01.txt と dpkg_list_02 を比較した結果、dpkg_list_02 に以下のパッケージが追加されていた。
ii binutils 2.19.1-0ubuntu3 The GNU assembler, linker and binary utiliti
ii build-essential 11.4 Informational list of build-essential packag
ii dpkg-dev 1.14.24ubuntu1 Debian package development tools
ii g++ 4:4.3.3-1ubuntu1 The GNU C++ compiler
ii g++-4.3 4.3.3-5ubuntu4 The GNU C++ compiler
ii gcc 4:4.3.3-1ubuntu1 The GNU C compiler
ii gcc-4.3 4.3.3-5ubuntu4 The GNU C compiler
ii libc6-dev 2.9-4ubuntu6 GNU C Library: Development Libraries and Hea
ii libgomp1 4.3.3-5ubuntu4 GCC OpenMP (GOMP) support library
ii libstdc++6-4.3-dev 4.3.3-5ubuntu4 The GNU Standard C++ Library v3 (development
ii linux-headers-2.6.28-11 2.6.28-11.42 Header files related to Linux kernel version
ii linux-headers-2.6.28-11-server 2.6.28-11.42 Linux kernel headers for version 2.6.28 on x
ii linux-libc-dev 2.6.28-13.45 Linux Kernel Headers for development
ii make 3.81-5 The GNU version of the "make" utility.
(5) deb ファイルの取得
$ sudo tar cvfz ~/archives.tgz /var/cache/apt/archives/
FileZilla を使って SSH で接続し、archives.tgz を PC にダウンロード
■オフライン環境の Ubuntu
(1) 鍵の作成
最初の投稿で記載した作業を実施。
(2) 現状のメモ
$ sudo ls -l /var/cache/apt/archives/ | sed "s/ \+/ /g" | cut -d " " -f 8 > ~/apt-archives_01.txt
$ sudo dpkg --list > ~/dpkg_list_01.txt
(3) deb ファイルの転送
FileZilla を使って SSH で接続し、archives.tgz をオフラインに環境の Ubuntu に転送
$ mkdir ~/archives
$ cd ~/archives
$ tar xvfz ~/archives.tgz
(4) sources.list の編集
最初の投稿で記載した作業を実施。
(5) パッケージのコピー
$ sudo mkdir -p /usr/local/src/apt/archives/
$ sudo cp ~/archives/var/cache/apt/archives/*.deb /usr/local/src/apt/archives/
$ ls -l /usr/local/src/apt/archives/ | egrep "(make|gcc|linux-headers|build-essential)"
-rw-r--r-- 1 root root 7172 2009-07-13 21:35 build-essential_11.4_i386.deb
-r--r--r-- 1 root root 107412 2009-07-13 21:35 gcc-4.3-base_4.3.3-5ubuntu4_i386.deb
-rw-r--r-- 1 root root 2943390 2009-07-13 21:35 gcc-4.3_4.3.3-5ubuntu4_i386.deb
-rw-r--r-- 1 root root 5124 2009-07-13 21:35 gcc_4%3a4.3.3-1ubuntu1_i386.deb
-r--r--r-- 1 root root 26054 2009-07-13 21:35 libgcc1_1%3a4.3.3-5ubuntu4_i386.deb
-rw-r--r-- 1 root root 668608 2009-07-13 21:35 linux-headers-2.6.28-11-server_2.6.28-11.42_i386.deb
-rw-r--r-- 1 root root 8692696 2009-07-13 21:35 linux-headers-2.6.28-11_2.6.28-11.42_all.deb
-rw-r--r-- 1 root root 156002 2009-07-13 21:35 make_3.81-5_i386.deb
-r--r--r-- 1 root root 42374 2009-07-13 21:35 makedev_2.3.1-88_all.deb
(6) apt リポジトリの作成
最初の投稿で記載した作業を実施。
$ ls -l /usr/local/src/apt/
-rw-r--r-- 1 root root 1904839 2009-07-13 21:56 Contents-i386
-rw-r--r-- 1 root root 151584 2009-07-13 21:56 Contents-i386.gz
-rw-r--r-- 1 root root 182099 2009-07-13 21:56 Packages
-rw-r--r-- 1 root root 60519 2009-07-13 21:56 Packages.gz
-rw-r--r-- 1 root root 58 2009-07-13 21:56 Release
-rw-r--r-- 1 root root 197 2009-07-13 21:57 Release.gpg
-rw-r--r-- 1 root root 0 2009-07-13 21:56 Sources
-rw-r--r-- 1 root root 28 2009-07-13 21:56 Sources.gz
drwxr-xr-x 2 root root 12288 2009-07-13 21:35 archives
(7) apt リポジトリの更新
最初の投稿で記載した作業を実施。
出力されたメッセージも最初の投稿時と同様でした。
(8) パッケージのインストール
最初の投稿で記載した作業を実施。
出力されたメッセージも最初の投稿時と同様でした。
(9) apt-cache policy XXX の結果
$ sudo apt-cache policy make
W: パッケージ make が見つかりません
$ sudo apt-cache policy gcc
W: パッケージ gcc が見つかりません
(10) apt-ftparchive 実行時のカレントディレクトリを変更
最初の投稿時は cd /usr/local/src/apt/archives/ してから
apt-ftparchive を実行していましたが、
/usr/local/src/apt/Release の内容を見たところ、
どうもおかしいような気がします。
$ cat /usr/local/src/apt/Release
Date: Mon, 13 Jul 2009 12:56:53 UTC
MD5Sum:
SHA1:
SHA256:
試しに cd /usr/local/src/apt/ してから apt-ftparchive を実行してみました。
すると /usr/local/src/apt/Release のサイズがさっきまでよりも大きくなりました。
$ ls -l /usr/local/src/apt/
-rw-r--r-- 1 root root 1904839 2009-07-13 22:02 Contents-i386
-rw-r--r-- 1 root root 151584 2009-07-13 22:02 Contents-i386.gz
-rw-r--r-- 1 root root 183701 2009-07-13 22:02 Packages
-rw-r--r-- 1 root root 60588 2009-07-13 22:02 Packages.gz
-rw-r--r-- 1 root root 712 2009-07-13 22:02 Release
-rw-r--r-- 1 root root 197 2009-07-13 22:02 Release.gpg
-rw-r--r-- 1 root root 0 2009-07-13 22:02 Sources
-rw-r--r-- 1 root root 28 2009-07-13 22:02 Sources.gz
drwxr-xr-x 2 root root 12288 2009-07-13 21:35 archives
/usr/local/src/apt/Release の内容もさっきまでよりちゃんとしてそうです。
$ cat /usr/local/src/apt/Release
Date: Mon, 13 Jul 2009 13:02:44 UTC
MD5Sum:
3d9650c642a0796dd85e9a0e2c9a7749 183701 Packages
d41d8cd98f00b204e9800998ecf8427e 0 Release
d41d8cd98f00b204e9800998ecf8427e 0 Sources
SHA1:
ab96c3c8dcc563dfe85c48d98a029c047c6c8b6b 183701 Packages
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 Release
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 Sources
SHA256:
2313359791ec596d23559ff2084eb52a9df3836f63173b5552649f7f856be5fd 183701 Packages
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 Sources
$ sudo aptitude update
取得:1 file: ./ Release.gpg [197B]
無視 file: ./ Translation-ja
取得:2 file: ./ Release [712B]
無視 file: ./ Packages
パッケージリストを読み込んでいます... 完了
現在の状態: 新規が 14 個 [+14]。
$ sudo apt-get update
取得:1 file: ./ Release.gpg [197B]
無視 file: ./ Translation-ja
取得:2 file: ./ Release [712B]
無視 file: ./ Packages
パッケージリストを読み込んでいます... 完了
apt-get update 実行時に出ていた警告メッセージも出なくなりました。
その後、make や gcc を apt-get install したら
正常にインストールできました。
どうも apt-ftparchive 実行時のカレントディレクトリが
まずかったようです。(≧∧≦)
ご回答いただいた hir0 さん、n_saito さん
どうもありがとうございました。
オフライン