プラスα空間

ブログ in お市 のーと

LANDISK HDL4-Gをapt-get可能にする

LANDISK Home HDL4-Gをカスタマイズするために、どうしても必要になってくる事、それはapt-getでパッケージをインストールできる様にする事です。幸い、何名の方が成功しておられ、資料も残して下さっています。それに沿って、私も追試してみました。

一番簡潔にまとめられていたのが、次のページです。ありがとうございます。

以下の記述は、このウェブページの内容を元に、整理して、不足分を補った内容となっています。

  1. rootパーティションをrwでmount
  2. apt-get用ディレクトリ作成
  3. リンク用スクリプト作成
  4. パッケージリスト習得
  5. dpkgのインストール(1/2)
  6. dpkgのインストール(2/2)
  7. ダウンロードしたパッケージのインストール
  8. 確認
  9. rootパーティションをroでmount

そして、大元となっているのは、次のウェブサイトです。ありがとうございます。

実際の方法を説明します。途中経過もわかる様に、コマンドの実行の様子も貼り付けています。apt-getを可能とするために、キーボードから入力する必要のある部分は、緑色の所です。

Debianのパッケージ管理に関しては、次のウェブサイトをご覧ください。

1. rootパーティションをrwでmount

実際にrootパーティションに書き込む作業は一部なのですが、最初に設定しておきます。

sh-2.05b# mount -o rw,remount /

2. apt-get用ディレクトリ作成

apt-get用のディレクトリなどを作ります。

sh-2.05b# cd /mnt/hda5/landisk/
sh-2.05b# mkdir -p apt/lists/partial
sh-2.05b# touch apt/lists/lock
sh-2.05b# mkdir -p apt-cache/archives/partial
sh-2.05b# mkdir -p dpkg/updates
sh-2.05b# touch dpkg/available
sh-2.05b# touch dpkg/status
sh-2.05b# mkdir backups

確認します。

sh-2.05b# ls
apt  apt-cache  backups  conffiles  dpkg  powerlog  samba
sh-2.05b# ls -algtr
total 9
drwxr-xr-x  12 1000 1024 May 22  2009 ..
drwxr-xr-x   3 root 1024 Mar  4 21:35 samba
-rw-r--r--   1 root   95 Mar  5 04:38 powerlog
drwxr-xr-x   2 root 1024 Mar 18 23:37 conffiles
drwxr-xr-x   3 root 1024 Mar 19 00:06 apt
drwxr-xr-x   3 root 1024 Mar 19 00:07 apt-cache
drwxr-xr-x   3 root 1024 Mar 19 00:07 dpkg
drwxr-xr-x   2 root 1024 Mar 19 00:07 backups
drwxrwxrwx   8 root 1024 Mar 19 00:07 .
sh-2.05b# ls -lR apt
apt:
total 1
drwxr-xr-x  3 root root 1024 Mar 19 00:07 lists

apt/lists:
total 1
-rw-r--r--  1 root root    0 Mar 19 00:07 lock
drwxr-xr-x  2 root root 1024 Mar 19 00:06 partial

apt/lists/partial:
total 0
sh-2.05b#

3. リンク用スクリプト作成

ここで作ったディレクトリやファイルをリンクするためのスクリプトを作ります。

sh-2.05b# cd /mnt/hda5/
sh-2.05b# vi make_apt_links.sh

make_apt_links.shには、以下の内容を記述します。

ln -s /mnt/hda5/landisk/apt /var/lib/apt
ln -s /mnt/hda5/landisk/apt-cache /var/cache/apt
ln -s /mnt/hda5/landisk/dpkg /var/lib/dpkg
ln -s /mnt/hda5/landisk/backups /var/backups

このmake_apt_links.shを実行して、ファイルをリンクします。

sh-2.05b# chmod +x make_apt_links.sh
sh-2.05b# ./make_apt_links.sh

/varはRAMDISKなので、再起動するとこのリンクが消滅します。なので、/etc/init.d/rc.localの最後に、次の一行を追加します。

