on  it road.com

配置 Ubuntu 防火墙

通过执行 ufw 命令在 Linux 防火墙中允许 Apache 服务端口。

jackli@local-apt-repo:~$ sudo ufw allow http
Rules updated
Rules updated (v6)

在 Ubuntu 20.04 LTS 上安装 DPKG-DEV 包

我们需要安装 dpkg-dev 包,以便为本地 APT 存储库创建包元数据。

jackli@local-apt-repo:~$ sudo apt-get install -y dpkg-dev
Reading package lists... Done
...
...Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
在 Ubuntu 20.04 LTS 中创建本地 APT 存储库

Advanced Package Tool (APT) 是一种免费软件用户界面,可与核心库配合使用,以处理 Debian、Ubuntu 和相关 Linux 发行版上软件的安装和删除。

在 Ubuntu Linux 中,APT 存储库是在操作系统上安装稳定且受支持的软件包的主要来源。

针对不同版本的 Ubuntu 和相关发行版,可以免费获得在线 APT 存储库。

但是,在某些情况下,由于某些安全原因,我们无法访问 Internet 或者我们的 Ubuntu 机器未连接到 Internet。

在这种情况下,我们可以设置自己的本地 APT 存储库并使用它在 Ubuntu 机器上安装软件包。

编写脚本以更新 Package.gz 文件

创建脚本文件以扫描和更新 Packages.gz 文件。

这是必需的,因为我们可能会不时在本地 APT 存储库中添加新的 .deb 包。
因此,每次在 repo 目录中添加新的 .deb 文件后,都需要更新 Packages.gz 文件。

jackli@local-apt-repo:~$ sudo nano /bin/update-mydebs

在此文件中添加以下代码行。

#!/bin/bash
cd /var/www/html/repo
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

授予 update-mydebs 脚本的执行权限。

jackli@local-apt-repo:~$ sudo chmod u+x /bin/update-mydebs

现在,执行此脚本以创建或者更新 Packages.gz 文件。

jackli@local-apt-repo:~$ sudo /bin/update-mydebs
dpkg-scanpackages: warning: Packages in archive but missing from override file:
dpkg-scanpackages: warning:   amd64-microcode crda efibootmgr grub-common grub-efi grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed grub-gfxpayload-lists grub-pc grub-pc-bin grub2-common intel-microcode iucode-tool iw jfsutils kpartx-boot libdbus-glib-1-2 libfreetype6 libnl-3-200 libnl-genl-3-200 libnvpair1linux libuutil1linux libwrap0 libzfs2linux libzpool2linux linux-firmware linux-generic linux-generic-hwe-20.04 linux-headers-5.4.0-65 linux-headers-5.4.0-65-generic linux-headers-5.8.0-41-generic linux-headers-generic linux-headers-generic-hwe-20.04 linux-hwe-5.8-headers-5.8.0-41 linux-image-5.4.0-65-generic linux-image-5.8.0-41-generic linux-image-generic linux-image-generic-hwe-20.04 linux-modules-5.4.0-65-generic linux-modules-5.8.0-41-generic linux-modules-extra-5.4.0-65-generic linux-modules-extra-5.8.0-41-generic mokutil multipath-tools-boot ncurses-term openssh-server openssh-sftp-server os-prober reiserfsprogs shim shim-signed ssh-import-id thermald wireless-regdb zfs-initramfs zfs-zed zfsutils-linux
dpkg-scanpackages: info: Wrote 58 entries to output Packages file.

本地 APT 存储库已成功设置。
我们现在可以将它添加到 Ubuntu 20.04 机器的 sources.list 文件中。

创建 APT 存储库目录

在 Apache 文档根目录中创建一个目录“repo”,以托管本地 APT 存储库。

jackli@local-apt-repo:~$ sudo mkdir /var/www/html/repo

将 Ubuntu DVD 挂载到 /mnt/cdrom 。

jackli@local-apt-repo:~$ sudo mkdir /mnt/cdrom
jackli@local-apt-repo:~$ sudo mount /dev/cdrom /mnt/cdrom
mount: /mnt/cdrom: WARNING: device write-protected, mounted read-only.

查找所有 *.deb 包并将其复制到我们的本地 APT 存储库中。

jackli@local-apt-repo:~$ sudo find /mnt/cdrom -iname *.deb -exec cp {} /var/www/html/repo \;

检查由上一个命令复制的文件。

jackli@local-apt-repo:~$ ls /var/www/html/repo/

在 Ubuntu Sources.list 中添加 APT 存储库

在 nano 文本编辑器中编辑 sources.list 文件。

jackli@local-apt-repo:~$ sudo nano /etc/apt/sources.list

并在此文件的末尾添加以下行。

# Local APT Repository
deb [allow-insecure=yes] http://local-apt-repo.onitroad.com/repo ./

执行 apt-get 命令更新包列表。

jackli@local-apt-repo:~$ sudo apt-get update

忽略有关发布文件的警告。

尝试从本地 APT 存储库安装包。

jackli@local-apt-repo:~$ sudo apt install jfsutils
Reading package lists... Done
...
Processing triggers for initramfs-tools (0.136ubuntu6.3) ...
update-initramfs: Generating /boot/initrd.img-5.4.0-66-generic

我们所需的软件包已成功安装。

更新可用 APT 包列表

通过在 Linux shell 中执行以下命令来更新 APT 包列表。

jackli@local-apt-repo:~$ sudo apt-get update

在 Ubuntu 20.4 LTS 上安装 Apache Web 服务器

如果我们计划配置本地 APT 存储库以供网络上的其他 Ubuntu 20.04 LTS 机器使用。
然后,我们应该安装 Apache Web 服务器来托管 APT 存储库。

jackli@local-apt-repo:~$ sudo apt-get install -y apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
日期:2020-09-17 00:12:55 来源:oir作者:oir