[技术博客]nginx 部署 apt 源

[技术博客] nginx 部署 apt 源

出于各类各样的缘由, 有时须要本身配置apt源, 好比发布本身编写的debian软件包, 内网中只有一台电脑能够访问外网,或者在本地配置本身的apt源。咱们已有本身的包,须要发布, 让终端上的app可以经过url get到。html

参考nginx

安装部署工具

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目录下建立仓库,那么就须要建立一个软连接把本身的仓库连接到这个目录shell

好比: 假设是在/home/目录下:apache

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

在/var/www 目录下建立目录:ubuntu

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.bash

建立 gpg 密钥:服务器

gpg --gen-key

因为咱们仅使用密钥来生成数字签名,所以使用RSA能够得到最大的安全性。app

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

有效期选择密钥不会过时dom

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 . &gt; Packages
  gzip -c Packages &gt; Packages.gz

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

apt-ftparchive packees . > Packages

建立Release文件:

若是没有进行gpg签名加密, InRelease和Release.gpg能够不生成

apt-ftparchive release . &gt; 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 源码
最后: 官方文档

相关文章
相关标签/搜索