Python: 生成ubuntu apt镜像地址

news/2024/7/21 14:03:42 标签: ubuntu, python, vim, ubuntu22.04, apt

文章目录

    • 1. 目的
    • 2. 设计
    • 3. 实现
    • 4. 调用
    • 5. 参考

在这里插入图片描述

1. 目的

每次新配置 Ubuntu 系统,免不了配置 apt 源。尽管可以通过 GUI 界面进行选择,但自动化程度不够,不同桌面(Unity/Gnome/KDE)下的界面也不太一样; 使用 vim 进行替换足够 Geek,却也免不了查询每个 ubuntu 发行版的名称。使用 Pyhon 可以实现 apt 镜像配置文件的生成, 输入可选的参数(镜像站点、ubuntu发行版本等),即可自动生成配置文件 sources.list. 本文给出代码实现。

2. 设计

  • 定义一个函数,根据输入的发行版数字(例如22.04),返回对应的字符串名称
  • 定义一个函数,根据给定的站点名称(如ustc),给出站点的完整路径
  • 可以选择是否开启 ipv6, 是否用 https, 并且给与默认值

3. 实现

首先观察镜像站点给出的配置文件内容:
在这里插入图片描述可以看到,不同发行版仅仅是名称不一样,配置文件结构是相同的。因此

python">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]

然后是不同的镜像站点,路径略有差别:

python">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]

接下来是拼接生成配置文件:

python">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 为例,使用时只需要一句话:

python">if __name__ == '__main__':
    get_mirror_site(distro_num_str='22.04', site_name='ustc')

5. 参考

参考了科大 ustc lug 镜像站点的 repogen 这一网页:https://mirrors.ustc.edu.cn/repogen/
在这里插入图片描述


http://www.niftyadmin.cn/n/330131.html

相关文章

洛谷P1249题解

一、问题引出 最大乘积 题目描述 一个正整数一般可以分为几个互不相同的自然数的和,如 3 1 2 312 312, 4 1 3 413 413, 5 = 1 4 2 3 5=1423 5=1423, 6 1 5 = 2 4 615&…

HTTP第14讲——HTTP传输大文件的方法

背景 HTTP 可以传输很多种类的数据,不仅是文本,也能传输图片、音频和视频。 早期互联网上传输的基本上都是只有几 K 大小的文本和小图片,现在的情况则大有不同。网页里包含的信息实在是太多了,随随便便一个主页 HTML 就有可能上百…

uniApp通过javascript渲染组件、js、JS、appendChild、removeChild、map、require、extend、mount

文章目录 前言1、组件2、实现js调用挂在组件3、使用 前言 项目开发中基本都会用到组件库,但是设计稿样式和功能不一定和组件库相同,尤其像是消息提示弹窗、确认弹窗,各个项目各个设计师都有自己的一套风格。虽然我们可以使用组件库中的组件对…

编译内核驱动为模块,没有指定架构的时候出现错误

编译内核驱动为模块,发现报错一堆,发现./arch/x86/include/asm/arch_hweight.h:55:42: error: expected ‘:’ or ‘)’ before ‘POPCNT64’ 这种报错,最后发现是编译命令问题,你要指定架构 KERNELDIR : /home/alientek/sdk/ker…

【Leetcode -509.斐波那契数 -520.检测大写字母】

Leetcode Leetcode - 509.斐波那契数Leetcode - 520.检测大写字母 Leetcode - 509.斐波那契数 题目:斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。…

基于协同过滤算法商品推荐系统

随着电子商务的快速发展,商品推荐系统越来越受到人们的关注。商品推荐系统可以根据用户在平台上的历史行为和偏好,为用户推荐个性化的商品,提高用户的满意度和购买率。而协同过滤算法是一种常用的商品推荐算法,本文将详细介绍基于…

从一道go逆向出发,讨论类tea的逆算法

tea代码很短,经常被直接复制为源码(而不是像标准算法那样调库)。在ctf逆向中也算比较常见,复杂度适中。 例题是一道go逆向,经go parser处理后,核心代码如下图。 panic算是go的专有名词,类似异常…

新媒体层出不穷,企业如何做好网络营销?

如今,互联网已经进入下半场,新媒体层出不穷。有的企业对传统互联网还没有完全适应,一个全新的移动互联网或者新媒体时代已经来临。在这样的背景下,企业如何开展网络推广才能有效拓展客户资源呢?小马识途营销顾问认为我…