网络编程
位置:首页>> 网络编程>> Python编程>> Python生成ubuntu apt镜像地址实现

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. 实现

首先观察镜像站点给出的配置文件内容:

Python生成ubuntu apt镜像地址实现

可以看到,不同发行版仅仅是名称不一样,配置文件结构是相同的。因此

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/

Python生成ubuntu apt镜像地址实现

来源:https://blog.csdn.net/baiyu33/article/details/130716201

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com