本文已参与 新人创作礼 活动,一起开启掘金创作之路
之前接触最多的都是Fedora系列的linux系统,都是rpm包,在线管理使用yum。最近接触了国产Linux系统UOS,它是基于debian系列的linux系统,软件包都是deb格式,在线管理使用apt,今天分享下如何搭建自己的deb仓库。
创建私有deb仓库
1、首先得准备一台debian系列的机器,最常用的应该就是ubuntu了\
2、安装nginx、reprepro、gnupg
# apt-get update
# apt-getinstall nginx reprepro gnupg
3、测试nginx
# systemctl status nginx
# ip a
浏览器打开http://IP
4、移除默认的index文件
# mv /var/www/html/index.nginx-debian.html /tmp
5、nginx中添加仓库配置
# vim/etc/nginx/sites-enabled/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
}
}
当然也可以自己修改root指定的目录
# nginx -t
# nginx-s reload
6、创建仓库根目录
# mkdir -p /var/www/html/demo
7、创建仓库配置文件
# mkdir /var/www/html/demo/conf
# vim /var/www/html/demo/conf/distributions
Origin: Uos
Label: Uos Education
Suite: unstable
Codename: xenial #发行版本代号,可通过lsb_release -a命令查看,最好和客户端保持一致
Architectures: amd64 source
Components: main contrib non-free
Description: uos education debian packages
Log: demo_xenial.log
8、全局选项配置文件(可选)
# vim/var/www/html/demo/conf/options
注意:options⽂件末尾最好留一行,否则该行可能不生效。
verbose
noskipold
basedir .
morguedir +b/morgue_dir
重要字段说明:
| basedir | 设置所有其他默认⽬录都相对的base-dir。如果未提供任何内容,并且也未设置REPREPRO_BASE_DIR环境变量,那么将使⽤当前⽬录。 |
|---|---|
| morguedir | 从池中删除的⽂件存储在morguedir中。如果以“ +b/ ”开头,则相对于basedir;如果以“ +o/ ”开头,则相对于outdir;如果以“+c/”开头,则相对于confdir。如果未给出,则仅删除已删除的文件。 |
| verbose | 更为详细,可以多次设置 |
| noskipold | 更新时,请勿跳过没有新索引⽂件和没有标记为已处理⽂件的⽬标。如果您更改了脚本以预处理下载的索引⽂件或更改了 Listfilter,则很可能要使⽤--noskipold调⽤reprepro。 |
9、 包管理
添加:
#reprepro -b /var/www/html/demo includedeb xenial ./EasyConnect_x64_7_6_7_3.deb
查看:
#reprepro-b /var/www/html/demo list xenial
删除:
#reprepro -b /var/www/html/demo remove xenial easyconnect
\
10、配置客户端
#vim/etc/apt/sources.list
deb [trusted=yes] http://IP:PORT/demo xenial main contrib non-free
deb-src [trusted=yes] http://IP:PORT/demo xenial main contrib non-free
配置说明: deb 的那⾏定义了⼆进制软件包。
deb-src的那⾏定义了源代码软件包。
第⼀个参数是 UOS远程仓库的根URL ,常⻅⽀持http、https协议。ftp需要单独配置。
第⼆个参数是发⾏版名称:可以使⽤套件名或代号(codename)。
第三个和之后的参数是 UOS 档案库的有效档案库范围名称。
-main 遵从⾃由软件指导⽅针(DFSG),并且不依赖于 non-free
-contrib 遵从⾃由软件指导⽅针(DFSG),但依赖于 non-free
-non-free 不遵从⾃由软件指导⽅针(DFSG)
# apt-getupdate
11、从私库安装包测试
#apt-get install easyconnect
成功安装!
拓展:私有仓库同步其他仓库
完全靠自己添加包有时是不现实的,有时我们还需要同步其他地方的库\
1、编写仓库同步配置文件,例如:同步http://10.5.11.221/dev/仓库到本地仓库
# vim/var/www/html/demo/conf/updates
Name: update_from_shuttle
Suite: uranus
Architectures: i386 amd64 arm64 mips64el source
Components: maincontrib non-free
Method: http://10.5.11.221/dev/
VerifyRelease: blindtrust
可以添加多个源,名字设置不一样即可:
Name: update_from_base
Suite: eagle
Architectures: amd64 source
Components: main contrib non-free
Method: file:///home/uos/desktop-professional
VerifyRelease: blindtrust
参数说明:
Name:同步策略名称,对应conf/distributions⽂件中的Update字段,⽤于区分不同的
同步策略。
Suite:发型版本。可以简单理解为上游仓库的Codename的值。
Architectures:同步的架构,需要确认上游仓库⽀持的架构和当前仓库需要同步的架构。
Components:同步的组件,需要确认上游仓库⽀持的组件和当前仓库需要同步的组件。
Method:同步的上游仓库URL地址或是本地仓库地址。
2、修改仓库配置文件,添加Update配置项
# vim/var/www/html/demo/conf/distributions
Origin: Uos
Label: Uos Education
Codename: xenial
Update: update_from_shuttle #和update里面的Name对应
Architectures: amd64 source
Components: main contrib non-free
Description: uos education debian packages
Log: ppa_uranus.log
3、同步
# reprepro -b /var/www/html/demo update xenial
4、确认是否在同步
# du-sh /var/www/html/demo --max-depth=0
如果文件夹大小⼀直在增加,则说明同步仍在继续,耐心等待即可。
参考文档
本人一直在从事devops运维相关工作,欢迎大家关注我的个人公众号[运维小白成长之路],会不定期更新运维相关经验分享,希望能和大家一起成长~~