sh-2.05b# vi /etc/init.d/rc.local
/mnt/hda5/make_apt_links.sh

sources.listの作成

apt-getの取得対象となる場所をsources.listに設定します。

sh-2.05b# mkdir /etc/apt
sh-2.05b# vi /etc/apt/sources.list

sources.listに記述する内容は、次の通りです。

deb http://archive.debian.org/debian-archive/debian/ sarge main contrib non-free
deb-src http://archive.debian.org/debian-archive/debian/ sarge main contrib non-free
deb http://archive.debian.org/debian-archive/debian-security/ sarge/updates main contrib non-free
deb-src http://archive.debian.org/debian-archive/debian-security/ sarge/updates main contrib non-free

次の方々の設定の通りです。ありがとうございます。

4. パッケージリスト習得

apt-getを実行して、パッケージリストをダウンロードします。apt-get自体は、最初からHDL4-Gにバイナリが入っています。

sh-2.05b# which apt-get
/usr/bin/apt-get
sh-2.05b# apt-get update
Get:1 http://archive.debian.org sarge/main Packages [4362kB]
Get:2 http://archive.debian.org sarge/main Release [97B]                                                                            
Get:3 http://archive.debian.org sarge/contrib Packages [59.8kB]                                                                     
Get:4 http://archive.debian.org sarge/contrib Release [100B]                                                                        
Get:5 http://archive.debian.org sarge/non-free Packages [51.9kB]                                                                    
Get:6 http://archive.debian.org sarge/non-free Release [101B]                                                                       
Get:7 http://archive.debian.org sarge/main Sources [1323kB]                                                                         
Get:8 http://archive.debian.org sarge/main Release [100B]                                                                           
Get:9 http://archive.debian.org sarge/contrib Sources [24.7kB]                                                                      
Get:10 http://archive.debian.org sarge/contrib Release [103B]                                                                       
Get:11 http://archive.debian.org sarge/non-free Sources [23.5kB]                                                                    
Get:12 http://archive.debian.org sarge/non-free Release [104B]                                                                      
Get:13 http://archive.debian.org sarge/updates/main Packages [417kB]                                                                
Get:14 http://archive.debian.org sarge/updates/main Release [112B]                                                                  
Get:15 http://archive.debian.org sarge/updates/contrib Packages [623B]                                                              
Get:16 http://archive.debian.org sarge/updates/contrib Release [115B]                                                               
Get:17 http://archive.debian.org sarge/updates/non-free Packages [676B]                                                             
Get:18 http://archive.debian.org sarge/updates/non-free Release [116B]                                                              
Get:19 http://archive.debian.org sarge/updates/main Sources [77.1kB]                                                                
Get:20 http://archive.debian.org sarge/updates/main Release [115B]                                                                  
Get:21 http://archive.debian.org sarge/updates/contrib Sources [20B]                                                                
Get:22 http://archive.debian.org sarge/updates/contrib Release [118B]                                                               
Get:23 http://archive.debian.org sarge/updates/non-free Sources [414B]                                                              
Get:24 http://archive.debian.org sarge/updates/non-free Release [119B]                                                              
Fetched 6342kB in 2m7s (49.8kB/s)                                                                                                   
Reading Package Lists... Done

取得したリストは、/var/lib/apt/listsに入る様です。

5. dpkgのインストール(1/2)

まずは、パッケージの取得と必要なファイルの/usr/binへのコピーをします。

sh-2.05b# apt-get install dpkg
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  dselect gcc-3.3-base libc6 libdb1-compat libgcc1 libncurses5 libstdc++5
Suggested packages:
  locales glibc-doc
