ブログ

Armadillo-X1, Armadillo-IoT G3/G3L,Armadillo-640: 自作Debianパッケージのaptリポジトリ作成,公開方法

at_syunya.ohshio
2018年8月21日 10時27分

Armadillo-X1,Armadillo-IoT G3/G3L,Armadillo-640(以下Armadillo)で、自作Debianパッケージの「aptリポジトリ」を作成,公開する方法をご紹介します。

概要

Armadilloを使用して自作アプリケーション作成後に他のArmadilloへ展開する場合、インストールする度に「Armadilloへパッケージデータを送信する」作業を手動で行った上で「dpkgコマンドによるインストール」を実施する必要があります。 今回はDebianパッケージを管理として「aptリポジトリ」を作成,公開することで、より簡単にインストール作業を行う方法についてご紹介します。 今回の例ではネットワーク経由でaptリポジトリを公開する方法を記載します。

aptリポジトリを作成,公開することで、次に示すパッケージ管理が行えます。

  • パッケージのアップデート管理
    →自作Debianパッケージのアップデートの度に「データダウンロード→dpkgコマンド」をする必要がなくなります。
  • 複数の自作Debianパッケージ管理
    →各パッケージのダウンロード,インストールを繰り返す必要がなくなります。

なお今回ご紹介する例では、以下の条件で実施するものとします。

  • ArmadilloとATDEは有線接続済み
  • パッケージ公開をATDE、インストールをArmadilloで行う
  • 自作Debianパッケージは、別ブログ「Debianパッケージの作成方法」で作成した[hello-world]を使用
  • 公開サーバは標準でATDEにインストールされている[Apache2]を使用する

Debianパッケージの作成方法については、別ブログ「Debianパッケージの作成方法」を参照してください。 またDebianパッケージの詳細については「Debian Project」を参照してください。

前準備

aptリポジトリを作成する前に、必要なツールのインストールや鍵の作成を行います。

repreproのインストール

aptリポジトリの作成ツールとして、[reprepro]をインストールします。 [reprepro]コマンドを使用することで、少ないコマンド数でaptリポジトリを作成することができます。

[atde]$ sudo apt-get install reprepro

[reprepro]の詳細については「DebianRepository SetupWithReprepro」を参照してください。

GnuPG鍵の作成

パッケージのGnuPG署名を行うため「GnuPG鍵」を作成します。 Debianパッケージは基本的にGnuPG認証が行われており、これが行われていないパッケージを[apt-get]しようとすると「警告:パッケージは認証されていません」と警告されてしまいます。

GnuPG鍵を生成するために以下のコマンドを実行します。

[atde]$ gpg --gen-key

実行後にいくつか入力を求められるため、使用したい環境に合わせて入力を行ってください。

gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
gpg: ディレクトリー「******」ができました
gpg: 新しい構成ファイル「******」ができました
gpg: 警告: 「******」のオプションは起動している間、有効になりません
gpg: 鍵輪「******」ができました
gpg: 鍵輪「******」ができました
ご希望の鍵の種類を選択してください:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
選択は? 
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 1024
要求された鍵長は1024ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0)3
Key expires at 2018年08月24日 17時09分59秒 JST
これで正しいですか? (y/N) y
 
あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
 
本名: Atmark-techno
電子メール・アドレス: test@test.com
コメント: Make package test.
次のユーザーIDを選択しました:
    “Atmark-techno (Make package test.) <test@test.com>”
 
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。
 
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。

GnuPG鍵生成完了後、公開鍵を生成します。

[atde]$ gpg --list-keys
pub   1024R/XXXXXXXX 2018-08-21
uid                  Atmark-techno (Make package test.) <test@test.com>
 
[atde]$ gpg --export -a XXXXXXXX > debian-pkg.key
[atde]$ ls
debian-pkg.key

生成した公開鍵[debian-pkg.key]ファイルはArmadillo側で必要になるため、[wget]コマンド等でダウンロードできるようにサーバ上に設置します。

