Python: 生成ubuntu apt镜像地址

news2024/11/25 12:36:15

文章目录

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

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

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/
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/534595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础-sleep和wait的区别

本文介绍Java中sleep和wait方法的使用区别 文章目录 sleep()wait()sleep()和wait()对比区别相同点 sleep() 查看sleep方法,可见其是static native方法 public static native void sleep(long millis) throws InterruptedException;sleep()方法需要指定等待的时间。…

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

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

java常用集合

java集合又是一个新世界了,从前在我刚接触java的时候,一直在纠结 集合这东西到底有啥用,后来代码写的多了。才开始学习集合 集合也叫容器。顾名思意 就是存放对象的器皿。 主要是由两大接口派生而来 :一个是 Collecton接口&#…

LeetCode高频算法刷题记录2

文章目录 1. 最大子数组和【简单】1.1 题目描述1.2 解题思路1.3 代码实现 2. 合并两个有序链表【简单】2.1 题目描述2.2 解题思路2.3 代码实现 3. 两数之和【简单】3.1 题目描述3.2 解题思路3.3 代码实现 4. 二叉树的层序遍历【中等】4.1 题目描述4.2 解题思路4.3 代码实现 5. …

代码随想录算法训练营第四十二天 | 背包问题

背包问题 理论 基础:二维 文档讲解:代码随想录 (programmercarl.com) 视频讲解:带你学透0-1背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩…

Revit SDK:ErrorHandling

前言 本文介绍 Revit 的错误处理机制。 内容 程序员对错误处理的定义和理解 程序的错误处理机制可以分为两种类型:错误返回码和异常捕捉。 错误返回码是指在程序中遇到错误时,通过函数返回值来表明错误的类型和信息。错误返回码可以在程序中被预测和…

MySQL数据落盘原理(data page、redo log、undo log、binlog、xa-2pc等源码分析)

文章目录 前言一、Innodb如何作为MySQL插件的二、page cleaner thread三、Update操作源码梳理1、生成undo log2、更新数据3、生成redo log 四、MTR与将脏页添加到Flush List1、MTR2、脏页添加到Flush List 五、事务提交1、xa-prepare2、xa-commit2.1、process_flush_stage_queu…

概率统计与计算机技术的联系及在生活当中的应用研究

title: 概率统计与计算机技术的联系及在生活当中的应用研究 date: 2023-05-16 11:42:26 tags: 题目:概率统计与计算机技术的联系及在生活当中的应用研究 摘 要 概率论与数理统计是研究随机现象统计规律性的一门学科,是理工科各专业的一门重要的基础课程…

shell免交互

shell免交互 Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或 read 命令。 是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个“文件”并用作“命令”的…

Python 爬虫(四):Selenium 框架

Selenium 是一个用于测试 Web 应用程序的框架,该框架测试直接在浏览器中运行,就像真实用户操作一样。它支持多种平台:Windows、Linux、Mac,支持多种语言:Python、Perl、PHP、C# 等,支持多种浏览器&#xff…

Android中的IPC方式

Android中的IPC方式 1.Bundle 其中Intent就是用Bundle进行传播 四大组件间的进程间通信 2.使用文件共享 2.1文件共享的缺点 无并发,适用于交换简单的数据实时性不高的情景 使用文件共享容易出: 内容不一致:如果多个线程同时写入文件&…

【JavaWeb】-- Request和Response、JSP、会话技术

文章目录 Request和Response1.概述2.Request对象2.1 Request继承体系2.2Request获取请求数据2.3 IDEA创建Servlet2.4 请求参数中文乱码问题POST请求解决方案GET请求解决方案 2.5 Request请求转发 3.Response对象3.1 Response设置响应数据功能介绍3.2 Response请求重定向3.3 路径…

RabbitMQ养成记 (8. 消费者接受消息可靠性 consumer Ack)

Consumer Ack ack 指的是acknowledge 确认, 指的是消费端收到消息后的确认方式。 有三种确认方式: 自动确认手动确认 (根据业务情况 手动确认是否成功发送)根据异常情况确认 我们在消费端用代码实践一下: 首先我们定…

不会还有人不知道软件测试报告模板怎么写吧?

在测试岗位上,写报告是一项非常重要的软技能,写得好可以加分,写不好必然减分。 但在测试岗位上,提测“通过”和提测“不通过"的软件测试报告所包含的内容是不一样的(这是个坑)。但很多测试新人可能并…

LIO-SAM UBUNTU16.04.7 ROS-KINETIC 环境 编译 安装

简单记录一下 VMWARE workstation15UBUNTU16.04.7ros-kineticgtsam4.0.0 (默认16.04比较老旧,不好用,vmtools也都没有,选了一个.7) 选16.04版本的理由也简单,只是为了参考一个博客,单独建的环…

C语言-易错点汇总

易错点汇总 指针数组和数组指针(*p).astruct stdent和typedef struct stdentF5和CtrlF5const的位置全局变量和局部变量两个相同的常量字符串数组名和&数组名数组指针定义的解读int (*arr[10])[5]数组传参(* (void (*)())0)();关于数组名是否表示整个数组和数组首元素的地址…

Java位运算

Java >>和>>>的区别 | 或: 有1得1, 全0得0 int temp a|c;System.out.println(Integer.toBinaryString(a));System.out.println(Integer.toBinaryString(c));System.out.println(Integer.toBinaryString(temp));/*** 结果输出* * 01* …

对比SQL学Python:筛选|条件判断

SQL里筛选数据主要用到了where、and、in等语句。而在Python里实现筛选的方式比较多样,用到了 与&或|非~ 逻辑运算符,和isin()函数等。我们感受一下二者的区别吧: 汇总: 类型Python语句参考单条件筛选 data[data[shop_type]A…

Python复制目录及其子目录下的所有文件到指定新目录并重命名

Python复制目录及其子目录下的所有文件到指定新目录并重命名 前言前提条件相关介绍实验环境Python复制目录及其子目录下的所有文件到指定新目录并重命名代码实现输出结果 前言 本文是个人使用Python处理文件的电子笔记,由于水平有限,难免出现错漏&#x…

最常用的界线矢量数据大合集(文末有附下载方法)

最近收集了挺多比较常用的矢量界线数据,例如地理分区、气候分区等界线数据,在日常制图、学习、科研等方面使用频率比较高。废话不多说,这里给大家分享一下!! 1、中国农业熟制区划矢量数据 2、黄土高原空间范围矢量数据…