前言#
樹莓派正式加入內網環境,準備部署 apt 源,為內網環境的其他 debian 類設備或虛擬機提供源倉庫服務,比如 proxmox。如果想模擬企業數據中心環境,要將內外網完全隔離開來,這麼做是必要的。
如何理解本地源#
本地源指的是軟件包的源
本地源設備為內網環境下無法連網的設備提供源服務,為什麼他們不能連網?在數據中心或者其他內網環境下,有些設備出於安全考慮是無法連接互聯網的,不是不能,是不可以連,重點是在安全兩個字。所以本地源就成了內網環境下設備更新軟件包的唯一接入點。
因此需要從網上把源下載到存儲本地源的設備。
例如,我在我的伺服器上安裝了 proxmox,這個虛擬機系統是基於 Debian 操作系統的,它又是在內網環境下,未來要作為內網服務的主力系統,虛擬多個設備提供不同的服務,但是它本身安裝好以後存在各種軟件缺失問題又無法連網進行安裝,因此需要有本地源這麼一個設備為它解決安裝軟件的需求。
如何部署本地源#
首先部署問題網上有教程可以參考,樹莓派的系統是卸載 tf 卡上的,一般買的時候都是 32G。這點容量別說部署本地源了,隨便塞幾個系統鏡像包上去就滿了。
所以繼續給樹莓派加個大容量的背包,他才能承擔起這項任務。所以在部署本地源之前,需要給樹莓派掛載一個移動硬盤。正好手裡有一個 512g 的固態,可以作為它的外挂磁碟用。
#查找磁碟
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 本地源
綜合來看,搭建本地源通常有兩種方式
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 天時間終於是下載完成,之後需要部署 apach 代理,供內網設備進行訪問
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 本地軟件倉庫
7、# pve 更新源(Proxmox VE (PVE) 系統修改設置為國內源教程)