[技术博客]nginx 部署 apt 源
[技术博客] nginx 部署 apt 源
出于各种各样的原因, 有时需要自己配置apt源, 比如发布自己编写的debian软件包, 内网中只有一台电脑可以访问外网,或者在本地配置自己的apt源。我们已有自己的包,需要发布, 让终端上的app能够通过url get到。
参考:
安装部署工具
sudo apt-get install dpkg-dev
sudo apt-get install apache2 # 如果使用nginx: sudo apt-get install nginx
sudo apt-get install dpkg-sig
创建软件库目录
Note:如果没有在/var/www目录下创建仓库,那么就需要创建一个软链接把自己的仓库链接到这个目录
比如: 假设是在/home/目录下:
sudo ln -s ~/repository_dir /var/www/repository_dir
在/var/www 目录下创建目录:
sudo mkdir -p repository_dir/dists/stable/main/binary
把已有的deb文件导入到二进制文件目录:
sudo mv location_of_package/package_name.deb
签名加密仓库
你也可以选择不进行签名加密, 这样apt-get update时会报warning, apt update会报error.
创建 gpg 密钥:
gpg --gen-key
由于我们仅使用密钥来生成数字签名,因此使用RSA可以获得最大的安全性。
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 4
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096 # 这里可选, 1024 ~ 4096 皆可
Requested keysize is 4096 bits
有效期选择密钥不会过期
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (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:
"Zaphod Beeblebrox (Galactic President) <zbeeblebrox@pres.galaxy.com>"
Real name: Repository # 这里,给出新密钥的名称
Email address:
Comment:
You selected this USER-ID:
"Repository"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
您需要密码来保护您的密钥。一定要选择一个你会记得的。之后会开始生成密码, 在过程中可能会有提示熵不够
比如:
**We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy. # 需要足够的熵,随便做点啥吧。
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 210 more bytes)**
但是实际上,不论怎么操作,我们也只获得了少量的熵。可以开启另外一个terminal, 输入如下命令来制造足够的熵:
dd if=/dev/sda of=/dev/zero # 从硬盘/sda 读取内容并丢弃输出到/dev/zero
然后就可以正常生成密钥了。按照屏幕上的说明创建密钥。您应该获得类似于此的输出 -
gpg: key 041DA354 marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 4096R/041DA354 2012-06-01
Key fingerprint = 2253 4C89 DE74 CF68 39D7 2A2E DB3E 384F 041D A354
uid Repository
查看gpg密钥:
gpg --list-keys
将生成的公钥到处到文本文件并且保存到根目录:
sudo gpg --output keyFile --armor --export 041DA354 # 这个数字是你自己生成的密钥所对应的
使用密钥签名加密软件包:
sudo dpkg-sig --sign builder file1.deb # 你的包
sudo dpkg-sig --sign builder file2.deb
如果有大量的包需要签名,就需要写一写shell脚本了。
配置nginx 代理
如果是使用apache代理服务器,则跳过这步,因为此时apt 源若设定为 deb http://(xx.xx.xx.xx远程机域名或者ip)/repository_dir/dists/stable/main/binary / (binary空格/)这个url应该已经可以访问了。并且http://(xx.xx.xx.xx远程机域名或者ip)/repository_dir/dists/stable/main/binary也应该是能够直接访问的
在nginx上配置server监听80端口:
env PATH;
user XXX; # Nginx运行使用用户, 自定义
worker_processes xxx; # worker个数 可以设为auto
pid /run/nginx.pid;
events {
worker_connections xxx;
# multi_accept on;
}
http {
##
# Virtual Host Configs
##
server{
# 监听80端口
listen 80;
server_name xxx.xxx; # 域名或者Ip
root /var/www/deb_dir; # apt 仓库目录
charset utf-8;
location /{
autoindex on; # autoindex选项默认关闭, 一定要打开
index index.html;
}
}
}
检查配置文件正确性:
nginx -t
重载配置文件&重启nginx
nginx -s reload
Done

后续
本地机器
sudo vi /etc/apt/sources.list
添加自己的源,(注释掉原本的源,如果不想用的话)
deb http://xx.xx.xx.xx/repository_dir/dists/stable/main/binary / # 注意
保存之后, 更新源
sudo apt-get update
Note: 如果报错"cannot find packages"
下载该仓库的公钥:
wget -O - http://10.31.31.89/repository_dir/keyFile | sudo apt-key add -
查看已经有的公钥:
apt-key list
再次更新,如果还不行, 记得更新仓库的用户权限:
sudo chown user:user -R .
远程机:
创建index文件并且压缩, 压缩文件和源文件都需要有放在repo里
# repo_dir
apt-ftparchive packages . > Packages
gzip -c Packages > Packages.gz
这个命令不大好使,我不大>有些奇怪,可以直接把生成的信息重定向到Packages然后再压缩
apt-ftparchive packees . > Packages
创建Release文件:
如果没有进行gpg签名加密, InRelease和Release.gpg可以不生成
apt-ftparchive release . > Release
gpg --clearsign -o InRelease Release
gpg -abs -o Release.gpg Release
再来一次,所有的步骤都完成后:
sudo apt-get update
sudo apt-get install package_name
Bingo!
Pass
nginx资源推荐:
首推: Nginx开发从入门到精通
其次: Nginx中文文档
然后: 理解 Nginx 源码
最后: 官方文档
[技术博客]nginx 部署 apt 源的更多相关文章
- [技术博客] 自制 apt deb Repository
[技术博客] 自制 apt deb Repository (termux) 在修改整合遵循GPLv3的Android terminal app and Linux environment:termux ...
- 【技术博客】nginx服务器的https协议实现
在本学期软件工程的Alpha和Beta阶段,我们的服务器部署都是使用基础的http协议,http在网络路由间的信息转发都为明文,这对我们网站的账户密码登录来说很不安全,因此在Gamma阶段我们实现了h ...
- 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客
多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署
- 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客
自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署
- 多IDC GSLB的部署 - ADC技术博客 - 51CTO技术博客
多IDC GSLB的部署 - ADC技术博客 - 51CTO技术博客 A10
- 利用Travis IC实现Hexo博客自动化部署
1.Hexo博客的利与弊 Hexo中文 我就默认为看到这篇文章的人都比较了解Hexo博客,也都能够成功手动部署吧.所以第一部分推荐两篇文章一笔带过,让我们快速进入本文的重点内容.实在不知道也不要方先看 ...
- 【新版】Android技术博客精华汇总
[新版]Android技术博客精华汇总(原文链接内持续更新) http://www.apkbus.com/thread-313856-1-1.html Kotlin Kotlin学习资料汇总 http ...
- 技术人如何利用 github+Jekyll ,搭建一个独立免费的技术博客
上次有人留言说,技术博客是程序员的标配,但据我所知绝大部分技术同学到现在仍然没有自己的技术博客.原因有很多,有的是懒的写,有的是怕写不好,还有的是一直想憋个大招,幻想做到完美再发出来,结果一直胎死腹中 ...
- Termux搭建hexo博客并部署到GitHub
Termux搭建hexo博客并部署到GitHub 安装 termux-change-repo apt update apt install git && nodejs &&am ...
随机推荐
- HTML5 多媒体标签
一.多媒体 embed 标签 embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等.url为音频或视频文件及其路径,可以是相对路径或绝对路径. 语法格式: < ...
- 英语chalchite蓝绿松石chalchite单词
蓝绿松石是铜和铝的磷酸盐矿物集合体,以不透明的蔚蓝色最具特色.也有淡蓝.蓝绿.绿.浅绿.黄绿.灰绿.苍白色等色.一般硬度5~6,密度2.6~2.9,折射率约1.62.长波紫外光下,可发淡绿到蓝色的荧光 ...
- linux route路由
网关(Gateway)又称网间连接器.协议转换器.网关在网络层以上实现网络互连 就好像一个房间可以有多扇门一样,一台主机可以有多个网关.默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认 ...
- 2 Android程序的执行
Android系统采用的是分层架构,分四层: 1. Applicitations:应用层 2. Applicitation Framework:架构层 3. Libraries:类库层 4. ...
- java 获取当前方法的被调用信息(被那个方法那个类那一行调用)
public void testMethod(){ Test1 t1 = new Test1(); t1.my(); } public static void main(String[] args) ...
- Docker以http访问Harbor私有仓库(一)
1 说明 前文Centos7搭建Harbor私有仓库(一)我们成功搭建Harbor,本篇我们主要配置Docker以http方式访问私有仓库 2 Docker配置 2.1 Mac系统 2.1.1 配置D ...
- ubuntu17升级到18.04
问题描述: ubuntu不是LTS长期支持的版本在支持期过了,没有apt源提供支持.所以需要升级到对应的LTS版本 问题解决: 实验环境: ubuntu17.10--->ubuntu18.04. ...
- google批量搜索实现方式
本文主要记录一下最近所做的关于Google批量搜索的实现方式. 搜索目的: 获取关键词在某个域名下对应的Google搜索结果数 搜索方式: 关键词+inurl 例如:"爬虫" in ...
- Python:基础复习
一.数据类型 对象的三大特征:值.身份.类型: 1)数字 Number 整型.浮点型 只有 int 和 float 两种类型: type(2/2):float 类型:2/2 == 1.0: type( ...
- 控制跳转的tree视图显示的列表项数量
在act_window中,定义limit字段,可以指定打开的tree视图的记录数量. limit:列表视图中每个页面的记录数.