w-s*_*sky 17 updates update-manager snap
我总是想知道为什么软件更新工具(“更新管理器”)在执行包更新后会说“更新快照”几秒钟,而实际上它并没有做这样的事情。
相反,在软件更新程序完成后,我经常在终端中输入“sudo snap refresh”以查找是否有可用的快照更新并进行更新。(如果我不这样做,快照更新将在一段时间后自动安装,但我更喜欢在开始工作之前而不是在工作时获取所有最新更新。)
使用Ubuntu 22.04,但始终与20.04相同。
pop*_*pey 21
我认为“更新快照”这句话具有误导性。它没有按照你的想法行事,也没有按照任何理性的人的预期行事。
我查看了更新管理器的代码,虽然我不是开发人员,但我想我明白发生了什么。
deb该代码看起来像是“更新快照”,然后继续获取正在从迁移到 的快照列表snap- 例如lxd、firefox和chromium-browser。然后它会处理它们(如果有的话),然后继续。正如您所期望的,它不会处理任何已安装的快照。
消息“更新快照”可能应该类似于“处理 deb 到快照迁移”或类似内容。
这是代码。
def update_snaps(self):
# update status and progress bar
def update_status(status):
GLib.idle_add(self.label_details.set_label, status)
def update_progress(progress_bar):
progress_bar.pulse()
return True
update_status(_("Updating snaps"))
progress_bar = None
progress_timer = None
progress_bars = self.progressbar_slot.get_children()
if progress_bars and isinstance(progress_bars[0], Gtk.ProgressBar):
progress_bar = progress_bars[0]
progress_timer = GLib.timeout_add(100, update_progress,
progress_bar)
# populate snap_list with deb2snap transitions
snap_list = self.get_snap_transitions()
if progress_timer:
GLib.source_remove(progress_timer)
progress_bar.set_fraction(0)
# (un)install (un)seeded snap(s)
try:
client = Snapd.Client()
client.connect_sync()
index = 0
count = len(snap_list)
for snap, snap_object in snap_list.items():
command = snap_object['command']
if command == 'refresh':
update_status(_("Refreshing %s snap" % snap))
client.refresh_sync(snap, snap_object['channel'],
self.update_snap_cb,
progress_callback_data=(index, count,
progress_bar))
elif command == 'remove':
update_status(_("Removing %s snap" % snap))
client.remove_sync(snap, self.update_snap_cb,
progress_callback_data=(index, count,
progress_bar))
else:
update_status(_("Installing %s snap" % snap))
client.install_sync(snap, snap_object['channel'],
self.update_snap_cb,
progress_callback_data=(index, count,
progress_bar))
index += 1
except GLib.Error as e:
logging.debug("error updating snaps (%s)" % e)
GLib.idle_add(self.window_main.start_error, False,
_("Upgrade only partially completed."),
_("An error occurred while updating snaps. "
"Please check your network connection."))
return
# continue with the rest of the updates
GLib.idle_add(self.window_main.start_available)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2518 次 |
| 最近记录: |