The following NEW packages will be installed:
  dpkg dselect gcc-3.3-base libc6 libdb1-compat libgcc1 libncurses5 libstdc++5
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 6930kB of archives.
After unpacking 22.2MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.debian.org sarge/main libdb1-compat 2.1.3-7 [34.3kB]
Get:2 http://archive.debian.org sarge/main libc6 2.3.2.ds1-22sarge6 [4068kB]
Get:3 http://archive.debian.org sarge/main libgcc1 1:3.4.3-13sarge1 [78.5kB]                                                        
Get:4 http://archive.debian.org sarge/main libncurses5 5.4-4 [273kB]                                                                
Get:5 http://archive.debian.org sarge/main gcc-3.3-base 1:3.3.5-13 [149kB]                                                          
Get:6 http://archive.debian.org sarge/main libstdc++5 1:3.3.5-13 [314kB]                                                            
Get:7 http://archive.debian.org sarge/main dselect 1.10.28 [117kB]                                                                  
Get:8 http://archive.debian.org sarge/main dpkg 1.10.28 [1896kB]                                                                    
Fetched 6930kB in 31s (217kB/s)                                                                                                     
Could not exec dpkg!
E: Sub-process /usr/bin/dpkg returned an error code (100)

情報通り、エラーになりました。

sh-2.05b# ls /var/cache/apt/archives/
dpkg_1.10.28_arm.deb               libc6_2.3.2.ds1-22sarge6_arm.deb    libncurses5_5.4-4_arm.deb        partial
dselect_1.10.28_arm.deb            libdb1-compat_2.1.3-7_arm.deb       libstdc++5_1%3a3.3.5-13_arm.deb
gcc-3.3-base_1%3a3.3.5-13_arm.deb  libgcc1_1%3a3.4.3-13sarge1_arm.deb  lock

パッケージは、ダウンロードされているようです。その中のdpkgパッケージを手動で展開します。

sh-2.05b# cd /var/cache/apt/archives/
sh-2.05b# mkdir tmp_dpkg
sh-2.05b# cd tmp_dpkg 
sh-2.05b# ar xv ../dpkg_1.10.28_arm.deb 
x - debian-binary
x - control.tar.gz
x - data.tar.gz
sh-2.05b# tar xvzf data.tar.gz

Debianパッケージは、arでまとめられていて、さらにその中に、data.tar.gzと言う、実際にインストールされるべきファイルがはいっています。data.tar.gzの中には、dpkgで使われるファイルが”/”を抜いた形で、この場合、etc, sbin, usr, varが入っています。

コピー(移動)対象は、次の通りです。

sh-2.05b# ls -l usr/bin/dpkg*
-rwxr-xr-x  1 root root 153548 May 27  2005 usr/bin/dpkg
-rwxr-xr-x  1 root root 181740 May 27  2005 usr/bin/dpkg-deb
-rwxr-xr-x  1 root root  67408 May 27  2005 usr/bin/dpkg-query
-rwxr-xr-x  1 root root  34928 May 27  2005 usr/bin/dpkg-split

これらのdpkg関係のバイナリだけを、システムにコピー(移動)します。

sh-2.05b# mv usr/bin/dpkg* /usr/bin

不要になった、展開済みのパッケージを、ディレクトリごと消します。

sh-2.05b# cd ..
sh-2.05b# rm -rf tmp_dpkg/

6. dpkgのインストール(2/2)

エラーが無くなるまで、次の行程を繰り返します。

sh-2.05b# apt-get install dpkg
sh-2.05b# sed -i -e 's/not-installed/installed/g' /var/lib/dpkg/status

4回程度でエラーが無くなると思います。成功すると、次のメッセージが出ます。

sh-2.05b# apt-get install dpkg
Reading Package Lists... Done
Building Dependency Tree... Done
dpkg is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 7 not upgraded.

参考にしたページでは日本語でしたが、私の場合は英語でした。

この方法で、dpkgをインストールするのは、次の方が発見された様です。ありがとうございます。

ただ、記事中”non-installed”となっていますが、”not-installed”の間違いでしょう。それについては、次の記事でも間違われています。

7. ダウンロードしたパッケージのインストール

先にダウンロードできていたパッケージをインストールします。

