有一篇建立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