有一篇建立pypi源的在這里需要的可以查看:公司內部建立pypi源-CSDN博客
背景,公司內部有很多工具僅供內部使用,如果用apt的方式就比較方便,只需要修改sources.list將源添加進去就可以了。我們接下來的操作就是為了實現這個需求。
一共三部分,第一部分,安裝nginx搭建web 服務器!第二部分,建立APT源目錄結構!第三部分客戶端添加源到sources.list并測試安裝成功!
1.安裝nginx搭建web服務器:
sudo apt install nginx
(1)在/var/www/html/目錄下創建apt源文件夾
?
cd /var/www/html/mkdir ubuntu
配置web服務器參數:
sudo vim /etc/nginx/sites-availabe/test
內容修改如下:
server {listen 80;server_name 8.8.8.8;root /var/www/html;index index.nginx-debian.html; #這里的文件按照/var/www/html目錄下面實際的文件填!不要一上來就寫index.html!這里是一個小坑location /ubuntu { #這里也不是非要寫ubuntu 具體要按照實際填寫,俺準備將apt源放在ubuntu下面,ubuntu是我上面新創建的文件夾autoindex on;try_files $uri $uri/ = 404;}
}
sudo ln -s /etc/nginx/sites-availabe/test /etc/nginx/sites-enable
開啟服務器:
systemctl restart nginx.service
systemctl status nginx.service
如果nginx server啟動不成功,執行下面命令進行分析:
sudo nginx -t
上面這個命令會提示你/etc/nginx/sites-available/test是否有錯誤,我就是第一次沒成功,因為我把root /var/www/html 寫成了 billxu /var/www/html 這里自己不要瞎改哦!浪費時間!
好了,現在你解決了一些問題,或者直接就啟用成功,恭喜,你現在可以在其他可以ping通你這個server服務器,web 頁面訪問你的服務器了!
瀏覽器輸入:http://8.8.8.8
頁面顯示如下:
說明你成功了!
你也可以訪問:http://8.8.8.8/ubuntu 這時候會出現目錄,但是你的目錄目前是空的。
2.建立APT源目錄結構(不要著急執行命令,先看一下5~7行命令注意事項)
準備工作,安裝包管理工具dpkg:
sudo apt install dpkg-dev
這里要啰嗦幾句,咳咳,apt對目錄十分敏感,所以我們創建文件目錄什么的要絕對認真!
1.cd /var/www/html/ubuntu
2.sudo mkdir -p dists/focal/main/binary-amd64
3.sudo mkdir -p pool/main
4.sudo cp /home/xu/tool-1.0.0-amd64.deb pool/main
5.sudo apt-ftparchive packages pool/main/ > dists/focal/main/binary-amd64/Packages
6.sudo apt-ftparchive -c=release.conf release dists/focal > /var/www/html/ubuntu/dists/focal/Release
7.sudo gpg --output dists/focal/InRelease --clearsign /var/www/html/ubuntu/dists/focal/Release
1~4行命令不會有什么問題,從第5行開始就需要注意了!
第5行生成的Packages文件中包括Filename:pool/main/tool-1.0.0-amd64.deb 這里是告訴apt 這個deb的下載目錄,我一開始的錯誤命令是這樣的:
sudo apt-ftparchive packages /var/www/html/ubuntu/pool/main/ > /var/www/html/ubuntu/dists/focal/main/binary-amd64/Packages 大錯特錯的!!!千萬不要這樣寫!!!這個命令Packages文件中,Filename:/var/www/html/ubuntu/pool/main/tool-1.0.0-amd64.deb這樣會導致在web服務器根本下載不下來這個deb,因為根本不存在!!!
第6行有一個-c=release.conf ,這個也是在測試才發現的,如果不加這個參數客戶端提示如下:
查了一下原因是因為Release文件沒有Codename!創建文件release.conf內容如下:
(py38) xu@xu-ArcherCity:/var/www/html/ubuntu$ cat release.conf
APT::FTPArchive::Release {Origin "YourRepo";Label "YourRepo";Suite "stable";Codename "focal";Architectures "amd64";Components "main";Description "Local APT Repository";
};
第7行如果提示‘‘No secret key’’執行失敗,在運行之前要執行:
gpg --full-generate-key #生成密鑰,按照提示執行
gpg --list-keys #查看剛才填寫的密鑰uid
gpg --armor --output /var/www/html/ubuntu/public.key --export uidname # 這個public.key 客戶端需要用
好了所有步驟執行完之后我們進行最后一步!
3.客戶端添加源到source.list并測試安裝成功!
客戶端執行操作非常容易:
首先,將第二步生成的public.key添加到自己的目錄
sudo apt-key add public.key
其次,修改source.list
sudo vi /etc/apt/sources.list
deb http://8.8.8.8/ubuntu focal main #添加進去
最后執行apt update 更新源
sudo apt update
最最后就可以執行sudo apt install tool!!!發現可以執行成功!
ps:sudo gpg --output dists/focal/InRelease --clearsign /var/www/html/ubuntu/dists/focal/Release 這個命令我執行了好幾次,沒有執行成功,提示:clear-sign failed: No secret key ,后來發現是有個clear-sign的進程一直在執行,后面kill了就好!
pss:
gpg: ? ? ? ?? Version :2.2.19-3ubuntu2.2
dpkg-dev :Version: 1.19.7ubuntu3.2
nginx:?????? Version: 1.18.0-0ubuntu1.5