选择centos7作为服务器linux版本,需要的软件列表如下:
1
2
3
4
5
6
7
8
9
10
|
----------------------------
apache(httpd) # 提供web服务
----------------------------
createrepo # 搭建yum仓库使用
repotrack # 下载安装包以及相关依赖
----------------------------
apt # 为了支持ubuntu的repo
gpg # 生成密钥
dpkg-dev # 生成package信息
----------------------------
|
关于在centos下安装apt可参见有用链接部分。
准备工作
-
完成虚拟机创建向导,选择网络类型桥接模式,设置静态IPv4地址以及网关、子网掩码等;
-
安装ssh,修改sshd配置文件,允许root用户通过登录,都是为了使用xshell;
-
开机关闭防火墙,或者放行对应的apache使用端口;
1
2
3
4
5
6
7
8
9
10
|
[root@localhost ~]# vi /etc/ssh/sshd_config # 取消以下注释
Port 22
LoginGraceTime 2m
PermitRootLogin yes
MaxAuthTries 6
MaxSessions 10
PasswordAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication yes
[root@localhost ~]# systemctl restart sshd # 重启sshd服务
|
安装Apache服务
1
2
3
4
5
6
7
|
$ yum install httpd # 安装Apache,当然也可稍后安装
$ systemctl start httpd # 开启apache服务
$ systemctl status httpd # 查看Apache服务状态
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 二 2021-02-23 14:30:53 CST; 1min 24s ago
... ...
|
如果已完成上述操作,但访问http://ip:80
出现403或者无法访问该网站,请检查防火墙关闭防火墙或者放行对应端口。
1
2
3
4
|
$ systemctl stop firewalld.service # 此次关闭防火墙
$ systemctl disable firewalld.service # 关闭防火墙
$ systemctl enable httpd # 开机自启Apache服务
$ iptables -I INPUT -p TCP --dport 80 -j ACCEPT # 放行80端口
|
进一步的,可以在/etc/httpd/conf/httpd.conf
中修改配置以支持文件目录索引;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<Directory />
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
|
另外,还可以修改/etc/httpd/conf.d/welcome.conf
默认的首页为目录索引页
1
2
|
原文:Options -Indexes
修改后:Options +Indexes
|
之后,重启apache服务即可。
创建repo存放目录
- Apache默认存放的根目录在
/var/www/html
,可以直接在此目录下创建仓库目录; - 或者,选择在其他地方创建仓库目录,通过软连接至`/var/www/html';
- 或者修改配置文件设置DirRoot。
方便起见,直接选择在网站默认目录下创建仓库根目录:
1
2
|
$ cd /var/www/html
$ mkdir centos && mkdir ubuntu # 分别是centos和ubuntu的仓根目录
|
开始搭建仓库
首先,搭建centos使用的yum仓库源:
1
2
3
|
### repotrack 下载需要的包
[root@localhost ~]# cd /var/www/html/centos
[root@localhost centos]# repotrack whois
|
1
2
3
4
5
|
[root@localhost centos]# yum -y install yum-utils createrepo # 安装createrepo repotrack
### 下载或者导入需要的rpm包
[root@localhost centos]# createrepo -pdo . . # 创建repo信息
[root@localhost centos]# ls
... repodata ... # 会发现多了一个repodata目录
|
自此,已完成yum仓库源的搭建,当然你可以对目录进行更加详细的管理,添加新的rpm以及维护可参考维护更新部分的介绍。
搭建apt仓库源可有两种选择:
- 不带签名,简单且用不到gpg生成密钥,但不安全;
- 带签名,略复杂,但是会验证;
以带签名为例,如下:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#先安装 gpg 以生成key
$ cd /var/www/html/ubuntu
$ yum install pgp
## gpg --gen-key # 生成
## gpg --list-keys #查看
## gpg --export-secret-key keyName > ./my-key.asc #输出名字为keyName的密钥至my-key.asc文件
## gpg -h # 更多请查看
$ yum install rng-tools
$ yum start rngd # 启用rngd服务,在生成key时大有用处
$ gpg --gen-key # 生成密钥,在这之前最好先安装rng-tools,不然会很慢
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择?
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
真实姓名:testing
电子邮件地址:test@email.com
注释:testing
您选定了这个用户标识:
“testing (testing) <test@email.com>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o
您需要一个密码来保护您的私钥。
## 如上操作你已完成生成密钥
## 需要将你的钥发布给需要使用该仓库的客户端
$ gpg --list-keys # 可以查看到你密钥
$ gpg --export-secret-key testing > ./my-key.asc # 输出你的密钥到
|
接下来,你可以传入或下载deb包至仓库目录中,当然你还可以对这些包做详细的归纳。也可通过如下参考脚本下载包以及对应的依赖,这将极大的提高效率。
查看软件包的依赖apt-cache depends packageName
;
只下载不安装 apt install $packageName --reinstall -d -y
;
两者结合,先查看软件包的依赖包,然后依次下载并且再次递归查看依赖包的依赖,使用如下脚本下载!
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
28
29
30
31
32
33
34
35
|
#!/bin/bash
mkdir log
touch log/package.log
logfile=log/package.log
ret=""
function getDepends()
{
echo "fileName is" $1>>$logfile
# use tr to del < >
ret=`apt-cache depends $1|grep Depends |cut -d: -f2 |tr -d "<>"`
echo $ret|tee -a $logfile
}
## packages: 下载包列表
packages="mysql-server nginx wget telnet gdb python2.7 python3.6 vim git subversion tree vsftpd openssl ssh make cmake apache2 sqlite3 tcpdump mlocate sysstat lrzsz strace netcat filezilla"
for package in $packages
do
apt install $package --reinstall -d -y # 先下载软件包
libs = $package # 需要获取其所依赖包的包
# 递归三层下载依赖包 deep in 3
i=0
while [ $i -lt 3 ] ;
do
let i++
echo $i
# download libs
newlist=" "
for j in $libs
do
added="$(getDepends $j)"
newlist="$newlist $added"
apt install $added --reinstall -d -y # 下载依赖包...递归
done
libs=$newlist
done
done
|
这一步,假设你已经完成了包导入仓库:
1
2
3
4
5
|
$ dpkg-scanpackages -m . > Packages # 扫描 Debian 包生成 Packages 文件
### 如果不带签名,请忽略以下
$ apt-ftparchive release . > Release # 生成 Release 文件
$ gpg --armor --detach-sign -o Release.gpg Release # 生成 Release.gpg
$ gpg --clearsign -o InRelease Release # 生成 InRelease
|
自此,你已完成了在centos下apt仓库源的搭建。
使用
centos-yum
清空/etc/yum.repos.d
中的.repo文件
1
|
$ vim /etc/yum.repos.d/CentOS-Base.repo
|
内容如下:
1
2
3
4
5
6
|
[base]
name=CentOS-$releasever - Base
baseurl=http://192.168.10.5/centos/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
|
ubuntu-apt
主要需要更改source.list和添加源服务器的密钥
1
2
|
$ wget http://10.20.15.237/ubuntu/pub.asc # 下载密钥,前提是服务器已经上传
$ apt-key add pub.asc # 添加密钥
|
编辑 /etc/apt/source.list 替换为以下内容
1
|
deb [trusted=yes] http://192.168.10.5/ubuntu ./
|
1
2
3
4
5
|
# 更新源
$ apt-get update
$ apt-get install whois #安装测试
# 删除apt源的公钥
$ apt-key del '3C10 8EFB E970 F6E2 199E 7FAA 4B58 941A AEE3 5EFC'
|
更新
yum-repo
1
2
3
|
$ repotrack whois ## 例子
### 在此之前,导入你的rpm包
$ createrepo -pdo . . # 创建repo信息
|
apt-repo
你可以先使用脚步文件package.sh
下载后再传到仓库,并更新包信息:
执行完脚步以后你会在当前目录下得到一个archives
目录,软件包就在其中。
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
28
29
30
31
32
33
34
35
36
37
|
#!/bin/bash
apt-get clean
mkdir -p log
touch log/package.log
logfile=log/package.log
ret=""
function getDepends()
{
echo "fileName is" $1>>$logfile
# use tr to del < >
ret=`apt-cache depends $1|grep Depends |cut -d: -f2 |tr -d "<>"`
echo $ret|tee -a $logfile
}
## packages: 下载包列表
packages="wget telnet"
for package in $packages
do
apt install $package --reinstall -d -y # 先下载软件包
libs = $package # 需要获取其所依赖包的包
# 递归三层下载依赖包 deep in 3
i=0
while [ $i -lt 3 ] ;
do
let i++
echo $i
# download libs
newlist=" "
for j in $libs
do
added="$(getDepends $j)"
newlist="$newlist $added"
apt install $added --reinstall -d -y # 下载依赖包...递归
done
libs=$newlist
done
done
cp -r /var/cache/apt/archives ./
|
在此之前,导入你的deb包。
1
|
$ dpkg-scanpackages -m . > Packages # 扫描 Debian 包生成 Packages 文件
|
如果不带签名,请忽略以下。
1
2
3
|
$ apt-ftparchive release . > Release # 生成 Release 文件
$ gpg --armor --detach-sign -o Release.gpg Release # 生成 Release.gpg
$ gpg --clearsign -o InRelease Release # 生成 InRelease
|
参考
在centos下安装使用apt
搭建apt仓库源