
私はラップトップと、ルーターに接続された外付けハードドライブ内の複数のリポジトリのローカルコピーを持っています。私のルーターは、Samba 共有や FTP サーバーとしてそれらのファイルへのアクセス (資格情報付き) を提供します。
可能であればプロセスを高速化するために、これらのリポジトリが利用可能になったときにそれらをチェックし、そこから更新をダウンロードするように apt-get を設定したいと思います。
もっと明確に言うと、ラップトップが Wi-Fi に接続されているときに、apt-get でインターネット上の通常のリポジトリとローカル リポジトリの両方をチェックするようにします。外部リポジトリのファイルがローカル ミラーのファイルよりも新しい場合、またはミラーが利用できない場合は、apt-get でインターネットからファイルをダウンロードする必要があります。
答え1
独自のリポジトリを設定するには4つのステップがあります
- インストール
dpkg-dev
- パッケージをディレクトリに置く
- パッケージをスキャンして
apt-get update
読み取り可能な ファイルを作成するスクリプトを作成します。 sources.list
リポジトリを指す行を追加します
インストールdpkg-dev
ターミナルを開きます:
sudo apt-get install dpkg-dev
ディレクトリ
パッケージを保存するためのディレクトリを作成します。この例では、 を使用します/usr/local/lan-repo
。
sudo mkdir -p /usr/local/lan-repo
次に、すべてのパッケージを新しいディレクトリに移動します。
すでにダウンロードされているパッケージは、通常、システムの に保存されます/var/cache/apt/archives
。 をインストールしている場合は、apt-cacher
追加のパッケージが ディレクトリに保存されている可能性が高くなりますapt-cacher/packages
。
スクリプトを作成しますupdate-lan-repo
これは非常にシンプルな 3 行のスクリプトです。
#! /bin/bash
cd /usr/local/lan-repo
sudo dpkg-scanpackages . /dev/null | gzip -9c > packages.gz
上記をコピーして、お気に入りのテキスト エディターに貼り付け、 として保存しますupdate-lan-repo
。~/bin
(~
はホーム ディレクトリを意味します。~/bin
まだ存在しない場合は作成します。Ubuntu は自動的にそのディレクトリを PATH に追加します。これは、個人用スクリプトを配置するのに適した場所になります。)
次に、スクリプトを実行可能にします。
chmod u+x ~/bin/update-lan-repo
スクリプトの動作は次のとおりです。
dpkg-scanpackages
は 内のすべてのパッケージを調べlan-repo
、出力を圧縮して ファイルに書き出しますpackages.gz
。このファイルapt-get update
は で読み取ることができます (詳細については、以下を参照してください)。 は/dev/null
空のファイルです。つまり、これは、パッケージに関する追加情報を保持するオーバーライド ファイルの代わりのファイルであり、この場合、実際には必要ありません。 を参照してください。deb-override(5)
さらに詳しく知りたい場合は。
ローカルリポジトリをsources.listファイルに追加する必要があります
echo "deb file:/usr/local/lan-repo ./" >> /etc/apt/sources.list
これで完了です。
CD/DVD オプション
.deb ファイルを含むディレクトリを CD/DVD に保存し、それをリポジトリとして使用することもできます (コンピューター間で共有する場合に適しています)。CD をリポジトリとして使用するには、次の手順を実行します。
次のコマンドを実行するだけです:
sudo apt-cdrom add
新しいリポジトリを使用します。
その後、新しい Debian パッケージを lan-repo ディレクトリに保存するたびに、次のコマンドを実行します。
sudo update-lan-repo
sudo apt-get update
これで、Synaptic、aptitude、apt コマンド ( apt-get
、apt-cache
など) を使用してローカル パッケージを操作できるようになります。apt-get install を実行しようとすると、依存関係が満たされている限り、依存関係が自動的に解決されます。
答え2
ようやくこの問題を解決でき、かなりうまく機能しているので、同様のことを実装したい人々と共有したいと思います。
最初の問題は、私のシステムがマルチアーキテクチャをサポートしているため、ダウンロードエラーを回避するために、ミラーリングされたリポジトリにi386とamd64の両方のパッケージが含まれている必要があることでした(ソースはミラーリングしませんでした)。これは次のように行われます。/etc/apt/mirror.list次の例のように:
deb-i386 http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
私のベースパスそのファイルで定義されているのは/mnt/apt-ミラー、ルーターの USB ポートに接続された外付けハードドライブを Samba 共有としてマウントするスクリプトを実行します (スクリプトはここで確認できます: apt-mirror を使用して LAN ルーターに接続された HDD にファイルを保存する方法
LAN内の他のコンピュータからミラーリングされたリポジトリにアクセスしたかったので、解決策のもう1つの部分はFTPリポジトリの定義を追加することです。初めにで/etc/apt/sources.listこの設定によりapt-getファイルをダウンロードするときに最初にFTPリポジトリを使用し、次にソースリストただし、ミラーリングされたものが最新である場合に限ります。
ローカル リポジトリは次のように定義されます。
deb [arch=amd64,i386] ftp://user:password@lan-resource/apt-mirrors/mirror/archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
交換する場所ユーザーFTPサーバーへのアクセスを許可されたユーザー名で、:パスワード接続に必要な場合はパスワードを入力し(そうでない場合は削除)、lanリソースLAN内のFTPサーバーのアドレスを入力します(私は編集することにしました/etc/ホストハードコードされたIPアドレスの繰り返しを避けるために、192.168.0.1を次のように定義しました。lanftpサーバこの分野で使用するために)。