Ubuntu 16.04: DVDからパッケージをインストールする

DVDに格納されたdebパッケージをインストールする方法について記載します。ネットワーク関係のパッケージを削除してしまった場合に復旧させるのに使うことができます。

 

1 apt-cdromでcdromをリポジトリに追加

cdromをマウントします。

$ sudo mount -t iso9660 /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only

apt-cdromでcdromをリポジトリに追加します。

$ sudo apt-cdrom -m -d /media/cdrom add
Using CD-ROM mount point /media/cdrom/
Identifying... [1a235e539972579c22a0bec9a077f7c3-2]
Scanning disc for index files...
Found 4 package indexes, 0 source indexes, 0 translation indexes and 1 signatures
This disc is called:
'Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)'
Copying package lists...gpgv: Signature made Thu 21 Apr 2016 07:29:18 AM JST using DSA key ID FBB75451
gpgv: Good signature from "Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>"
Reading Package Indexes... Done
Writing new source list
Source list entries for this disc are:
deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
Repeat this process for the rest of the CDs in your set.

apt-cdromによって/etc/apt/sources.listは以下のように変更されます。cdromのリポジトリを削除するには"deb cdrom:"の行を削除します。

$ diff -uprN /etc/apt/sources.list{.org,}
--- /etc/apt/sources.list.org   2016-08-12 10:50:26.281895047 +0900
+++ /etc/apt/sources.list       2016-08-12 10:50:42.603934453 +0900
@@ -2,6 +2,7 @@

 # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
 # newer versions of the distribution.
+deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
 deb http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted
 deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted

@@ -51,3 +52,4 @@ deb http://security.ubuntu.com/ubuntu xe
 deb-src http://security.ubuntu.com/ubuntu xenial-security universe
 deb http://security.ubuntu.com/ubuntu xenial-security multiverse
 deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
+

2 Ubuntu 16.04デスクトップのdebパッケージは少ない

ubuntu-16.04-desktop-amd64.isoは24パッケージしか持ってません。ubuntu-16.04-desktop-amd64.isoはLiveDVDである為、LiveDVDのルートファイルシステムをコピーしてから、grub等の環境依存のdebパッケージをインストールしており、debパッケージをほとんど使わない為です。

$ grep ^Package: /var/lib/apt/lists/Ubuntu*Packages | awk '{ print $2 }'
b43-fwcutter
dkms
libc6-i386
grub-efi
grub-efi-amd64
grub-efi-amd64-bin
grub-efi-amd64-signed
grub
lupin-support
mouseemu
setserial
shim
shim-signed
oem-config
oem-config-gtk
oem-config-slideshow-ubuntu
user-setup
wvdial
libuniconf4.6
libwvstreams4.6-base
libwvstreams4.6-extras
bcmwl-kernel-source
intel-microcode
iucode-tool

ubuntu-16.04-server-amd64.isoは1244パッケージあります。しかしgnome等のデスクトップ環境のパッケージを持ちません。

$ grep ^Package: /var/lib/apt/lists/Ubuntu*Packages | awk '{ print $2}'
accountsservice
libaccountsservice0
acct
acl
libacl1
acpid
adduser
aide
aide-common
python3-alabaster
libasound2
libasound2-data
alsa-utils
amavisd-new
anacron
libjs-angularjs
apache2
apache2-bin
apache2-data
apache2-doc
<snip>

3 debパッケージをDVDを作成する

この記事ではデスクトップ環境のdebパッケージをDVDに格納して、リポジトリとして利用できるようにします。

3.1 debパッケージを用意する

こちらのスクリプトを利用して、ubuntu-desktopのdebパッケージと依存パッケージをダウンロードします。

$ sudo apt install -y apt-rdepends
$ mkdir deb
$ cd deb
$ ../download-deb-package.sh ubuntu-desktop
$ cd ..

3.2 GPGキーを用意する

gpgを作成する場合に以下のメッセージが出る場合があります。マウス操作等でランダム値へのノイズを発生させてやることで解消されますが、SSH経由の場合はマウス操作できません。

Not enough random bytes available. Please do some other work to give

そこでrng-toolsでランダム値を更新します。

$ sudo apt install -y rng-tools
$ sudo rngd -r /dev/urandom

gpgをbatch処理で作成する為の設定ファイルを作成します。

$ cat <<EOF > gpg.txt
Key-Type: RSA
Subkey-Type: RSA
Name-Real: hiroom2
Expire-Date: 0
%pubring public.key
%secring signing.key
%commit
EOF

GPGキーをbatch処理で作成してインポートします。

$ gpg --batch --gen-key gpg.txt
$ gpg --import public.key signing.key

3.3 リポジトリを作成する

リポジトリを作成するrepreproをインストールします。

$ sudo apt install -y reprepro

リポジトリ作成で利用するsubkeyの値を取得します。

$ dir=`pwd`
$ subkey=`gpg --list-keys --keyring ${dir}/public.key --no-default-keyring | \
grep sub | awk '{ print $2 }' | awk -F'/' '{ print $2 }'`

isoというディレクトリを作成し、repreproの設定ファイルを作成します。

$ mkdir iso
$ cd iso
$ mkdir conf
$ cat <<EOF > conf/distributions
Codename: xenial
Architectures: amd64
Components: main
SignWith: ${subkey}
EOF

repreproでリポジトリを追加します。

$ reprepro includedeb xenial ~/deb/*.deb

GPGキーの公開鍵をisoディレクトリに格納します。

$ cp ../public.key .

3.4 DVDの作成

genisoimageでisoイメージを作成します。作成したisoイメージをdvdrecord等でメディアに書き込みます。

$ genisoimage -J -R -V "Ubuntu 16.04 repo" -o ubuntu-16.04-repo.iso iso

3.5 リポジトリの追加

メディアをDVDドライブに入れてマウントします。

$ sudo mount /dev/cdrom /media/cdrom

apt-keyでGPGキーを追加します。

$ sudo apt-key add /media/cdrom/public.key

apt-cdromで追加します。ディスク名がデータベースにないので"Ubuntu 16.04 repo"を入力します。

$ echo "Ubuntu 16.04 repo" | sudo apt-cdrom -m -d /media/cdrom add
Using CD-ROM mount point /media/cdrom/
Identifying... [24043ba8f9dff07baf00246e9de86642-2]
Scanning disc for index files...
Found 1 package indexes, 0 source indexes, 0 translation indexes and 0 signatures
Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1':
Name: 'Ubuntu 16.04 repo'
This disc is called:
'Ubuntu 16.04 repo'
Reading Package Indexes... Done
Writing new source list
Source list entries for this disc are:
deb cdrom:[Ubuntu 16.04 repo]/ xenial main
Repeat this process for the rest of the CDs in your set.

これ以降はネットワークが動作しない状態でもDVDからパッケージをインストールできます。

$ sudo apt update -y
$ sudo apt install -y ubuntu-desktop