banner
Aki

Aki

太阳能维修,月亮可更换,星星不闪包退换。
twitter

ラズベリーパイにローカルaptリポジトリをデプロイする

前言#

ラズベリーパイが正式に内部ネットワーク環境に参加し、apt ソースをデプロイする準備を整え、内部ネットワーク環境の他の debian 系デバイスや仮想マシンにソースリポジトリサービスを提供します。企業のデータセンター環境をシミュレートしたい場合、内外ネットワークを完全に隔離する必要があり、これは必要な措置です。

どうやってローカルソースを理解するか#

ローカルソースとは、ソフトウェアパッケージのソースを指します。ローカルソースデバイスは、内部ネットワーク環境下でインターネットに接続できないデバイスにソースサービスを提供します。なぜ彼らはインターネットに接続できないのか?データセンターや他の内部ネットワーク環境では、一部のデバイスはセキュリティ上の理由からインターネットに接続できません。接続できないのではなく、接続してはいけないのです。重要なのは「セキュリティ」という言葉です。したがって、ローカルソースは内部ネットワーク環境下のデバイスがソフトウェアパッケージを更新するための唯一の接続ポイントとなります。そのため、インターネットからソースをダウンロードしてローカルソースを保存するデバイスに移す必要があります。例えば、私のサーバーに proxmox をインストールしました。この仮想マシンシステムは Debian オペレーティングシステムに基づいており、内部ネットワーク環境下で将来的に内部ネットワークサービスの主力システムとして機能し、複数のデバイスを仮想化して異なるサービスを提供します。しかし、インストール後にさまざまなソフトウェアが不足している問題があり、インターネットに接続できないため、ローカルソースというデバイスがソフトウェアのインストールニーズを解決する必要があります。

ローカルソースのデプロイ方法#

まず、デプロイに関する問題については、オンラインで参考にできるチュートリアルがあります。ラズベリーパイのシステムは TF カードからアンインストールされており、一般的に購入時は 32G です。この容量では、ローカルソースをデプロイするどころか、いくつかのシステムイメージパッケージを入れるだけでいっぱいになります。したがって、ラズベリーパイに大容量のバックパックを追加する必要があります。そうしないと、このタスクを担うことができません。したがって、ローカルソースをデプロイする前に、ラズベリーパイに外付けハードディスクをマウントする必要があります。ちょうど手元に 512G の SSD があるので、それを外付けディスクとして使用できます。

#ディスクを探す
root@raspberrypi:/#fdisk -l
#結果の前の部分は省略
Disk identifier: 0x6aef5cb3

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        8192   532479   524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      532480 62333951 61801472 29.5G 83 Linux


Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: Generic
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt

Disk identifier: 8C903F36-23B9-44CB-99B8-D122B713E560Device     Start        End    Sectors   Size Type
/dev/sda1   2048 1000215182 1000213135 476.9G Linux filesystem

sda のディスクを見つけました。以前は Linux のファイルシステムとして使用されていたので、まずデータを消去して再フォーマットします。

root@raspberrypi:/# mkfs -t ext3 /dev/sda
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 125026902 4k blocks and 31260672 inodes
Filesystem UUID: 2898dbe1-7892-4424-9fee-ff8b78b8b32e
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

マウントディレクトリを作成し、ディスクをマウントします。

root@raspberrypi:/#mkdir /opt/sda1
root@raspberrypi:/#chmod 777 /opt/sda1
root@raspberrypi:/#mount /dev/sda /opt/sda1

ディスクの SSID を確認します。

root@raspberrypi:/# blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="0F92-BECC" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="6aef5cb3-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="41c98998-6a08-4389-bf74-79c9efcf0739" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="6aef5cb3-02"
/dev/sda: UUID="2898dbe1-7892-4424-9fee-ff8b78b8b32e" BLOCK_SIZE="4096" TYPE="ext3"

起動時にディスクをマウントするように設定します。万が一、ダウンしたり再起動したりしてマウントされなかった場合、どこに問題があるのかわからなくなり、とても面倒です。

root@raspberrypi:/etc# vim fstab
#fstabの最後の行に以下の内容を追加します。ssidは前のステップで確認したsda情報です。
UUID=2898dbe1-7892-4424-9fee-ff8b78b8b32e /opt/sda1 ext3 defaults        0       0

ディスクのマウントが完了したので、apt ローカルソースのデプロイを開始します。総合的に見ると、ローカルソースの構築には通常 2 つの方法があります。

  1. 必要に応じて取得し、内部ネットワークデバイスが必要なパッケージをリモートコピーの方法でインストールします。参考資料の 1、2、3 はすべてこの方法です。
  2. 直接ローカルリポジトリをデプロイし、ほとんどのソフトウェアパッケージを取得します。参考資料の 4 はこの方法です。
    すでに大容量のハードディスクを準備しているので、後者を考慮しています。また、現在は主に debian システムに基づく proxmox にサービスを提供しているため、デプロイプロセスでソースターゲットを置き換える必要があります。
root@raspberrypi:/# apt install apt-mirror
root@raspberrypi:/# cd /etc/apt
root@raspberrypi:/etc/apt# vim mirror.list
#mirror.listファイルを修正します。
#修正後、apt-mirrorを実行します。
root@raspberrypi:/# apt-mirror

ファイルの内容は以下の通りで、元の公式アメリカのソースを中国のソースに変更します。

############# config ##################
#
set base_path    /opt/sda1/pve_mirror
#
#set mirror_path   $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch  <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads     20
set _tilde 0
#
############# end config ##############

