使用apt

Wesley13
• 阅读 615

Ubuntu 的母公司 Canonical 提供的光盘用处不大,尽管有很多光盘,我们还是要面临同一个问题:带宽。获取软件更新和安全补丁始终是一个导致部署缓慢的瓶颈。

想象一下,你和一群 Linux 用户在同一个会议室里,每个用户都在尝试利用互联网来获取更新,想象一下这个过程会有多么缓慢和拥挤。随着人群的增长,这一问题会愈发显著。

在经过这些折磨之后,我开始寻求解决这一问题的方法。我知道所有的机器都在下载同样的更新和补丁,这一切都是重复工作。这实在太没效率了。这里一定有更好的办法。最后我找到了两个方案,下面我会简要介绍。

Apt-Mirror

第一个方法来自于一个工具——“apt-mirror”。这是一个 Perl 开发的工具,用来从一个公开仓库中下载并镜像全部内容。这样就会包含公共仓库中所有的内容,其中自然也会包含你不需要的包。

要配置 apt-mirror 需要如下条件: apt-mirror 包(sudo aptitude install apt-mirror) apache2 包(sudo aptitude install apache2)

针对每个(硬件)架构的每个版本大概各需要 15G 的空间。 如果上面的需求你可以达成,那么你就可以配置 apt-mirror 工具了,主要内容包括:

存储位置(base_path) 下载的线程数(nthreads) 需要下载的版本和架构 上述配置在/etc/apt/mirror.list文件中完成。在安装这一工具的过程中,就会生成一个缺省版本,我们需要在这基础上对上述参数进行调整。

下面我列出一个完整的配置文件,他将会镜像 Ubuntu 8.04 LTS 的 32 和 64 位版本。这需要接近 30G 的存储空间。我会把这些内容放到一个加载到 /media/STORAGE/ 的移动盘上。

apt-mirror configuration file##

The default configuration options (uncomment and change to override)

set base_path /media/STORAGE/

set mirror_path $base_path/mirror

set skel_path $base_path/skel

set var_path $base_path/var

set defaultarch

set nthreads 20

8.04 "hardy" i386 mirror

deb-i386 http://us.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse deb-i386 http://us.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse deb-i386 http://us.archive.ubuntu.com/ubuntu hardy-security main restricted universe multiverse deb-i386 http://us.archive.ubuntu.com/ubuntu hardy-backports main restricted universe multiverse deb-i386 http://us.archive.ubuntu.com/ubuntu hardy-proposed main restricted universe multiversedeb-i386 http://us.archive.ubuntu.com/ubuntu hardy main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer deb-i386 http://packages.medibuntu.org/ hardy free non-free# 8.04 "hardy" amd64 mirror deb-amd64 http://us.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse deb-amd64 http://us.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse deb-amd64 http://us.archive.ubuntu.com/ubuntu hardy-security main restricted universe multiverse deb-amd64 http://us.archive.ubuntu.com/ubuntu hardy-backports main restricted universe multiverse deb-amd64 http://us.archive.ubuntu.com/ubuntu hardy-proposed main restricted universe multiversedeb-amd64 http://us.archive.ubuntu.com/ubuntu hardy main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer deb-amd64 http://packages.medibuntu.org/ hardy free non-free# Cleaning section clean http://us.archive.ubuntu.com/ clean http://packages.medibuntu.org/

值得注意的是,上面每一行都需要以 deb-i386 或者 deb-amd64 开始。

配置完成之后,就可以开始用下面的命令来开始镜像过程了: apt-mirror

根据你的互联网连接速度,这可能需要很长的时间。首次运行会初始化这 30G 的内容,而在这之后,运行这一命令只会下载增长部分,就会快速很多了。

读者可能要问,是否可以在完成之前取消传输过程,然后再继续运行呢?是的,我做了很多次这样的操作,目前没有出现任何问题。

现在你有了一个公开仓库的本地镜像了。为了让其他客户能够访问你的仓库,就需要通过 http 的方式来共享这些内容。在我上面的例子中,我把仓库内容存储在了移动盘上,加载点是 /media/STORAGE。接下来要做的事情就是让这些内容能够通过 web 进行访问。简单的做一个符号链接就能达到目的了: cd /var/www/ sudo ln -s \ /media/STORAGE/mirror/us.archive.ubuntu.com/ubuntu/ ubuntu

上面的命令会告诉文件系统,所有对 ubuntu 的请求都转到移动盘上,然后就能找到镜像内容了。如果这一过程出现了问题,请仔细检查路径问题,确认正确的连接到了 ubuntu 目录上。连接错误会导致用户无法找到需要的内容。

还有一个附加的需求就是让这一镜像保持更新,这一点可以通过 cron job 来实现。激活定时任务会自动运行 apt-mirror 命令,保持镜像始终最新。

要激活自动的定时任务,我们创建一个文件 /etc/cron.d/apt-mirror。这里提供一个示例内容,只要取消这一行的注释,并把 4 替换成一个你认为合适的时间即可。如果没有修改时间,他会在每天早上 4 点运行 apt-mirror 命令,进行同步。

现在已经建立了自己的仓库,并且通过 http 进行了共享,还设置了自动的更新,那么最后一步就是配置客户来使用它了。Ubuntu 用户使用 /etc/apt/sources.list 文件来定义更新源。这个文件通常会指向官方源。因此需要注释原有内容,加入我们的镜像源。例如把下面的内容加入到配置文件: deb http://192.168.0.10/ubuntu hardy main restricted universe multiverse deb http://192.168.0.10/ubuntu hardy-updates main restricted universe multiverse deb http://192.168.0.10/ubuntu hardy-security main restricted universe multiverse

基本上完成这些步骤之后,你的镜像仓库就可以通过 http 提供服务了,如果出现了问题,可以查看 apache 日志来进行除错。

现在局域网里面就有了私有的(可移动)Ubuntu 仓库了,能够大量节省你的时间和带宽 由睿江云提供,想了解更多,请登陆www.eflycloud.com

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这