Python生成ubuntu apt镜像地址实现
作者:baiyu33 发布时间:2023-10-13 04:39:29
标签:Python,ubuntu,apt,镜像
1. 目的
每次新配置 Ubuntu 系统,免不了配置 apt 源。尽管可以通过 GUI 界面进行选择,但自动化程度不够,不同桌面(Unity/Gnome/KDE)下的界面也不太一样; 使用 vim 进行替换足够 Geek,却也免不了查询每个 ubuntu 发行版的名称。使用 Pyhon 可以实现 apt 镜像配置文件的生成, 输入可选的参数(镜像站点、ubuntu发行版本等),即可自动生成配置文件 sources.list
. 本文给出代码实现。
2. 设计
定义一个函数,根据输入的发行版数字(例如22.04),返回对应的字符串名称
定义一个函数,根据给定的站点名称(如ustc),给出站点的完整路径
可以选择是否开启 ipv6, 是否用 https, 并且给与默认值
3. 实现
首先观察镜像站点给出的配置文件内容:
可以看到,不同发行版仅仅是名称不一样,配置文件结构是相同的。因此
def get_ubuntu_distro_name_by_number_str(distro_num_str):
dist_mp = {
'12.04': 'precise',
'14.04': 'trusty',
'16.04': 'xenial',
'16.10': 'yakkety',
'17.04': 'zesty',
'17.10': 'artful',
'18.04': 'bionic',
'20.04': 'focal',
'20.10': 'groovy',
'21.04': 'hirsute',
'21.10': 'impish',
'22.04': 'jammy',
'22.10': 'kinetic',
'23.04': 'lunar',
'23.10': 'mantic'
}
return dist_mp[distro_num_str]
然后是不同的镜像站点,路径略有差别:
def get_site_location_by_name(site_name : str):
site_mp = {
'ustc': 'mirrors.ustc.edu.cn',
'aliyun': 'mirrors.aliyun.com',
'tuna': 'mirrors.tuna.tsinghua.edu.cn',
'163': 'mirrors.163.com',
'zju': 'mirrors.zju.edu.cn',
'huawei': 'mirrors.huaweicloud.com',
'lzu': 'mirror.lzu.edu.cn',
'sjtu': 'mirrors.sjtug.sjtu.edu.cn'
}
return site_mp[site_name]
接下来是拼接生成配置文件:
def get_mirror_site(distro_num_str='22.04', site_name='aliyun', https=True, ipv6=False):
protocal = 'https' if https else 'http'
ipv6_part = 'ipv6' if ipv6 else ''
location = get_site_location_by_name(site_name)
# e.g. https://mirrors.ustc.edu.cn
site_url = "{:s}://{:s}{:s}".format(protocal, ipv6_part, location)
distro = get_ubuntu_distro_name_by_number_str(distro_num_str)
mirror_url_lst = [
'# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释',
'deb {:s}/ubuntu/ {:s} main restricted universe multiverse'.format(site_url, distro),
'# deb-src {:s}/ubuntu/ {:s} main restricted universe multiverse'.format(site_url, distro),
'deb {:s}/ubuntu/ {:s}-updates main restricted universe multiverse'.format(site_url, distro),
'# deb-src {:s}/ubuntu/ {:s}-updates main restricted universe multiverse'.format(site_url, distro),
'deb {:s}/ubuntu/ {:s}-backports main restricted universe multiverse'.format(site_url, distro),
'# deb-src {:s}/ubuntu/ {:s}-backports main restricted universe multiverse'.format(site_url, distro),
'deb {:s}/ubuntu/ {:s}-security main restricted universe multiverse'.format(site_url, distro),
'# deb-src {:s}/ubuntu/ {:s}-security main restricted universe multiverse'.format(site_url, distro),
'# 预发布软件源,不建议启用',
'# deb {:s}/ubuntu/ {:s}-proposed main restricted universe multiverse'.format(site_url, distro),
'# deb-src {:s}/ubuntu/ {:s}-proposed main restricted universe multiverse'.format(site_url, distro)
]
for mirror_url in mirror_url_lst:
print(mirror_url)
4. 调用
以 ustc, ubuntu 22.04 为例,使用时只需要一句话:
if __name__ == '__main__':
get_mirror_site(distro_num_str='22.04', site_name='ustc')
5. 参考
参考了科大 ustc lug 镜像站点的 repogen 这一网页:https://mirrors.ustc.edu.cn/repogen/
来源:https://blog.csdn.net/baiyu33/article/details/130716201
0
投稿
猜你喜欢
- 在认证框架中还有其他的一些功能。 我们会在接下来的几个部分中进一步地了解它们。权限权限可以很方便地标识用户和用户组可以执行的操作。 它们被D
- shutil --High-level file operations 高级的文件操作模块os模块提供了对目录或者文件的新建/删除/查看文件
- 方案5 使用xml参数 对sql server xml类型参数不熟悉的童鞋需要先了解下XQuery概念,这里简单提下XQuery 是用来从
- try-except作用:处理异常情况用法:try:后面写正常运行的代码,except + 异常情况:后面写对异常情况的处理示例:try:
- Selenium特点开源,免费多浏览器支持:firefox、chrome、IE多平台支持:linux 、windows、MAC多语言支持:j
- 调用bianli()函数,这里是遍历F:盘,bianli("F:\")'这里设置文件夹路径,你可以改为其它文件夹
- 本教程配置好后一劳永逸,不用再配置,每次只需要选择 Python 解释器即可打开KBEngine的服务器项目文件夹(资产目录)其主要工程目录
- 中间件中间件是放在客户端和服务端的中间。 当你的客户端对某个接口发起一个请求,但是在到达接口2之前,这里是有一层中间件的处理。一般
- 在python3的sorted中去掉了cmp参数,转而推荐“key+lambda”的方式来排序。如果需要对python的list进行多级排序
- 示例1:pycallclass.cpp:#include <iostream>using namespace std;typed
- JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集。 JSON
- 1、Python的min函数返回列表中的最小的项。2、如何返回列表中最小的项的索引?def indexofMin(arr):
- 制作网页可说是易学难精,因此,不断吸收经验可弥补不足,以下列出的50个制作主页的独门招数可帮助你尽快成为高手,哈哈!1、让读者有理由逗留。要
- 详解python里使用正则表达式的分组命名方式分组匹配的模式,可以通过groups()来全部访问匹配的元组,也可以通过group()函数来按
- 目录1.事件循环2.协程和异步编程2.1 基本使用2.2 await2.3 Task对象1.事件循环可以理解成为一个死循环,去检查任务列表中
- 如果你细心跟踪一下SQL Server数据库服务器的登录过程,你会发现口令计算其实是非常脆弱的,SQL Server数据库的口令脆弱体现两方
- GOPATH设置go 命令依赖一个重要的环境变量:$GOPATH1(注:这个不是Go安装目录。下面以笔者的工作目录为说明,请替换自己机器上的
- 我就废话不多说了,直接上代码吧!>>> list1 = [1,2,3,4,4]>>> list2 = [
- (1)最近真是郁闷,在Myeclipse中使用DB Browser但出现以下问题:(2)然后赶紧百度,求大神解决,主要的解决方法试一下几种:
- ISSET();——适合于检测是否存在这个参数。 定义和作用范围:用于测试一个变量是否具有值(包括0,FALSE,或者一个空字串,但不能是N