forked from oleeks/resetapt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreset_apt_sources.py
executable file
·156 lines (130 loc) · 5.68 KB
/
reset_apt_sources.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
项目:https://github.com/loaden/resetapt
说明:本脚本请设置可执行权限后,双击在终端运行,或者终端命令行`python3 reset_apt_sources.py`
版本:0.1
作者:Zz [loaden@gmail.com, QQ群:19346666]
欢迎提交补丁,共同维护。
'''
import os
import sys
import configparser
def get_auth():
euid = os.geteuid()
if euid != 0:
args = ['sudo', sys.executable] + sys.argv + [os.environ]
# replaces the currently-running process with the sudo
os.execlpe('sudo', *args)
return euid == 0
def user_agree_to_reset(src_file):
msg = "源文件'" + src_file + "'已被修改,是否重置?(Y/n)"
r = 'Y'
while (r != 'y' and r != 'n' and r != ''):
r = input(msg).lower()
return r != 'n'
class SourcesBase:
def __init__(self):
self.os_version_file = '/etc/os-version'
self.os_edition_name = ('Community', 'Home', 'Professional')
self.os_edition = self.get_os_edition_name()
self.src_file = ''
self.reset = False
def get_os_edition_name(self):
try:
cf = configparser.ConfigParser()
cf.read(self.os_version_file)
except FileNotFoundError:
print('当前系统不是Deepin社区版、UOS个人版或专业版')
else:
return cf.get('Version', 'EditionName')
def get_current_sources(self):
return self.get_sources_content()
def default_sources_should_be(self):
return ''
def reset_sources_to_default(self):
with open(self.src_file, 'w') as src:
src.write(self.default_sources_should_be())
self.reset = True
print(self.src_file, '重置成功')
def get_sources_content(self):
content = ""
try:
with open(self.src_file) as src:
for line in src.readlines():
line_strip = line.strip()
if line_strip.startswith("#"):
continue
content += line_strip
except FileNotFoundError:
print(self.src_file, '文件不存在')
else:
return content
class DefaultSources(SourcesBase):
def __init__(self):
super().__init__()
self.src_file = '/etc/apt/sources.list'
def default_sources_should_be(self):
if self.os_edition == self.os_edition_name[0]:
return '## Generated by deepin-installer\n' \
'deb [by-hash=force] https://community-packages.deepin.com/deepin/ apricot main contrib non-free\n' \
'#deb-src https://community-packages.deepin.com/deepin/ apricot main contrib non-free\n'
elif self.os_edition == self.os_edition_name[1]:
return '## Generated by deepin-installer\n' \
'deb [by-hash=force] https://home-packages.chinauos.com/home plum main contrib non-free\n' \
'#deb-src [by-hash=force] https://home-packages.chinauos.com/home plum main contrib non-free\n'
elif self.os_edition == self.os_edition_name[2]:
return '## Generated by deepin-installer\n' \
'deb [by-hash=force] https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free\n' \
'#deb-src [by-hash=force] https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free\n'
else:
raise Exception('该脚本不适用当前操作系统')
class AppstoreSources(SourcesBase):
def __init__(self):
super().__init__()
self.src_file = '/etc/apt/sources.list.d/appstore.list'
def default_sources_should_be(self):
if self.os_edition == self.os_edition_name[0]:
return 'deb https://community-store-packages.deepin.com/appstore eagle appstore\n' \
'#deb https://store.chinauos.com/appstore eagle appstore\n'
elif self.os_edition == self.os_edition_name[1]:
return 'deb https://home-store-packages.chinauos.com/appstore eagle appstore\n'
elif self.os_edition == self.os_edition_name[2]:
return 'deb https://professional-store-packages.chinauos.com/appstore eagle appstore\n'
else:
raise Exception('该脚本不适用当前操作系统')
class PrinterSources(SourcesBase):
def __init__(self):
super().__init__()
self.src_file = '/etc/apt/sources.list.d/printer.list'
def default_sources_should_be(self):
if self.os_edition == self.os_edition_name[0]:
return 'deb http://packages.chinauos.com/printer eagle non-free\n'
elif self.os_edition == self.os_edition_name[1]:
return 'deb https://home-packages.chinauos.com/printer eagle non-free\n'
elif self.os_edition == self.os_edition_name[2]:
return 'deb https://professional-packages.chinauos.com/printer eagle non-free\n'
else:
raise Exception('该脚本不适用当前操作系统')
def detect_and_reset(src):
r1 = src.get_current_sources()
r2 = src.default_sources_should_be()
if r1 != r2:
if (user_agree_to_reset(src.src_file)):
src.reset_sources_to_default()
else:
msg = "默认源'" + src.src_file + "'正常,无需重置。"
print(msg)
def main():
get_auth()
src_default = DefaultSources()
detect_and_reset(src_default)
src_appstore = AppstoreSources()
detect_and_reset(src_appstore)
src_printer = PrinterSources()
detect_and_reset(src_printer)
if (src_default.reset or src_appstore.reset or src_printer.reset):
os.system('apt update -y && apt upgrade -y')
input('按回车键退出')
if __name__ == '__main__':
main()