Ubuntu 16.04: ローカルマシンのリポジトリからパッケージをインストールする

ローカルマシンにリポジトリを作成してパッケージをインストールできるようにする手順を記載します。

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

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

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

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 リポジトリを作成する

リポジトリを作成する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 }'`

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

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

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

$ reprepro includedeb xenial ~/deb/*.deb

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

$ cp ../public.key .

4 リポジトリの追加

apt-add-repositoryでリポジトリを追加します。

$ sudo apt-add-repository "deb file:/home/hiroom2/repo xenial main"

apt-add-repositoryで/etc/apt/sources.listは以下のように変更されます。

$ diff -uprN /etc/apt/sources.list{.org,}
--- /etc/apt/sources.list.org   2016-08-13 07:43:32.618218136 +0900
+++ /etc/apt/sources.list       2016-08-13 07:49:19.777011499 +0900
@@ -48,4 +48,6 @@ deb-src http://security.ubuntu.com/ubunt
 deb http://security.ubuntu.com/ubuntu xenial-security universe
 deb-src http://security.ubuntu.com/ubuntu xenial-security universe
 deb http://security.ubuntu.com/ubuntu xenial-security multiverse
+deb file:/home/hiroom2/repo xenial main
+# deb-src file:/home/hiroom2/repo xenial main
 deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse

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

$ sudo apt-key add /home/hiroom2/repo/public.key

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

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

5 HTTPで公開する

apache2でリポジトリを公開します。

$ sudo apt install -y apache2
$ sudo cp -a repo /var/www/html/

クライアント側でapt-add-repositoryでリポジトリを追加します。

$ sudo apt-add-repository "deb http://ubuntu-16.04-apt.hiroom2.com/repo xenial main"

クライアント側のapt-keyでGPGキーを追加します。

$ wget -O - http://ubuntu-16.04-apt.hiroom2.com/repo/public.key | \
sudo apt-key add -

これ以降はクライアント側でHTTPサーバからパッケージをインストールできます。

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