aptlyでリポジトリ作ったらxenialなのにbionicが出てきた

スポンサーリンク

はじめに

本投稿はaptlyよくわからず実装して痛い目にあった話です。

対処療法的なものを書いてますが間違いがあったら是非ご指摘ください。

aptlyとはapt-getで取得するレポジトリをいろいろできるものです(ざっくり)

自分専用のリポジトリとか、この世から消えては困るパッケージの保管などに便利です。

今回は消えては困るパッケージ補完用のリポジトリを作ったのに、

その作りがおかしいために困ったことになった話です(戒め)。

注意

メモレベルの記載のため詳しく書いてない箇所があります。ご了承ください。

参考サイト

公式サイト。全体の流れはこちら。インストールだけ別ページになってます。

s3含めてこちらのサイト様が一番わかりやすいです。

この投稿の内容もこちらのサイト様の手順をもとにしています。

aptlyについてわかりやすいサイト様。クックパッドにはお世話になっております。

事前準備

aptlyインストール

手順は公式参照で迷わないと思います。

aptlyのversion1.2.0より前だとdebパッケージをaptly repo addすると

「unable to find control.tar.gz part in package」なるエラーを吐くときがあります。。

GPG鍵の作成

作成前にsudo apt-get install rng-toolsを入れておくとエラー吐かない。

gpg --gen-key

※デフォルトの設定でOK

作成されたpubring.gpgをapt-keyで読み込んでおきます。

sudo apt-key add pubring.gpg

作成したgpgのファイルは.gnupgディレクトリにできている。

s3の設定

リポジトリをs3にあげます。この辺の設定は省略します。

要点としてはs3のバケットは非公開でOKだけど静的ウェブサイトのホスティングが必要なくらいでしょうか。

route53の設定

こちらも省略。名前解決ができればOKです。。

ざっくり書くと今回はs3を静的ウェブサイトのホスティングさせてエンドポイントをcnameにする。

以上で準備完了。

一連の流れ

※補足
ローカルのリポジトリ=自分のPCなり、EC2インスタンスにあるリポジトリを指してます。

s3のリポジトリ=実際にapt-getなりしたときに参照するリポジトリです。

①ローカルのリポジトリ作成

自分のPCなりEC2インスタンスで実施。ここではtest-repoというリポジトリを作成してます。

aptly repo create -distribution=xenial test-repo

※ん?と思った方、やさしく見守ってください。。

②aptly.confの用意

①より前から作っておいてもいい。~/.aptly.confを用意しておきます。

s3設定入れておくと楽です。

③どこからかrepoに追加したいpkgを持ってくる

今回はzabbix-agentを例に話ます。こちらから以下2つを用意しました。

・zabbix-agent_3.4.11-1+bionic_amd64.deb

・zabbix-agent_3.4.11-1+xenial_amd64.deb

ちなみにbionicはubuntu18.04、xenialはubuntu16.04です。

この2つをaptly.confに設定した"rootDir"に置いておきます。

④ローカルのリポジトリにパッケージを追加する

aptly repo add test-repo zabbix-agent_3.4.11-1+bionic_amd64.deb

aptly repo add test-repo zabbix-agent_3.4.11-1+xenial_amd64.deb

※ここでaptlyのversion12.0より低いと「unable to find control.tar.gz part in package」エラーが吐かれる場合があります。

⑤snmpshotの作成

※ちなみにsnmpshotの名前がかぶるとsnmpshotが作れないのでaptly snapshot listで確認すると吉です。

以下はtest001というsnmpshotを作っています。

aptly snapshot create test001 from repo test-repo

⑥s3へpublishする

1回目と2回目以降でコマンドが違います。

・1回目専用。test001スナップショットをs3のtestというバケットにアップロードします。

aptly publish snapshot -distribution=xenial test001 s3:tests3:

・2回目以降用。※test002というスナップショットをアップロードする場合のコマンド例です。

aptly publish switch xenial s3:tests3: test002

ここまでで準備完了です。

別の端末、インスタンスなどでapt-getしてみます。

⑦パッケージlistの作成

ここから別の端末、インスタンスです。

xenial(ubuntu16.04)で実行してみます。

xenial(ubuntu16.04)で実行してみます。

だいじなことなので2回かきました。

/etc/apt/sources.list.d/test.listを作って以下を追記します。

deb [arch=amd64] http://tests3/ubuntu xenial main

⑧sudo apt-get updateでパッケージリストをupdate

sudo apt-get updateでパッケージリストを更新します。

⑨apt-cache policyでバージョン確認

sudo apt-cache policy zabbix-agentで確認します。

※以下少し加工してます。

$ sudo apt-cache policy zabbix-agent
zabbix-agent:
~~~省略~~~
Version table:
1:3.4.11-1+bionic 0
500 http://tests3/ubuntu/ xenial/main amd64 Packages
1:3.4.11-1+xenial 0
500 http://tests3/ubuntu/ xenial/main amd64 Packages
~~~省略~~~

はい、xenial なのになぜかbionicがいます。

ubuntu16.04なのにubuntu18.04のパッケージが見えてます。

本来あり得ない話ですが私がミスしているためこんなことになっています。

どうすればよかった?

結論から書くとリポジトリをdistributionごとにわければこんなことにはなりませんでした。

以下各箇所を直していくと

①ローカルのリポジトリ作成

aptly repo create -distribution=bionic test-repo-bionic

aptly repo create -distribution=xenial test-repo-xenial

④ローカルのリポジトリにパッケージを追加する

aptly repo add test-repo-bionic zabbix-agent_3.4.11-1+bionic_amd64.deb

aptly repo add test-repo-xenial zabbix-agent_3.4.11-1+xenial_amd64.deb

⑤snmpshotの作成

aptly snapshot create test001 from repo test-repo-bionic

aptly snapshot create test002 from repo test-repo-xenial

⑥s3へpublishする

・1回目専用
aptly publish snapshot -distribution=bionic test001 s3:tests3:

aptly publish snapshot -distribution=xenial test002 s3:tests3:

・2回目以降

aptly publish switch bionic s3:tests3: test001

aptly publish switch xenial s3:tests3: test002

このようにbionicとxenialでレポジトリわけていればxenialなのにbionicが出てくることはなくなりました。

おまけ:よく使うコマンド

aptly repo list

確認コマンドです。これうってからの↓

aptly repo show -with-packages test-repo

レポジトリ内にあるパッケージ名までわかります。

aptly repo remove test-repo zabbix-agent_1:3.4.11-1+bionic_amd64

④でリポジトリに追加したパッケージを消してくれます。この後snapshotとってpublishすればOK。

最後に

aptlyって便利ですけどあまり使われてないんですかね?

探してもあんまり出てこなかったので残してみました。

distributionにスポットあてた形で書いてますが、他にもいろいろハマる箇所がありそう。

aptよくわかってない証拠ですね。。

aptlyのmirrorですか?まだ触ったことないです!(触るとは言ってない)

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする