Python生成ubuntu apt鏡像地址實現(xiàn)
1. 目的
每次新配置 Ubuntu 系統(tǒng),免不了配置 apt 源。盡管可以通過 GUI 界面進(jìn)行選擇,但自動化程度不夠,不同桌面(Unity/Gnome/KDE)下的界面也不太一樣; 使用 vim 進(jìn)行替換足夠 Geek,卻也免不了查詢每個 ubuntu 發(fā)行版的名稱。使用 Pyhon 可以實現(xiàn) apt 鏡像配置文件的生成, 輸入可選的參數(shù)(鏡像站點(diǎn)、ubuntu發(fā)行版本等),即可自動生成配置文件 sources.list. 本文給出代碼實現(xiàn)。
2. 設(shè)計
- 定義一個函數(shù),根據(jù)輸入的發(fā)行版數(shù)字(例如22.04),返回對應(yīng)的字符串名稱
- 定義一個函數(shù),根據(jù)給定的站點(diǎn)名稱(如ustc),給出站點(diǎn)的完整路徑
- 可以選擇是否開啟 ipv6, 是否用 https, 并且給與默認(rèn)值
3. 實現(xiàn)
首先觀察鏡像站點(diǎn)給出的配置文件內(nèi)容:

可以看到,不同發(fā)行版僅僅是名稱不一樣,配置文件結(jié)構(gòu)是相同的。因此
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]然后是不同的鏡像站點(diǎn),路徑略有差別:
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 = [
'# 默認(rèn)注釋了源碼鏡像以提高 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),
'# 預(yù)發(fā)布軟件源,不建議啟用',
'# 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. 調(diào)用
以 ustc, ubuntu 22.04 為例,使用時只需要一句話:
if __name__ == '__main__':
get_mirror_site(distro_num_str='22.04', site_name='ustc')5. 參考
參考了科大 ustc lug 鏡像站點(diǎn)的 repogen 這一網(wǎng)頁:https://mirrors.ustc.edu.cn/repogen/

到此這篇關(guān)于Python生成ubuntu apt鏡像地址實現(xiàn)的文章就介紹到這了,更多相關(guān)Python生成ubuntu apt鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python還能這么玩之只用30行代碼從excel提取個人值班表
公司實行項目值班制度,拿到值班表,看到全部的值班信息,要去查找自己的值班信息,是一件頭痛的事情.作為程序員,當(dāng)然要簡化,將自己的信息提煉出來,需要的朋友可以參考下2021-06-06
在Python3 numpy中mean和average的區(qū)別詳解
今天小編就為大家分享一篇在Python3 numpy中mean和average的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python數(shù)據(jù)處理和數(shù)據(jù)清洗的示例詳解
數(shù)據(jù)清洗是指發(fā)現(xiàn)并糾正數(shù)據(jù)文件中可識別的錯誤的最后一道程序,包括檢查數(shù)據(jù)一致性,處理無效值和缺失值等,數(shù)據(jù)清洗與處理的目的是提高數(shù)據(jù)的質(zhì)量,提高實驗結(jié)果的可靠度,本文給大家介紹了python數(shù)據(jù)處理和數(shù)據(jù)清洗的示例,需要的朋友可以參考下2024-08-08
Python使用Selenium與pytest進(jìn)行高效測試的示例詳解
隨著軟件開發(fā)的快速發(fā)展,自動化測試成為了提高開發(fā)效率、降低錯誤率的重要工具,Python作為一種高效且易于使用的編程語言,已經(jīng)成為自動化測試領(lǐng)域的重要工具之一,本文將介紹如何使用Python、Selenium和pytest進(jìn)行自動化測試,并展示一個簡單的自動化測試示例2025-01-01