deb http://ftp.cn.debian.org/debian unstable main contrib non-free
deb-src http://ftp.cn.debian.org/debian unstable main contrib non-free

# mirror additional architectures
#deb-alpha http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-amd64 http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-armel http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-hppa http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-i386 http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-ia64 http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-m68k http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-mips http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-mipsel http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-powerpc http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-s390 http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-sparc http://ftp.us.debian.org/debian unstable main contrib non-free

clean http://ftp.us.debian.org/debian

apt-mirror を実行すると、非常に長い時間待たされます。最初は失敗したと思い、ctrl+C で中止しました。再度実行すると、元々102G 必要だったものが 92G に変わり、遅いですが確実にダウンロードしていることがわかりました。

1 日かけてようやくダウンロードが完了しました。その後、内部ネットワークデバイスがアクセスできるように apache プロキシをデプロイする必要があります。

root@raspberrypi:/#apt-get install apache2
root@raspberrypi:/#ln -s /opt/sda1/pve_mirror/mirror/ftp.cn.debian.org/debian /var/www/html/proxmox

ソフトリンクが作成された後、ブラウザを通じてこのラズベリーパイ上のソフトウェアソースにアクセスできるようになります。アクセスアドレスはhttp://ip/pve です。

もちろん、apache2 または nginx の設定がうまくいかない場合は、他の方法もあります。nodejs をインストールし、オープンソースのファイルサービスシステムを使用してリンクを構築することも可能です。例えば、github のhope-serverを使用します。

root@raspberrypi:/#apt install nodejs
root@raspberrypi:/#apt install npm
root@raspberrypi:/#apt install yarn
root@raspberrypi:/#yarn global install hope-server
root@raspberrypi:/#hope-server -d <filepath> -p 8080 -o localhost
#filepathはソフトウェアソースディレクトリで、ディスクマウントパスでも、ディスクマウント後のソフトリンクパスでも構いません。
#ただし、この方法には一定の欠点があり、hope-serverを起動するとコンソールを占有するため、nohup+crontabの方法を取ることができます。
root@raspberrypi:~# nohup hope-server -d /var/www/proxmox/ -p 8080 -o localhost &
[3] 6843
---------------------------------------------------
root@raspberrypi:~# crontab -e
no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]: 2
#エディタの最後の行に追加します。
@reboot nohup hope-server -d /var/www/proxmox/ -p 8080 -o localhost &
#これで毎回再起動するたびに実行されます。

pve ソースの変更方法#

ローカルソースをデプロイした後、次にクライアント、つまり内部ネットワーク内の pve システムでソースアドレスを変更します。パスは /etc/apt/sources.list です。

root@proxmox:/#nano /etc/apt/sources.list
#エディタに以下のようなソースアドレスを追加します。
deb [trusted=yes] http://172.20.0.2:80/proxmox/mirror/mirrors.tuna.tsinghua.edu.cn/debian bullseye main contrib

deb [trusted=yes] http://172.20.0.2:80/proxmox/mirror/mirrors.tuna.tsinghua.edu.cn/debian bullseye-updates main contrib

deb [trusted=yes] http://172.20.0.2:80/proxmox/mirror/mirrors.tuna.tsinghua.edu.cn/debian bullseye-backports main contrib

deb [trusted=yes] http://172.20.0.2:80/proxmox/mirror/mirrors.tuna.tsinghua.edu.cn/debian bullseye-security main contrib

ここまで来ると、すでに成功したと言えます。しかし、予想通りエラーが発生しました😅

Reading package lists... Done
E: Release file for http://172.20.0.2:80/proxmox/mirror/mirrors.tuna.tsinghua.edu.cn/debian/dists/bullseye/InRelease is not valid yet (invalid for another 33d 17h 53min 33s). Updates for this repository will not be applied.
E: Release file for http://172.20.0.2:80/proxmox/mirror/mirrors.tuna.tsinghua.edu.cn/debian/dists/bullseye-updates/InRelease is not valid yet (invalid for another 130d 21h 52min 40s). Updates for this repository will not be applied.
E: Release file for http://172.20.0.2:80/proxmox/mirror/mirrors.tuna.tsinghua.edu.cn/debian/dists/bullseye-backports/InRelease is not valid yet (invalid for another 130d 21h 52min 40s). Updates for this repository will not be applied.

大まかに言うと、時間に関する問題で、pve システムをインストールする際に選択したタイムゾーンが正しくないと思われます。まず、現在の pve システムの時間を確認しましょう。

root@proxmox:~# date
Mon 08 Aug 2022 12:29:02 AM CST

修正します。

root@proxmox:/etc# vim /etc/systemd/timesyncd.conf
#ntpアドレスをソフトルーターに設定します。
root@proxmox:/etc# systemctl restart systemd-timesyncd.service
root@proxmox:/etc# systemctl enable systemd-timesyncd.service
root@proxmox:/etc# date
Sat 17 Dec 2022 07:21:07 AM CST

最後に、apt の更新が正常に行えるようになりました。

参考資料#

1、Apt ローカルソース / リポジトリ
2、APT ローカルソースの作成
3、# apt ローカルソースオフラインインストール
4、# Ubuntu オフライン APT リポジトリの構築
5、# apt-mirror を使用して Ubuntu ローカルソースを作成する
6、# APT-mirror を使用して Ubuntu ローカルソフトウェアリポジトリを 4 ステップで構成する
7、# pve ソースの更新(Proxmox VE (PVE) システムを国内ソースに変更するチュートリアル)

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。