LAN上に独自のローカルリポジトリを構築して、LAN上のマシンが更新およびアップグレードできるようにします。インターネットを使用せずにパッケージを更新、アップグレード、インストールなどできるように、パッケージをダウンロードしてローカルサーバーに保存します。
* LAN経由でオフラインリポジトリを作成するには*
ローカルApache Webサーバーのインストール
# apt-get install Apache2
デフォルトでは、DebianのApacheパッケージはシステムの/var/www
の下にWebサイトをセットアップします。私たちの目的にとっては、それで問題ないので、これ以上何もする必要はありません。お気に入りのブラウザをhttp://localhost
に向けることで簡単にテストできます。実際に/var/www/index.html
に保存されているデフォルトのインストール後Webページが表示されます。
Debianパッケージリポジトリディレクトリを作成
ディレクトリ/var/www/debs
の作成を選択します。その下に、サポートする必要がある各アーキテクチャに1つずつ、「アーキテクチャ」ディレクトリを作成する必要があります。 1台のコンピューター(またはコンピューターの種類)のみを使用している場合、必要なものは1つだけです。通常、32ビットシステムの場合は「i386」、64ビットの場合は「AMD64」です。他のアーキテクチャを使用している場合、おそらくこれについてはすでに知っていると思います。次に、特定のアーキテクチャの「.deb」パッケージファイルを適切なディレクトリにコピーします。お気に入りのWebブラウザをhttp://localhost/debs/AMD64
(たとえば)にポイントすると、64ビットシステム用のパッケージのリストが表示されます。
Packages.gzファイルを作成
次に、APTが使用するカタログファイルを作成する必要があります。これは、「dpkg-scanpackages」というユーティリティを使用して行われます。 LAN上のAMD64パッケージを更新するために使用するコマンドは次のとおりです。
# cd /var/www/debs/
# dpkg-scanpackages AMD64 | gzip -9c > AMD64/Packages.gz
APTにリポジトリを知らせる
今やるべきことは、APTにリポジトリについて知らせることだけです。これを行うには、/ etc/apt/sources.listファイルを更新します。次のようなエントリが必要です。
deb http://localhost/debs/ AMD64/
Localhostの代わりにシステムの実際のホスト名を使用しました-このようにコードはLAN上のすべてのコンピューターで同じですが、1台のコンピューターのみを実行している場合、localhostは問題なく動作します。
次に、APTを更新します。
# apt-get update
buntu Help wiki から:
自分用のシンプルなリポジトリを設定するには4つのステップがあります
1.インストール
dpkg-dev
2。パッケージをディレクトリに入れます
3。パッケージをスキャンし、apt-get updateが読み取れるファイルを作成するスクリプトを作成します
4。 sources.listにリポジトリを指す行を追加しますdpkg-devをインストール
ターミナルを入力
Sudo apt-get install dpkg-dev
ディレクトリ
パッケージを保管するディレクトリを作成します。この例では、
/usr/local/mydebs.
を使用しますSudo mkdir -p /usr/local/mydebs
次に、作成したディレクトリにパッケージを移動します。
以前にダウンロードしたパッケージは通常、システムの
/var/cache/apt/archives
ディレクトリに保存されます。 apt-cacherをインストールした場合、/ packagesディレクトリに追加のパッケージが保存されます。スクリプトupdate-mydebs
シンプルな3つのライナーです。
#! /bin/bash cd /usr/local/mydebs dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
上記をカットしてgeditに貼り付け、update-mydebsとして〜/ binに保存します。 (チルダ「〜」はホームディレクトリを意味します。〜/ binが存在しない場合は作成します。UbuntuはそのディレクトリをPATHに配置します。個人用スクリプトを置くのに適した場所です)。次に、スクリプトを実行可能にします。
chmod u+x ~/bin/update-mydebs How the script works:
dpkg-scanpackagesはmydebsのすべてのパッケージを調べ、出力は圧縮され、apt-get updateが可能なファイル(Packages.gz)に書き込まれます読んでください(これについては、非常に詳細に説明されているリファレンスを参照してください)。/dev/nullは空のファイルです。パッケージに関する追加情報を保持するオーバーライドファイルの代わりになりますが、この場合は実際には必要ありません。詳細については、deb-override(5)を参照してください。
Sources.list
行を追加
deb file:/usr/local/mydebs ./
/etc/apt/sources.listに追加すれば完了です。
CDオプション
Debsを含むディレクトリをCDに書き込み、リポジトリとしても使用できます(コンピューター間の共有に適しています)。 CDをリポジトリとして使用するには、単に実行します
Sudo apt-cdrom add
リポジトリの使用
Mydebsディレクトリに新しいdebを配置するたびに、実行します
Sudo update-mydebs Sudo apt-get update
ローカルパッケージは、Synaptic、aptitude、aptコマンドで操作できます。apt-get、apt-cacheなど。インストールをapt-getしようとすると、満たされている限り、依存関係は解決されます。 。
うまく作られていないパッケージはおそらく失敗しますが、dpkgの地獄に耐えることはできません。
認証済みリポジトリの作成
私はここと他のサイトで答えを見ましたが、ほとんどは認証されていないリポジトリを設定しているという(私見で大きな)不利な点があります。つまり、apt-get
で--allow-unauthenticated
を実行して、そこからパッケージをインストールする必要があります。これは、特にインストールするパッケージがローカルリポジトリのものではない可能性があるスクリプトでは、セキュリティリスクになる可能性があります。
LAN経由で利用できるようにする方法はここでは説明していませんが、Apacheまたはnginxを使用したかなり一般的な構成です(他の回答を参照)。
リポジトリディレクトリのセットアップ
mkdir /home/srv/packages/local-xenial
cd /home/srv/packages/local-xenial
次に、sources.list
に次のような行を追加します。
deb file:/home/srv/packages/local-xenial/ ./
パッケージの追加と削除
パッケージを削除
rm /home/srv/packages/local-xenial/some_package_idont_like
パッケージを追加
cp /some/dir/apackage.deb /home/srv/packages/local-xenial
次のスクリプトを実行して、Packages、Release、InReleaseファイルを生成し、gpgプライベートキーで署名します:
#!/bin/bash
if [ -z "$1" ]; then
echo -e "usage: `basename $0` DISTRO
where DISTRO is the Ubuntu version codename (e.g. 14.04 is trusty)\n
The way to use this script is to do the changes to the repo first, i.e. delete or copy in the .deb file to /srv/packages/local-DISTRO, and then run this script\n
This script can be run as an unprivileged user - root is not needed so long as your user can write to the local repository directory"
else
cd /srv/packages/local-"$1"
# Generate the Packages file
dpkg-scanpackages . /dev/null > Packages
gzip --keep --force -9 Packages
# Generate the Release file
cat conf/distributions > Release
# The Date: field has the same format as the Debian package changelog entries,
# that is, RFC 2822 with time zone +0000
echo -e "Date: `LANG=C date -Ru`" >> Release
# Release must contain MD5 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
echo -e 'MD5Sum:' >> Release
printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
printf '\n '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
# Release must contain SHA256 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
echo -e '\nSHA256:' >> Release
printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
printf '\n '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
# Clearsign the Release file (that is, sign it without encrypting it)
gpg --clearsign --digest-algo SHA512 --local-user $USER -o InRelease Release
# Release.gpg only need for older apt versions
# gpg -abs --digest-algo SHA512 --local-user $USER -o Release.gpg Release
# Get apt to see the changes
Sudo apt-get update
fi
conf/distributionsファイルの内容の例
Origin: My_Local_Repo Label: My_Local_Repo Codename: xenial Architectures: i386 AMD64 Components: main Description: My local APT repository SignWith: 12345ABC
リンク
https://wiki.debian.org/RepositoryFormat
http://ubuntuforums.org/showthread.php?t=1090731
https://help.ubuntu.com/community/CreateAuthenticatedRepository
Nginxとrepreproによってローカルソースサーバーをセットアップすることもできます。
Debianパッケージをインストールする
Sudo apt-get install reprepro nginx
repreproのディレクトリを作成して編集する
Sudo mkdir -p /srv/reprepro/ubuntu/{conf,dists,incoming,indices,logs,pool,project,tmp}
$ cd /srv/reprepro/ubuntu/
$ Sudo chown -R `whoami` . # changes the repository owner to the current user
/ srv/reprepro/ubuntu/conf/distributions
Origin: Your Name
Label: Your repository name
Codename: karmic
Architectures: i386 AMD64 source
Components: main
Description: Description of repository you are creating
SignWith: YOUR-KEY-ID
/ srv/reprepro/ubuntu/conf/options
ask-passphrase
basedir .
それをrepreproに含めてビルドします
$ reprepro includedeb karmic /path/to/my-package_0.1-1.deb \
# change /path/to/my-package_0.1-1.deb to the path to your package
構成nginx:
/etc/nginx/sites-available/vhost-packages.conf
server {
listen 80;
server_name packages.internal;
access_log /var/log/nginx/packages-access.log;
error_log /var/log/nginx/packages-error.log;
location / {
root /srv/reprepro;
index index.html;
}
location ~ /(.*)/conf {
deny all;
}
location ~ /(.*)/db {
deny all;
}
}
バケットサイズを最適化する:
/etc/nginx/conf.d/server_names_hash_bucket_size.conf
server_names_hash_bucket_size 64;
インストールガイドリンク への参照
apt-mirror
およびapt-cacher
をご覧ください。
インストール方法 のガイドを使用してください。
@ BigSack's answer および buntuの公式wiki投稿 の指示は、Ubuntu 18.04では、次の2つの変更を加えるまで機能しませんでした。
プレーンな非圧縮Packages
ファイルを生成します(これを実行するときは、作業ディレクトリがすべてのパッケージのある場所である必要があります)
cd /usr/local/mydebs
dpkg-scanpackages -m . > Packages
/etc/apt/sources.list
に次のエントリを追加します
deb [trusted=yes] file:/usr/local/mydebs ./
ローカルリポジトリを作成する理由はいくつかあります。 1つ目は、更新するUbuntuマシンが複数ある場合に帯域幅を節約することです。たとえば、少なくとも1週間に1回更新する必要があるUbuntuマシンが25台ある場合、リポジトリ以外のすべてをローカルで実行できるため、帯域幅を大幅に節約できます。
ほとんどの組織には、ネットワークゲートウェイ用の適切な帯域幅がありますが、この帯域幅は貴重な商品であり、賢明に使用する必要があります。
多くの組織では、ゲートウェイにまだ10MBまたは100MBの制限があるルーターがありますが、内部で1 GBのネットワーク接続があるため、内部で帯域幅をより適切に使用できます。独自のリポジトリを作成する2番目の理由は、内部Ubuntuマシンにロードするアプリケーションを制御できることです。
組織がローカルネットワーク上で使用したくないアプリケーションは、マシンを更新するリポジトリから削除できます。さらに良いことには、テストボックスを作成し、アプリケーションとバージョンをテストしてからネットワークに展開してから、セキュリティと安定性を確保することができます。
最初にミラーをセットアップする必要があります Ctrl+Alt+T キーボードでターミナルを開きます。開いたら、以下のコマンドを実行します。
apt-get install apt-mirror
Apt-mirrorのセットアップが完了したら、このコマンドを使用してリポジトリのダウンロードを開始できます。
apt-mirror /etc/apt/mirror.list1
1ソース: buntuリポジトリの作成
オフラインのローカルリポジトリを作成するには
1。ディレクトリをアクセス可能にする(少なくともルートで)
Sudo mkdir/var/my-local-repo
Sudo dpkg-scanpackages/var/my-local-repo/dev/null>/var/my-local-repo/Packages
echo "deb file:/ var/my-local-repo ./"> /tmp/my-local.list
Sudo mv /tmp/my-local.list /etc/apt/sources.list.d/my-local.list
須藤apt-getアップデート
選択した回答のようにapt-rdepends
を使用しようとしましたが、ローカルリポジトリからパッケージをインストールしようとすると、依存関係の欠落について不満がありました。
apt-rdepends
は、パッケージの依存関係の一部をリストしていませんでした。 apt-cache show
が複数のレコードを示しているという事実と関係があると思います。
代わりにapt-cache depends
を使用しましたが、これでうまくいきました。
依存関係の再帰的なリストの取得
apt-cache depends <packagename> -i --recurse
-i
:重要な依存関係のみ--recurse
:再帰的
消化可能なリストに変換する
| tr -d "|,<,>, "
| sed -e 's/^Depends://g' | sed -e 's/^PreDepends://g'
| sort
| uniq > list.txt
完全なコマンド:
apt-cache depends <packagename> -i --recurse | tr -d "|,<,>, " | sed -e \
's/^Depends://g' | sed -e 's/^PreDepends://g' | sort | uniq > list.txt
パッケージをダウンロードする
for i in $( cat list.txt ); do apt-get download $i; done;
パッケージをスキャンし、Packages.gzに変換します
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz