[技术博客] nginx 部署 apt 源

出于各种各样的原因, 有时需要自己配置apt源, 比如发布自己编写的debian软件包, 内网中只有一台电脑可以访问外网,或者在本地配置自己的apt源。我们已有自己的包,需要发布, 让终端上的app能够通过url get到。

参考

安装部署工具

  1. sudo apt-get install dpkg-dev
  2. sudo apt-get install apache2 # 如果使用nginx: sudo apt-get install nginx
  3. sudo apt-get install dpkg-sig

创建软件库目录

Note:如果没有在/var/www目录下创建仓库,那么就需要创建一个软链接把自己的仓库链接到这个目录

比如: 假设是在/home/目录下:

  1. sudo ln -s ~/repository_dir /var/www/repository_dir

在/var/www 目录下创建目录:

  1. sudo mkdir -p repository_dir/dists/stable/main/binary

把已有的deb文件导入到二进制文件目录:

  1. sudo mv location_of_package/package_name.deb

签名加密仓库

你也可以选择不进行签名加密, 这样apt-get update时会报warning, apt update会报error.

创建 gpg 密钥:

  1. gpg --gen-key

由于我们仅使用密钥来生成数字签名,因此使用RSA可以获得最大的安全性。

  1. Please select what kind of key you want:
  2. (1) RSA and RSA (default)
  3. (2) DSA and Elgamal
  4. (3) DSA (sign only)
  5. (4) RSA (sign only)
  6. Your selection? 4
  7. RSA keys may be between 1024 and 4096 bits long.
  8. What keysize do you want? (2048) 4096 # 这里可选, 1024 ~ 4096 皆可
  9. Requested keysize is 4096 bits

有效期选择密钥不会过期

  1. Please specify how long the key should be valid.
  2. 0 = key does not expire
  3. <n> = key expires in n days
  4. <n>w = key expires in n weeks
  5. <n>m = key expires in n months
  6. <n>y = key expires in n years
  7. Key is valid for? (0) 0
  8. Key does not expire at all
  9. Is this correct? (y/N) y

给出新密钥的名称:

  1. 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:
  2. "Zaphod Beeblebrox (Galactic President) <zbeeblebrox@pres.galaxy.com>"
  3. Real name: Repository # 这里,给出新密钥的名称
  4. Email address:
  5. Comment:
  6. You selected this USER-ID:
  7. "Repository"
  8. Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

您需要密码来保护您的密钥。一定要选择一个你会记得的。之后会开始生成密码, 在过程中可能会有提示熵不够

比如:

  1. **We need to generate a lot of random bytes. It is a good idea to perform
  2. some other action (type on the keyboard, move the mouse, utilize the
  3. disks) during the prime generation; this gives the random number
  4. generator a better chance to gain enough entropy. # 需要足够的熵,随便做点啥吧。
  5. Not enough random bytes available. Please do some other work to give
  6. the OS a chance to collect more entropy! (Need 210 more bytes)**

但是实际上,不论怎么操作,我们也只获得了少量的熵。可以开启另外一个terminal, 输入如下命令来制造足够的熵:

  1. dd if=/dev/sda of=/dev/zero # 从硬盘/sda 读取内容并丢弃输出到/dev/zero

然后就可以正常生成密钥了。按照屏幕上的说明创建密钥。您应该获得类似于此的输出 -

  1. gpg: key 041DA354 marked as ultimately trusted
  2. public and secret key created and signed.
  3. gpg: checking the trustdb
  4. gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
  5. gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
  6. pub 4096R/041DA354 2012-06-01
  7. Key fingerprint = 2253 4C89 DE74 CF68 39D7 2A2E DB3E 384F 041D A354
  8. uid Repository

查看gpg密钥:

  1. gpg --list-keys

将生成的公钥到处到文本文件并且保存到根目录:

  1. sudo gpg --output keyFile --armor --export 041DA354 # 这个数字是你自己生成的密钥所对应的

使用密钥签名加密软件包:

  1. sudo dpkg-sig --sign builder file1.deb # 你的包
  2. 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端口:

  1. env PATH;
  2. user XXX; # Nginx运行使用用户, 自定义
  3. worker_processes xxx; # worker个数 可以设为auto
  4. pid /run/nginx.pid;
  5. events {
  6. worker_connections xxx;
  7. # multi_accept on;
  8. }
  9. http {
  10. ##
  11. # Virtual Host Configs
  12. ##
  13. server{
  14. # 监听80端口
  15. listen 80;
  16. server_name xxx.xxx; # 域名或者Ip
  17. root /var/www/deb_dir; # apt 仓库目录
  18. charset utf-8;
  19. location /{
  20. autoindex on; # autoindex选项默认关闭, 一定要打开
  21. index index.html;
  22. }
  23. }
  24. }

检查配置文件正确性:

  1. nginx -t

重载配置文件&重启nginx

  1. nginx -s reload

Done

后续

本地机器

  1. sudo vi /etc/apt/sources.list

添加自己的源,(注释掉原本的源,如果不想用的话)

  1. deb http://xx.xx.xx.xx/repository_dir/dists/stable/main/binary / # 注意

保存之后, 更新源

  1. sudo apt-get update

Note: 如果报错"cannot find packages"

下载该仓库的公钥:

  1. wget -O - http://10.31.31.89/repository_dir/keyFile | sudo apt-key add -

查看已经有的公钥:

  1. apt-key list

再次更新,如果还不行, 记得更新仓库的用户权限:

  1. sudo chown user:user -R .

远程机:

创建index文件并且压缩, 压缩文件和源文件都需要有放在repo里

  1. # repo_dir
  2. apt-ftparchive packages . &gt; Packages
  3. gzip -c Packages &gt; Packages.gz

这个命令不大好使,我不大&gt有些奇怪,可以直接把生成的信息重定向到Packages然后再压缩

  1. apt-ftparchive packees . > Packages

创建Release文件:

如果没有进行gpg签名加密, InRelease和Release.gpg可以不生成

  1. apt-ftparchive release . &gt; Release
  2. gpg --clearsign -o InRelease Release
  3. gpg -abs -o Release.gpg Release

再来一次,所有的步骤都完成后:

  1. sudo apt-get update
  2. sudo apt-get install package_name

Bingo!

Pass

nginx资源推荐:

首推: Nginx开发从入门到精通

其次: Nginx中文文档

然后: 理解 Nginx 源码

最后: 官方文档

[技术博客]nginx 部署 apt 源的更多相关文章

  1. [技术博客] 自制 apt deb Repository

    [技术博客] 自制 apt deb Repository (termux) 在修改整合遵循GPLv3的Android terminal app and Linux environment:termux ...

  2. 【技术博客】nginx服务器的https协议实现

    在本学期软件工程的Alpha和Beta阶段,我们的服务器部署都是使用基础的http协议,http在网络路由间的信息转发都为明文,这对我们网站的账户密码登录来说很不安全,因此在Gamma阶段我们实现了h ...

  3. 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客

    多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署

  4. 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客

    自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署

  5. 多IDC GSLB的部署 - ADC技术博客 - 51CTO技术博客

    多IDC GSLB的部署 - ADC技术博客 - 51CTO技术博客 A10

  6. 利用Travis IC实现Hexo博客自动化部署

    1.Hexo博客的利与弊 Hexo中文 我就默认为看到这篇文章的人都比较了解Hexo博客,也都能够成功手动部署吧.所以第一部分推荐两篇文章一笔带过,让我们快速进入本文的重点内容.实在不知道也不要方先看 ...

  7. 【新版】Android技术博客精华汇总

    [新版]Android技术博客精华汇总(原文链接内持续更新) http://www.apkbus.com/thread-313856-1-1.html Kotlin Kotlin学习资料汇总 http ...

  8. 技术人如何利用 github+Jekyll ,搭建一个独立免费的技术博客

    上次有人留言说,技术博客是程序员的标配,但据我所知绝大部分技术同学到现在仍然没有自己的技术博客.原因有很多,有的是懒的写,有的是怕写不好,还有的是一直想憋个大招,幻想做到完美再发出来,结果一直胎死腹中 ...

  9. Termux搭建hexo博客并部署到GitHub

    Termux搭建hexo博客并部署到GitHub 安装 termux-change-repo apt update apt install git && nodejs &&am ...

随机推荐

  1. MES应用案例 | 天博集团成功完成数字化转型

    受到智能制造观念和技术的巨大且快速的影响,使得工业特别是汽车行业必须以最快速度赶上这场企业数字化转型的浪潮,唯有实现企业转型升级才能在这场速度战中占得先机.当然关于企业的转型升级,最为重要的是需要打造 ...

  2. Kubernetes学习之基础概念

    本文章目录 kubernetes特性 kubernetes集群架构与组件 一.kubernetes集群架构 二.集群组件 三.ubernetes集群术语 深入理解Pod对象 一.Pod容器分类 基础容 ...

  3. php集成开发环境搭建三种方式

    三种方式都是一键搭建php开发环境 三种方式前提都是在linux下 wamp和phpstudy就不再用了 首先打造linux开发环境,通过vagrant+vbox实现本地文件同步到虚拟机上进行同步开发 ...

  4. 第一册: lesson 129。

    原文: Seventy miles an hour. question: What does Ann advise her husband to do next time? Look,Gary! Th ...

  5. Vue-cli3 中 通过在index.html添加的script js文件 如何在组件内使用不会 xxx is not defined错误

    以jQuery 为例 第一种方法 更改webpack配置信息 1.在vue.config.js中(如果没有 请在根目录新建)配置如下信息 // const webpack = require('web ...

  6. Java面向对象 练习(类、对象、方法)

    知识点:构造方法.继承.方法重载.方法重写 一. 定义一个点(Point)类,用来表示三维空间中的点(有三个坐标),要求如下: 1.可以生成具有特定坐标的点对象(构造方法): 2.提供可以设置三个坐标 ...

  7. zabbix3.4中报错解:telnet service is down on决方法

    当新添加的监控主机报telnet service is down on的时候,大家不要惊慌,这个是属于模板中添加了一项监控参数,监控被监控机的telnet服务,有两种解决办法,第一呢就是找到对应的监控 ...

  8. CentOS6.7搭建部署DNS服务 (详解主配置文件)

    -DNS服务器的基本原理 域名简介:使用tcp/udp协议,默认使用53端口号 默认情况下,客户端发起的查询请求都是用UDP/53查询的. 默认情况下,从从服务器到主服务器传输数据用的是TCP/53. ...

  9. jQuery和使用oninput事件

  10. mysql毫秒数引发的问题

    起因:最近同事在做定时打卡的东西,遇到一个诡异的问题,端只是传了一个开始时间跟打卡周期,剩下的打卡时间都是由服务端自己生成的,显示的截止时间有的变成==23:59:59==. 有时候又变成了 ==00 ...