背景
現在、規制上の理由により、Aptly スナップショットを使用してローカル deb ミラーを設定しています (例: サーバーはインターネット経由でパッケージを取得できません)。これはすべて、通常のアップグレードでは問題なく機能します。リリース アップグレード (Ubuntu 18.04 から 20.04 へ) を実行する必要がある場合、通常は VM を置き換えるだけで済みますが、一部のサーバーでは、ミラーを使用してインプレース リリース アップグレードを実行する必要があります。
現在の状態
設定しました/etc/アップデートマネージャー/メタリリースノードにミラーを指すように設定していますが、もちろんメタリリースとメタリリース LTSファイルをAptlyにコピーします。メタリリースAptly から提供されるファイルは、さまざまな外部 URL、インストーラー、ドキュメントなどを参照するため、まだ機能しません。また、URL を変更して Aptly を指すようにしても、それらのファイルはすべて存在しないことになります。そのため、それらもコピーして提供する必要があります。
解決?
解析する必要があるか?メタリリースファイル、すべてのインストーラーなどをダウンロードし、それらを提供して独自のものを生成しますメタリリースそこからファイルを抽出できますか? もっと簡単な方法があるはずです! これをゼロから構築する必要がありますか、それともツールが利用できますか?
PS. Aptly は部分的に放棄されているようなので、Pulp 3 に切り替えることを考えていますが、それがリリース アップグレードの問題の解決に役立つかどうかはわかりません。
答え1
私たちがやったことは、ローカルミラーを同期し、メタリリース&メタリリース LTSファイルと、署名とリリース情報を含む必要なアップデータ(bionic.tar.gz bionic.tar.gz.gpg など) をデフォルトの Ubuntu リポジトリからダウンロードします。
archive.ubuntu.com/ubuntu/dists/bionic/main/dist-upgrader-all/current/
次に、これらをミラーから利用できるようにし、ミラー URL に一致するメタリリース ファイルの内容を変更しました。
[メタリリーススニペット]
[METARELEASE]
URI = http://$YOUR_MIRROR_HERE/ubuntu_1604/meta-release
URI_LTS = http://$YOUR_MIRROR_HERE/ubuntu_1604/meta-release-lts
[メタリリース lts スニペット]
[...]
Release-File: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic/Release
ReleaseNotes: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic-updates/main/dist-upgrader-all/current/ReleaseAnnouncement
ReleaseNotesHtml: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic-updates/main/dist-upgrader-all/current/ReleaseAnnouncement.html
UpgradeTool: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic-updates/main/dist-upgrader-all/current/bionic.tar.gz
UpgradeToolSignature: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic-updates/main/dist-upgrader-all/current/bionic.tar.gz.gpg
私たちは「apt ディストリビューションアップグレード -dy" を実行して、まずすべてのパッケージをローカルの PACKAGECACHE にダウンロード/取得します。apt/dpkg フラグを使用して PACKAGECACHE およびカスタムの source.list ファイルを上書きできます。完全なオフライン アップグレードが必要ない場合は、これをスキップできます。
/etc/apt/apt.conf.d/10アップグレード
dir::etc::sourcelist /srv/apt/custom_sources.list;
dir::cache::archives /srv/apt/packages;"
この設定により、ローカル パッケージ/構成のみを使用して完全にアップグレードし、アップグレード中に ubuntu.com リポジトリとの通信を防ぐことができます。
注意すべき点は、/etc/environment でシステム全体の http プロキシ サーバーを使用することです。カスタム env でアップグレードを呼び出してこれを上書きするだけです。
$ export HTTP_PROXY=""
$ export http_proxy=""
$ export DEBUG_UPDATE_MANAGER=true
アップデータは /etc/apt/apt.conf.d/10proxy を読み取りません。これはトランスポート専用だからです。
これらの手順を実行しないと、アップグレードプログラムは設定されたプロキシを使用して archive.ubuntu.com にアクセスしようとするため、アップグレードは失敗します。
そして最後にサブシェルを使用してこれを呼び出し、/var/log/dist-upgrade/main.logの情報以外のすべてのログ出力を取得します。
$ (do-release-upgrade -f DistUpgradeViewNonInteractive) &>> $somelog
これが役に立つことを願っています(私たちはこれをゼロから構築しました)