sh-2.05b# cd /var/cache/apt/archives
sh-2.05b# ls
dpkg_1.10.28_arm.deb               libc6_2.3.2.ds1-22sarge6_arm.deb    libncurses5_5.4-4_arm.deb        partial
dselect_1.10.28_arm.deb            libdb1-compat_2.1.3-7_arm.deb       libstdc++5_1%3a3.3.5-13_arm.deb
gcc-3.3-base_1%3a3.3.5-13_arm.deb  libgcc1_1%3a3.4.3-13sarge1_arm.deb  lock
sh-2.05b# dpkg -i *.deb

この作業が終わると、/var/lib/dpkg/statusも正しく書き変わる様です。

8. 確認

dpkgでインストールされたパッケージの一覧を取得します。

sh-2.05b# dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                        Version                     Description
+++-===========================-===========================-======================================================================
ii  dpkg                        1.10.28                     Package maintenance system for Debian
ii  dselect                     1.10.28                     a user tool to manage Debian packages
ii  gcc-3.3-base                3.3.5-13                    The GNU Compiler Collection (base package)
ii  libc6                       2.3.2.ds1-22sarge6          GNU C Library: Shared libraries and Timezone data
ii  libdb1-compat               2.1.3-7                     The Berkeley database routines [glibc 2.0/2.1 compatibility]
ii  libgcc1                     3.4.3-13sarge1              GCC support library
ii  libncurses5                 5.4-4                       Shared libraries for terminal handling
ii  libstdc++5                  3.3.5-13                    The GNU Standard C++ Library v3

パッケージの検索は、apt-cacheを使います。

sh-2.05b# apt-cache search curl
curl - Get a file from an HTTP, HTTPS, FTP or GOPHER server
flying - pool/snooker/carrom/hockey/curling simulator for X11
libcurl-ocaml - ocaml curl bindings
libcurl-ocaml-dev - ocaml libcurl bindings
libcurl3 - Multi-protocol file transfer library, now with SSL support!
libcurl3-dbg - libcurl compiled with debug symbols
libcurl3-dev - Development files and documentation for libcurl
libcurl3-gssapi - libcurl compiled with GSSAPI support
libghttp-dev - original GNOME HTTP client library - development kit
libwww-curl-perl - Perl bindings to libcurl
libwww-dev - The W3C WWW library - development files
libwww-ssl-dev - The W3C WWW library - development files (SSL support)
php4-curl - CURL module for php4
pmccabe - McCabe-style function complexity and line counting for C and C++
python2.2-pycurl - Python bindings to libcurl
python2.3-pycurl - Python bindings to libcurl
python2.4-pycurl - Python bindings to libcurl
tclcurl - Tcl bindings to libcurl
wmget - Background download manager in a Window Maker dock app

curlをインストールしてみます。

sh-2.05b# apt-get install curl
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  debconf debconf-i18n libcurl3 libidn11 liblocale-gettext-perl libssl0.9.7 libtext-charwidth-perl libtext-iconv-perl
  libtext-wrapi18n-perl perl-base zlib1g
Suggested packages:
  debconf-doc debconf-utils whiptail dialog gnome-utils libterm-readline-gnu-perl libgnome2-perl libqt-perl libnet-ldap-perl
  libcurl3-gssapi ca-certificates libldap2-dev
Recommended packages:
  apt-utils
The following NEW packages will be installed:
  curl debconf debconf-i18n libcurl3 libidn11 liblocale-gettext-perl libssl0.9.7 libtext-charwidth-perl libtext-iconv-perl
  libtext-wrapi18n-perl perl-base zlib1g
0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Need to get 2144kB of archives.
After unpacking 7164kB of additional disk space will be used.
Do you want to continue? [Y/n] n
Abort.

途中でabortさせて、インストールこそしませんでしたが、うまく動いている様です。

9. rootパーティションをroでmount

作業が終了したら、roに戻しておきます。

sh-2.05b# mount -o ro,remount /

コメントを残す