[atde]$ sudo cp debian-pkg.key /var/www/html

aptリポジトリの作成

Armadilloが[apt-get]で自作パッケージをインストールできるようするため、ATDE上で「aptリポジトリ」を作成します。 今回の例ではリポジトリ用のディレクトリを作成し、その中で作業を行います。

[atde]$ mkdir apt-repo-test
[atde]$ cd apt-repo-test
[atde]:~/apt-repo-test$
repreproに用いる設定ファイルの作成

[reprepro]コマンド実行に必要な設定ファイル[distributions]を作成します。 [distributions]ファイルを設置する[conf]ディレクトリを作成し、ディレクトリ中に[distributions]ファイルを作成します。

[atde]:~/apt-repo-test$ mkdir conf
[atde]:~/apt-repo-test$ cd conf
[atde]:~/apt-repo-test/conf$ vi distributions

[distributions]ファイルの内容は以下のようにします。

Origin: hello-world
Label: hello-world
Codename: stretch
Architectures: amd64 armhf
Components: main non-free contrib
Description: Make package test.
SignWith: XXXXXXXX

[SignWith]横の文字列は「GnuPG鍵の作成」にて作成した鍵の情報を入力してください。

aptリポジトリの作成

まずは空のリポジトリを作成します。

[atde]:~/apt-repo-test$ ls
conf
[atde]:~/apt-repo-test$ reprepro export
[atde]:~/apt-repo-test$ reprepro checkpool
[atde]:~/apt-repo-test$ ls
conf  db  dists

作成した空のリポジトリに、作成済みのDebianパッケージを追加します。

[atde]:~/apt-repo-test$ reprepro includedeb stretch ../pkg-test/hello-world_0.0.1_all.deb
Exporting indices...
[atde]:~/apt-repo-test$ ls
conf  db  dists  pool

このファイル群をサーバ上に設置することで、ATDE上での作業は完了です。

[atde]:~/apt-repo-test$ cd
[atde]$ sudo cp -a apt-repo-test /var/www/html/
[atde]$ ls /var/www/html
debian-pkg.key  index.html  apt-repo-test

Armadillo上での設定

ATDE上の自作パッケージをArmadilloにインストールするため、「パッケージ公開サーバの追加」「公開鍵の追加」を行います。 設定を行うために「ATDEのIPアドレス」を記載する箇所があるため、お使いのATDEで割り振られているIPアドレスを記載してください。

パッケージ公開サーバの追加

ArmadilloがインストールできるDebianパッケージサーバに「ATDE上のサーバ」を追加します。

[Armadillo]$ vi /etc/apt/sources.list

このファイルの最後尾に以下の文章を追加します。

deb http://(ATDEのIPアドレス)/apt-repo-test stretch main non-free contrib
公開鍵の追加

ATDEに設置した公開鍵をダウンロードし、APT-KEYに追加します。

[Armadillo]$ wget http://(ATDEのIPアドレス)/debian-pkg.key
[Armadillo]$ apt-key add debian-pkg.key
OK
apt-getの更新

上記の設定がすべて完了したら、[apt-get update]コマンドを実行します。

[Armadillo]$ apt-get update

これによりArmadilloがATDE上の自作パッケージを認識できるようになります。

[Armadillo]$ apt-cache search hello-world
hello-world - Make package test.

Armadilloから自作パッケージの追加,削除

ATDE上の自作パッケージを、Armadilloから[apt-get]コマンドでインストールします。

[Armadillo]$ apt-get install hello-world

上記コマンドが正常に完了すると、自作パッケージの[hello-world-deb]コマンドが実行可能になります。

[Armadillo]$ hello-world-deb
hello-world

またArmadillo上の自作パッケージを削除することも可能です。

[Armadillo]$ apt-get remove hello-world
[Armadillo]$ hello-world-deb
-bash: /usr/bin/hello-world-deb: No such file or directory

関連ページ

・「Armadillo-X1, Armadillo-IoT G3/G3L,Armadillo-640: 自作アプリケーションのDebianパッケージ作成方法