LAN上に独自のローカルリポジトリを構築して、LAN上のマシンがそこから更新およびアップグレードできるようにします。インターネットを使用せずにパッケージを更新、アップグレード、インストールなどできるように、パッケージをダウンロードしてローカルサーバーに保存します。
LAN上に独自のローカルリポジトリを構築して、LAN上のマシンがそこから更新およびアップグレードできるようにします。インターネットを使用せずにパッケージを更新、アップグレード、インストールなどできるように、パッケージをダウンロードしてローカルサーバーに保存します。
回答:
自分用のシンプルなリポジトリを設定するには、4つのステップがあります
1.インストール2.
dpkg-dev
パッケージをディレクトリに
配置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の地獄に耐えることはできません。
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
。そこで何をし/dev/null
ています。私もマニュアルページを読みましたが、はっきりしていませんでした。
* LAN経由でオフラインリポジトリを作成するには*
ローカルApache Webサーバーをインストールする
# apt-get install apache2
デフォルトでは、DebianのApacheパッケージは/var/www
システム上にWebサイトをセットアップします。私たちの目的にとっては、それで問題ないので、これ以上何もする必要はありません。あなたは簡単にお好みのブラウザをポイントすることによってそれをテストすることができhttp://localhost
、実際に中に保存されているデフォルトのインストール後のWebページが表示されるはずですあなた/var/www/index.html
のDebianパッケージ・リポジトリディレクトリの作成
ディレクトリを作成することにしました/var/www/debs
このため。その下に、サポートする必要がある各アーキテクチャに1つずつ、「アーキテクチャ」ディレクトリを作成する必要があります。1台のコンピューター(またはコンピューターの種類)のみを使用している場合、必要なものは1つだけです。通常、32ビットシステムの場合は「i386」、64ビットの場合は「amd64」です。他のアーキテクチャを使用している場合、おそらくこれについてはすでに知っていると思います。次に、特定のアーキテクチャの「.deb」パッケージファイルを適切なディレクトリにコピーします。お気に入りのWebブラウザでhttp://localhost/debs/amd64
(たとえば)をポイントすると、64ビットシステムのパッケージのリストが表示されます。
Packages.gzファイルを作成する
ここで、APTが使用するカタログファイルを作成する必要があります。これは、「dpkg-scanpackages」というユーティリティを使用して行われます。ここに'
# 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
/var/www/debs
、この回答をに置き換える必要があります/var/www/html/debs
。または、Apacheの設定を手動で編集するには追加の手順が必要になります/etc/apache2
認証済みリポジトリの作成
私はここと他のサイトで答えを見ましたが、ほとんどは認証されていないリポジトリを設定しているという(私見で大きな)不利な点があります。これは、パッケージをインストールするためにapt-get
with を実行する必要があることを意味しています--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
パッケージ、リリース、および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
date -Rc
、私はそれをdate -Ru
編集説明からあなたが意味するものと仮定して修正しました
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;
@BigSackの回答とUbuntuの公式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.list 1
1ソース: Ubuntuリポジトリの作成
オフラインのローカルリポジトリを作成するには
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
sudo apt-get update
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