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


猜你喜欢
- python里面可以将路径里面的\替换成/避免转义。os.walk方法可以将目标路径下文件的root,dirs,files提取出来。后面对每
- 目录1.jupyter简介2.jupyter基础操作2.1windows更新pip库2.2jupyter安装2.3初次启动jupyter2.
- Mybatisd对sql表的一对多查询select * fromprojectrecord prleft join projects poo
- 本文将研究 ES6 的 for ... of 循环。旧方法在过去,有两种方法可以遍历 javascript。首先是经典的 for i 循环,
- 在Python中创建进程有两种方式,第一种是:from multiprocessing import Processimport timed
- 本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下1.功能简介此程序模拟用户登录验证的过程,实现用户名输入
- 在tensorflow中,经常会遇到参数初始化问题,比如在训练自己的词向量时,需要对原始的embeddigs矩阵进行初始化,更一般的,在全连
- MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两
- 背景 在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert。 如果使用Hi
- 本文实例为大家分享了Python管理Windows服务的具体代码,供大家参考,具体内容如下#!/usr/bin/python# encodi
- 1. 数据库的概念1.1 数据库(Database)是统一管理的相关数据的集合。长期存储在计算机内,有结构的、集成的、可共享的、统一管理的数
- SQLyog是一款MySQL可视化工具,他可以将部分SQL操作通过图形化界面操作来完成,方便开发者更好的进行开发及数据库设计。在安装SQLy
- 一、实验内容编写一Python程序,要求实现以下功能:读入一幅图像。使用两种以上的方法分别向图像中添加噪声。输出一幅二值图像,图像中未加入噪
- Go反射的实现和 interface 和 unsafe.Pointer 密切相关。如果对golang的 interface 底层实现还没有理
- 首先要介绍的是 Python Imaging Library,使用方法如下:from PIL import Imagefrom PIL.Ex
- 今天遇到一个需求,就是将一个list文件读取后,存入一个txt配置文件。存入时,发现list文件无法直接存入,必须转为str模式。但在读取t
- 需要先安装openpyxl库通过pip命令安装: pip install openpyxl源码如下:#!/usr/bin/python3#-
- print函数:Python中可以直接使用的函数,可以将信息展示在控制台print()函数可以输出哪些内容?print()函数输出的内容可以
- 下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理主要参考HEG的用户手册:h
- 一、报错error connecting to master 'x@x.x.x.x:x' - retry-time: 60&