手把手教你如何搭建deb仓库

1,175 阅读4分钟

本文已参与 \lceil新人创作礼\rfloor 活动,一起开启掘金创作之路

之前接触最多的都是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

如果文件夹大小⼀直在增加,则说明同步仍在继续,耐心等待即可。

参考文档

wiki.debian.org/DebianRepos…

本人一直在从事devops运维相关工作,欢迎大家关注我的个人公众号[运维小白成长之路],会不定期更新运维相关经验分享,希望能和大家一起成长~~