お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2009-07-10 22:12:29

friendee
新しいメンバ
登録日: 2009-06-25

オフライン環境で apt-get を使ってインストール

こんちにちは。

インターネットに接続できないオフライン環境のサーバに
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 が見つかりません

オフライン

 

#2 2009-07-11 12:17:24

hir0
メンバ
登録日: 2008-09-28

Re: オフライン環境で apt-get を使ってインストール

パッケージが有るのにインストールされないのでしょうか、
もし無いなら

検証環境の Ubuntu 9.04 Server Edition の
   /var/cache/apt/archives/*.deb

apt-get install make を実行してパッケージを転送するか、依存関係も含めて手動で対象となるマシンにパッケージを持ってきください。

パッケージがあるのでしたらパスが間違っているのかも。

オフライン

 

#3 2009-07-11 14:59:02

friendee
新しいメンバ
登録日: 2009-06-25

Re: オフライン環境で apt-get を使ってインストール

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/ 配下を参考にしたので
おもいっきり的外れではないと思っているのですが...。

私の方も引き続き調査しますが、
何かありましたらヒントでもかまいませんので
宜しくお願いします。

オフライン

 

#4 2009-07-11 17:40:08

n_saito
メンバ
登録日: 2009-06-23

Re: オフライン環境で apt-get を使ってインストール

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
を実行してみましょう。

オフライン

 

#5 2009-07-11 21:32:33

friendee
新しいメンバ
登録日: 2009-06-25

Re: オフライン環境で apt-get を使ってインストール

n_saito さん回答ありがとうございます。
前回に引き続き、今回もアドバイスいただいて本当に感謝です。

n_saito による投稿:

makeがそもそもダウンロードされていなかったのでは?
apt-cache policy make
を実行してみましょう。

検証環境の Ubuntu 上では
sudo apt-get install make を実行し、
/var/cache/apt/archives/ 配下に
関係しそうな deb ファイルができている事を確認してから
オフライン環境の Ubuntu に転送したのですが、
これだけだとダウンロードできているという判断は
できないという認識でよろしいでしょうか?

どっちにしろアドバイスいただいたコマンドについては
月曜日に出社しないと試せませんので、
コマンドの結果については改めてご連絡させていただきます。

他にもお気づきの点などありましたら
どんどんご指摘いただけると助かります。

以上です。
宜しくお願い致します。

オフライン

 

#6 2009-07-11 23:54:00

hir0
メンバ
登録日: 2008-09-28

Re: オフライン環境で apt-get を使ってインストール

より情報を集めるためにmake以外の結果も欲しいですね。

makeがインストールされ無いのか転送したパッケージがインストールされないのかで変わってきます。
apt-cacheでオプションを使い検索してみるのも良いかもしれません、それにより apt が有効かどうかの確認にもなります。
より情報を集めて月曜日にアタックする手段集まりますように。

オフライン

 

#7 2009-07-13 23:00:27

friendee
新しいメンバ
登録日: 2009-06-25

Re: オフライン環境で apt-get を使ってインストール

■検証環境の 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 さん
     どうもありがとうございました。

オフライン

 

Board footer

Powered by FluxBB