源服务器搭建以及deb包制作文档
源服务器的搭建
1. 安装nginx
- cmd:
yum -y install nginx
- cmd:
- 编辑配置文件:
vim /etc/nginx/nginx.conf
,增加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23server {
listen 81 default_server;
listen [::]:81 default_server;
server_name _;
root /usr/cus/package/;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
autoindex on; ##显示索引
autoindex_exact_size on; ##显示大小
autoindex_localtime on; ##显示时间
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}- 编辑配置文件:
其中,listen 81
是nginx的监听端口,root
是包的根路径。location /
是开启目录访问。
- 配置nginx的systemctl服务管理:
vim /usr/lib/systemd/system/nginx.service
,写入以下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
Nginx will fail to start if /run/nginx.pid already exists but has the wrong
SELinux context. This might happen when running `nginx -t` from the cmdline.
https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
2. 创建源服务器的目录环境
- 创建文件夹,
mkidr -p /usr/cus/package/debian/jessie/dvd1
(这里其实是模仿的iso镜像盘的路径),在此路径下,继续创建文件夹:mkdir -p pool/main/
以及mkdir -p pool/contrib/
,以上两个路径是用于存放deb包的路径
- 创建文件夹,
- 创建包信息文件路径,提供给客户端使用,路径是有固定写法的。在
/usr/cus/package/debian/jessie/dvd1
下面,创建文件夹:mkdir -p dists/jessie/main/binary-mips/
以及mkdir -p dists/jessie/contrib/binary-mips/
,这两个路径分别用来,存放/usr/cus/package/debian/jessie/dvd1/pool/main/
和/usr/cus/package/debian/jessie/dvd1/pool/contrib/
的deb包的package的信息。
- 创建包信息文件路径,提供给客户端使用,路径是有固定写法的。在
生成包信息:
分别在
/usr/cus/package/debian/jessie/dvd1/
下面,执行命令:
dpkg-scanpackages -m . | gzip -c > Packages.gz
,那么这个压缩包内就会包含main
和contrib
所有的包信息。把这个包放到上一步骤中的两个文件夹中去。命令:cp Packages.gz dists/jessie/main/binary-mips/
和cp Packages.gz dists/jessie/contrib/binary-mips/
。然后两个文件夹下进行解压gzip -c -d Packages.gz > Packages
到此为止,源服务器就搭建好了,需要注意的是,每次往包文件夹里面更新包的时候,需要重复3步骤
二进制文件的普通包转为deb包
环境说明1
- 机器ip地址: 172.16.30.40
- 端口: 5188
- 用户名: cbccom
- 密码:******
环境说明2
- 机器上必须要有
dpkg
环境,已经安装好了。
准备环境,需要安装dpkg
- cmd:
yum -y install dpkg
准备deb的目录结构
可执行文件说明:
以下四个文件都是可选的,都需要可执行权限。
这些是软件包安装前后自动运行的可执行脚本. 统称为控制文件, 是 Deian 软件包的”控制”部分它们是:
preinst
Debian软件包(“.deb”)解压前执行的脚本, 为正在被升级的包停止相关服务,直到升级或安装完成。 (成功后执行 ‘postinst’ 脚本)。
postinst
主要完成软件包(“.deb”)安装完成后所需的配置工作. 通常, postinst 脚本要求用户输入, 和/或警告用户如果接受默认值, 应该记得按要求返回重新配置这个软件。 一个软件包安装或升级完成后,postinst 脚本驱动命令, 启动或重起相应的服务。
prerm
停止一个软件包的相关进程, 要卸载软件包的相关文件前执行。
postrm
修改相关文件或连接, 和/或卸载软件包所创建的文件。
当前的所有配置文件都可在 /var/lib/dpkg/info 目录下找到, 与 foo 软件包相关的命名以 “foo” 开头,以 “preinst”, “postinst”, 等为扩展。这个目录下的 foo.list 文件列出了软件包安装的所有文件。Debian里用apt-get安装或卸载软件时,会常发生前处理或后处理的错误,这时只要删除 对应的脚本文件,重新执行安装或卸载即可以下三个文件也是可选的
copyright
顾名思义,这个文件包含了上游软件的版权以及许可证信息。
changeLog
版本变更信息,对于一个需要长期维护的软件,版本变更信息的跟踪是非常有必要的。
rules
每一个rules文件,就像其他的Makefile一样,包含若干的规则,每一列规则都定义了一些对于deb包的操作,主要作用是控制源码包的编译安装等行为。
deb包的目录结构分为两部分,结构大概如下:
1
2
3
4
5
6
7
8
9apt-falcon-agent-mips64 # 包的根路径
├─tmp # 这是我们想让包安装的位置,默认是从根分区开始写的也就是(/tmp)
| ├─test
| | └falcon-agent
├─DEBIAN # 固定写法
| └control # 包信息的控制文件
└postinst # 完成后所需的配置工作,(注:执行路径是根路径)
└...
对于这个demo,当我们执行dpkg -i <包名> 之后,那么falcon-agent就会安装在/tmp/test/目录下了control文件的写法及要求:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28Package:指该软件包的名字。如果你的软件包名称有两个词,用一个连字符(-)把它们连起来。软件包的名称只能有小写的英文字母,数字以及"+"和"-"。
Version:版本。确保这里的值不包括连字符。
Section:列出了你的软件属于的类别,可能的值包括admin(管理),games(游戏),gnome,kde,mail(电子邮件),misc(杂项)<译者注:misc是miscellaneous的简称>,net(网络),sound(声音),text(文本),utils(实用工具)和web(万维网)。
Priority:声明这个包的优先级(大部分的时候使用optional(可选的))。
Architecture:是该程序可运行的CPU架构(可能的值为i386,amd64和powerpc)<译者注:此处虽然是专有名词,但是由于linux是大小写敏感的,所以文件内还是应该小写>。
Eseential:指该软件包是否是必须的(大部分的时候不是)。
Depends:意味着要使用这个程序必须拥有的程序,
Recommends:指除了极特殊情况下的安装之外,大多数时候都需要的依赖关系。
Suggests:意味可能给这个软件带来更多功能的,但是没有完全没有问题的依赖关系<译者注:同Recommands>。
你可以用英文的半角逗号分开不同的依赖关系(,)。如果两个软件中的任何一个可以工作,用竖线"|"分开它们。你也可以指定特定的版本,用在括号里用<<(小于),<=(小于或等于),=(等于),>=(大于或等于),或>>(大于)来表示。
Install-Size是程序安装后的大小,按KB算。
Maintainer:就是你(写上你的名字,后面的方括号"[ ]"里留下你的电子邮件地址)。
Conflicts:表示跟这个程序冲突的软件。
Replaces:表明哪些软件包将被这个程序取代。
Description:显示你的描述。
1 | demo1 |
1 | demo2 |
打包:
到包根目录的上一层,然后执行:
dpkg -b 包目录/ /目的路径/包名.deb
命名格式暂时定为:
包名-大版本.月份.git版本-芯片架构.deb
如:vpn-guard-1.04.121-amd64.deb
1
2
3
4软件名称:vpn-guard
版本号:1.04.121 (大版本.月份.git版本)
芯片架构:amd64
软件包类型:deb