动手搭建一个私有的apt服务器
需求描述
在系统软件开发中,我们自己创建的安装包,安装到其他机器上,单个拷贝安装特别是在机器数量比较多时比较麻烦,能否像我们安装vim编辑器那样安装简单呢?这时就需要搭建私有apt服务器,来进行部署。不同架构的机器只需要设置不同的订阅(源)地址即可。环境:ubuntu18.04 Nginx
1、安装Nginx服务器
sudo apt-get install nginx -y
查看Nginx版本
sudo nginx -v
会出现版本号
nginx version: nginx/1.14.0 (Ubuntu)
然后访问地址 http://<ip地址>
我这里是http://47.102.45.31/ (临时地址)
2、修改Nginx配置
sudo vim /etc/nginx/sites-enabled/default
在 server 中
root /var/www/html #这里是默认的目录,可以修改为自定义目录
在location 中添加
autoindex on; #让Nginx显示目录,注意不要漏掉分号
重启Nginx服务
sudo systemctl restart nginx.service
3.放入提前准备好的deb包
先创建目录myubuntu
,在Nginx目录中(默认是/var/www/html,如果修改配置,则是配置的目录中)
mkdir myubuntu
在本机通过scp命令上传至服务器
这里有两个测试包,分别是hellotest.deb 和test2.deb
scp hellotest.deb test2.deb root@47.102.45.31:/var/www/html/myubuntu
通过ls
命令能够查看到当前目录中有这两个包
hellotest.deb test2.deb
在Nginx目录中(默认是/var/www/html,如果修改配置,则是配置的目录中)的上面创建的myubuntu
中执行
sudo dpkg-scanpackages .|gzip -c9>Packages.gz
出现下面提示即可
dpkg-scanpackages: info: Wrote 2 entries to output Packages file.
在浏览器输入 http://47.102.45.31/myubuntu/ (根据实际情况替换IP和目录名字)
4.本机设置
本机添加自定义apt服务器源
echo "deb [trusted=yes] http://47.102.45.31/myubuntu ./" | sudo tee -a /etc/apt/sources.list > /dev/null
命令解释
(1)echo “deb [trusted=yes] http://47.102.45.31/myubuntu ./”
将源信息的字符串输出到标准输出中
(2)使用 tee -a /etc/apt/sources.list
从标准输出中取得字符串并依附到sources.list文件的末尾。
(3)>/dev/null
是将执行结果丢到空设备中,这样终端中就不会显示执行结果。
(4) 私有源网址,没有ssl证书。所以使用[trusted=yes]
让系统下载的时候信任这个源,不会进行证书检查。
也可以用sudo vim /etc/opt/sources.list
自己手动添加deb [trusted=yes] http://47.102.45.31/myubuntu ./
更新源sudo apt-get update
会出现我们自定义的apt服务器地址
安装程序测试
sudo apt-get install test2
运行test2程序
test2
附录
1、test2程序源代码
test2.cpp
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
using namespace std;
void currentTimetoStr(void)
{
char tmp[64];
time_t t = time(NULL);
tm *_tm = localtime(&t);
int year = _tm->tm_year + 1900;
int month = _tm->tm_mon + 1;
int date = _tm->tm_mday;
int hh = _tm->tm_hour;
int mm = _tm->tm_min;
int ss = _tm->tm_sec;
sprintf(tmp, "%04d-%02d-%02d %02d:%02d:%02d", year, month, date, hh, mm, ss);
cout << "当前时间为:" << tmp << endl;
}
int main()
{
cout << "************************************************************" << endl;
cout << "**************分享一些名言**********************************" << endl;
cout << "莫扎特曾经说过大胆地踏上旅途吧,我不知道路途的前方究竟有什么,但是,我们还是迈出了步伐,我们仍在旅途之中" << endl;
cout << "1、Talk is cheap. Show me the code. —— Linus Torvalds" << endl;
cout << "2、Stay hungry. Stay foolish. ——Steve Jobs" << endl;
cout << "3、Any fool can write code that a computer can understand. Good programmers write code that humans can understand. ——Martin Fowler" << endl;
cout << "4、If all you have is a hammer, everything seems to be a nail. ——Robert Sedgewick" << endl;
cout << "5、If it hurts, do it more frequently, and bring the pain forward." << endl;
cout << "************************************************************" << endl;
cout << "************************************************************" << endl;
currentTimetoStr();
sleep(1);
return 0;
}
2、deb包打包方法
1、先将test2编译成可执行程序
g++ test2.cpp -o test2
2、制作deb包
mkdir package #创建目录package
cd package
mkdir -p usr/bin
mv test2 usr/bin/ #把可执行文件拷贝到usr/bin/目录 这里是test2(这里的路径要写正确)
mkdir DEBIAN
vim DEBIAN/control
这是control里的内容,注意复制时要把里面的注释去掉
Package: test2 #注意包名构成只能是小写字母和"-+"的字符
Version: 1.0
Section: custom(代表软件类别)
Priority: optional
Architecture: all
Essential: no
Installed-Size: 1024
Maintainer: test2.org
Description: 打印一些名言 #描述信息
然后查看一下package的目录结构
cd ..
dpkg-deb --build package/ test2.deb #在package目录的上一层打包package
然后上传到服务器对应目录即可,详见上面正文
步骤3