├── debian ├── compat ├── install ├── source │ └── format ├── lintian-overrides ├── mintupdate.manpages ├── rules ├── control ├── postinst └── copyright ├── usr ├── lib │ └── linuxmint │ │ └── mintUpdate │ │ ├── dpkg_lock_check.sh │ │ ├── rel_upgrades │ │ ├── info.png │ │ ├── risks.png │ │ ├── failure.png │ │ ├── success.png │ │ ├── features.png │ │ └── Credits │ │ ├── checkWarnings.py │ │ ├── logger.py │ │ ├── automatic_upgrades.py │ │ ├── aliases │ │ ├── mintupdate-cli.py │ │ ├── proxygsettings.py │ │ ├── rel_upgrade_root.py │ │ ├── checkKernels.py │ │ ├── flatpakUpdater.py │ │ └── flatpak-update-worker.py ├── bin │ ├── mintupdate-cli │ ├── mintupdate-tool │ ├── mint-release-upgrade │ ├── mint-release-upgrade-root │ ├── mint-refresh-cache │ ├── mintupdate │ ├── mintupdate-automation │ └── mintupdate-launcher └── share │ ├── icons │ └── hicolor │ │ ├── 16x16 │ │ ├── apps │ │ │ ├── mintupdate.png │ │ │ ├── software-properties.png │ │ │ └── mintupdate-release-upgrade.png │ │ └── status │ │ │ ├── mintupdate-error.png │ │ │ ├── mintupdate-checking.png │ │ │ ├── mintupdate-installing.png │ │ │ ├── mintupdate-type-kernel.png │ │ │ ├── mintupdate-up-to-date.png │ │ │ ├── mintupdate-type-backport.png │ │ │ ├── mintupdate-type-package.png │ │ │ ├── mintupdate-type-security.png │ │ │ ├── mintupdate-type-unstable.png │ │ │ └── mintupdate-updates-available.png │ │ ├── 22x22 │ │ ├── apps │ │ │ ├── mintupdate.png │ │ │ ├── software-properties.png │ │ │ └── mintupdate-release-upgrade.png │ │ └── status │ │ │ ├── mintupdate-error.png │ │ │ ├── mintupdate-checking.png │ │ │ ├── mintupdate-installing.png │ │ │ ├── mintupdate-type-kernel.png │ │ │ ├── mintupdate-up-to-date.png │ │ │ ├── mintupdate-type-backport.png │ │ │ ├── mintupdate-type-package.png │ │ │ ├── mintupdate-type-security.png │ │ │ ├── mintupdate-type-unstable.png │ │ │ └── mintupdate-updates-available.png │ │ ├── 24x24 │ │ ├── apps │ │ │ ├── mintupdate.png │ │ │ ├── software-properties.png │ │ │ └── mintupdate-release-upgrade.png │ │ └── status │ │ │ ├── mintupdate-error.png │ │ │ ├── mintupdate-checking.png │ │ │ ├── mintupdate-installing.png │ │ │ ├── mintupdate-type-kernel.png │ │ │ ├── mintupdate-up-to-date.png │ │ │ ├── mintupdate-type-backport.png │ │ │ ├── mintupdate-type-package.png │ │ │ ├── mintupdate-type-security.png │ │ │ ├── mintupdate-type-unstable.png │ │ │ └── mintupdate-updates-available.png │ │ ├── 32x32 │ │ ├── apps │ │ │ ├── mintupdate.png │ │ │ ├── software-properties.png │ │ │ └── mintupdate-release-upgrade.png │ │ └── status │ │ │ ├── mintupdate-error.png │ │ │ ├── mintupdate-checking.png │ │ │ ├── mintupdate-installing.png │ │ │ ├── mintupdate-type-kernel.png │ │ │ ├── mintupdate-up-to-date.png │ │ │ ├── mintupdate-type-backport.png │ │ │ ├── mintupdate-type-package.png │ │ │ ├── mintupdate-type-security.png │ │ │ ├── mintupdate-type-unstable.png │ │ │ └── mintupdate-updates-available.png │ │ ├── 48x48 │ │ ├── apps │ │ │ ├── mintupdate.png │ │ │ ├── software-properties.png │ │ │ └── mintupdate-release-upgrade.png │ │ └── status │ │ │ ├── mintupdate-error.png │ │ │ ├── mintupdate-checking.png │ │ │ ├── mintupdate-installing.png │ │ │ ├── mintupdate-type-kernel.png │ │ │ ├── mintupdate-up-to-date.png │ │ │ ├── mintupdate-type-backport.png │ │ │ ├── mintupdate-type-package.png │ │ │ ├── mintupdate-type-security.png │ │ │ ├── mintupdate-type-unstable.png │ │ │ └── mintupdate-updates-available.png │ │ └── scalable │ │ └── status │ │ ├── mintupdate-type-kernel-symbolic.svg │ │ ├── mintupdate-action-install-symbolic.svg │ │ ├── mintupdate-up-to-date-symbolic.svg │ │ ├── mintupdate-warning-symbolic.svg │ │ ├── mintupdate-type-flatpak-symbolic.svg │ │ ├── mintupdate-type-unstable-symbolic.svg │ │ ├── mintupdate-error-symbolic.svg │ │ ├── mintupdate-type-security-symbolic.svg │ │ ├── mintupdate-checking-symbolic.svg │ │ ├── mintupdate-installing-symbolic.svg │ │ ├── mintupdate-type-3rd-party-symbolic.svg │ │ ├── mintupdate-updates-available-symbolic.svg │ │ └── mintupdate-type-package-symbolic.svg │ ├── linuxmint │ └── mintupdate │ │ ├── automation │ │ ├── blacklist.default │ │ ├── index.json │ │ ├── autoremove.sh │ │ └── 99-mintupdate-temporary.pkla │ │ ├── shortcuts.ui │ │ ├── history.ui │ │ └── information.ui │ ├── polkit-1 │ └── actions │ │ ├── com.linuxmint.mint-release-upgrade.policy │ │ └── com.linuxmint.updates.policy │ ├── glib-2.0 │ └── schemas │ │ └── com.linuxmint.updates.gschema.xml │ └── applications │ ├── mintupdate.desktop │ └── mintupdate-kde.desktop ├── test-doc ├── etc ├── logrotate.d │ └── mintupdate ├── sudoers.d │ └── mintupdate └── xdg │ └── autostart │ └── mintupdate.desktop ├── test ├── lib └── systemd │ └── system │ ├── mintupdate-automation-autoremove.timer │ ├── mintupdate-automation-upgrade.timer │ ├── mintupdate-automation-autoremove.service │ ├── mintupdate-automation-upgrade.service │ └── mintupdate-automation-cleanup.service ├── test-case ├── Makefile ├── .github ├── workflows │ └── build.yml └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── tests └── test_kernel_window.py ├── doc └── man │ ├── mintupdate-launcher.8 │ ├── mint-release-upgrade.8 │ ├── mintupdate.8 │ └── mintupdate-cli.8 ├── makepot └── generate_desktop_files /debian/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /debian/install: -------------------------------------------------------------------------------- 1 | etc 2 | lib 3 | usr 4 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /debian/lintian-overrides: -------------------------------------------------------------------------------- 1 | image-file-in-usr-lib 2 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/dpkg_lock_check.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | /bin/fuser /var/lib/dpkg/lock -------------------------------------------------------------------------------- /usr/bin/mintupdate-cli: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | /usr/lib/linuxmint/mintUpdate/mintupdate-cli.py $@ 4 | 5 | -------------------------------------------------------------------------------- /usr/bin/mintupdate-tool: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "mintupdate-tool is depecrated, please use mintupdate-cli instead." 4 | 5 | -------------------------------------------------------------------------------- /usr/bin/mint-release-upgrade: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import os 4 | os.system("/usr/lib/linuxmint/mintUpdate/rel_upgrade.py") 5 | -------------------------------------------------------------------------------- /test-doc: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for f in $(ls doc/man); do 4 | gzip -c doc/man/$f | sudo tee /usr/share/man/man8/$f.gz 1>/dev/null 5 | done 6 | -------------------------------------------------------------------------------- /debian/mintupdate.manpages: -------------------------------------------------------------------------------- 1 | doc/man/mint-release-upgrade.8 2 | doc/man/mintupdate.8 3 | doc/man/mintupdate-cli.8 4 | doc/man/mintupdate-launcher.8 5 | -------------------------------------------------------------------------------- /etc/logrotate.d/mintupdate: -------------------------------------------------------------------------------- 1 | /var/log/mintupdate.log { 2 | rotate 12 3 | monthly 4 | compress 5 | missingok 6 | notifempty 7 | nocreate 8 | } 9 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/rel_upgrades/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/lib/linuxmint/mintUpdate/rel_upgrades/info.png -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/rel_upgrades/risks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/lib/linuxmint/mintUpdate/rel_upgrades/risks.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/apps/mintupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/apps/mintupdate.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/apps/mintupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/apps/mintupdate.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/apps/mintupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/apps/mintupdate.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/apps/mintupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/apps/mintupdate.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/apps/mintupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/apps/mintupdate.png -------------------------------------------------------------------------------- /usr/share/linuxmint/mintupdate/automation/blacklist.default: -------------------------------------------------------------------------------- 1 | # Source packages in this list are ignored by automatic updates. 2 | # Add one name per line. 3 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/rel_upgrades/failure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/lib/linuxmint/mintUpdate/rel_upgrades/failure.png -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/rel_upgrades/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/lib/linuxmint/mintUpdate/rel_upgrades/success.png -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/rel_upgrades/features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/lib/linuxmint/mintUpdate/rel_upgrades/features.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/apps/software-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/apps/software-properties.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-error.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/apps/software-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/apps/software-properties.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-error.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/apps/software-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/apps/software-properties.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-error.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/apps/software-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/apps/software-properties.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-error.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/apps/software-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/apps/software-properties.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-error.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-checking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-checking.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-checking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-checking.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-checking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-checking.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-checking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-checking.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-checking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-checking.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-installing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-installing.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-type-kernel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-type-kernel.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-up-to-date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-up-to-date.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-installing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-installing.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-type-kernel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-type-kernel.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-up-to-date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-up-to-date.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-installing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-installing.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-type-kernel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-type-kernel.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-up-to-date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-up-to-date.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-installing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-installing.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-type-kernel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-type-kernel.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-up-to-date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-up-to-date.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-installing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-installing.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-type-kernel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-type-kernel.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-up-to-date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-up-to-date.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/apps/mintupdate-release-upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/apps/mintupdate-release-upgrade.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-type-backport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-type-backport.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-type-package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-type-package.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-type-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-type-security.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-type-unstable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-type-unstable.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/apps/mintupdate-release-upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/apps/mintupdate-release-upgrade.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-type-backport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-type-backport.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-type-package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-type-package.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-type-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-type-security.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-type-unstable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-type-unstable.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/apps/mintupdate-release-upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/apps/mintupdate-release-upgrade.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-type-backport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-type-backport.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-type-package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-type-package.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-type-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-type-security.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-type-unstable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-type-unstable.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/apps/mintupdate-release-upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/apps/mintupdate-release-upgrade.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-type-backport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-type-backport.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-type-package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-type-package.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-type-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-type-security.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-type-unstable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-type-unstable.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/apps/mintupdate-release-upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/apps/mintupdate-release-upgrade.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-type-backport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-type-backport.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-type-package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-type-package.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-type-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-type-security.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-type-unstable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-type-unstable.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/16x16/status/mintupdate-updates-available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/16x16/status/mintupdate-updates-available.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/22x22/status/mintupdate-updates-available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/22x22/status/mintupdate-updates-available.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/24x24/status/mintupdate-updates-available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/24x24/status/mintupdate-updates-available.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/32x32/status/mintupdate-updates-available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/32x32/status/mintupdate-updates-available.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/48x48/status/mintupdate-updates-available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxmint/mintupdate/HEAD/usr/share/icons/hicolor/48x48/status/mintupdate-updates-available.png -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-type-kernel-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /etc/sudoers.d/mintupdate: -------------------------------------------------------------------------------- 1 | # Allow any user to check for new system updates without 2 | # requiring user authentication. 3 | 4 | ALL ALL = NOPASSWD:/usr/bin/mint-refresh-cache 5 | ALL ALL = NOPASSWD:/usr/lib/linuxmint/mintUpdate/dpkg_lock_check.sh 6 | -------------------------------------------------------------------------------- /test: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | sudo rm -rf /usr/lib/linuxmint/mintUpdate 4 | sudo cp -R etc / 5 | sudo cp -R lib/* /lib/ 6 | sudo cp -R usr / 7 | sudo glib-compile-schemas /usr/share/glib-2.0/schemas 8 | sudo gtk-update-icon-cache /usr/share/icons/hicolor 9 | mintupdate 10 | -------------------------------------------------------------------------------- /lib/systemd/system/mintupdate-automation-autoremove.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Update Manager weekly autoremove 3 | 4 | [Timer] 5 | OnCalendar=weekly 6 | OnStartupSec=180m 7 | RandomizedDelaySec=60m 8 | Persistent=true 9 | 10 | [Install] 11 | WantedBy=timers.target 12 | -------------------------------------------------------------------------------- /lib/systemd/system/mintupdate-automation-upgrade.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Update Manager automatic upgrades 3 | 4 | [Timer] 5 | OnCalendar=daily 6 | OnStartupSec=60m 7 | RandomizedDelaySec=60m 8 | Persistent=true 9 | 10 | [Install] 11 | WantedBy=timers.target 12 | -------------------------------------------------------------------------------- /lib/systemd/system/mintupdate-automation-autoremove.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Update Manager weekly autoremove 3 | 4 | [Service] 5 | Type=oneshot 6 | CPUQuota=50% 7 | CPUWeight=20 8 | IOWeight=20 9 | ExecStart=/usr/share/linuxmint/mintupdate/automation/autoremove.sh 10 | -------------------------------------------------------------------------------- /usr/bin/mint-release-upgrade-root: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import subprocess, sys 4 | 5 | if len(sys.argv) != 2: 6 | print("Missing arguments!") 7 | sys.exit(1) 8 | 9 | codename = sys.argv[1] 10 | subprocess.run(["/usr/lib/linuxmint/mintUpdate/rel_upgrade_root.py", codename]) 11 | -------------------------------------------------------------------------------- /lib/systemd/system/mintupdate-automation-upgrade.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Update Manager automatic upgrades 3 | After=network-online.target 4 | 5 | [Service] 6 | Type=oneshot 7 | CPUQuota=50% 8 | CPUWeight=20 9 | IOWeight=20 10 | ExecStart=/usr/lib/linuxmint/mintUpdate/automatic_upgrades.py 11 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/rel_upgrades/Credits: -------------------------------------------------------------------------------- 1 | --- 2 | Metrize Icons 3 | by Alessio Atzeni 4 | 5 | http://alessioatzeni.com/metrize-icons/ 6 | https://twitter.com/Bluxart 7 | http://dribbble.com/Bluxart 8 | 9 | No License granted. Distributed under the terms specified by the author. 10 | 11 | --- 12 | 13 | http://icomoon.io 14 | Licensed under GPL 15 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | DEB_VERSION := $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ') 4 | 5 | %: 6 | dh ${@} 7 | 8 | # Inject version number in the code 9 | override_dh_installdeb: 10 | dh_installdeb 11 | for pkg in $$(dh_listpackages -i); do \ 12 | find debian/$$pkg -type f -exec sed -i -e s/__DEB_VERSION__/$(DEB_VERSION)/g {} +; \ 13 | done 14 | -------------------------------------------------------------------------------- /test-case: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | display_usage() { 4 | echo "Usage: test-case testname" 5 | echo -e "test names:" 6 | echo -e " - updates" 7 | echo -e " - self-update" 8 | echo -e " - up-to-date" 9 | echo -e " - error" 10 | echo -e " - layer-error" 11 | echo -e " - tracker-max-age" 12 | } 13 | 14 | if [ $# -le 0 ] 15 | then 16 | display_usage 17 | exit 1 18 | fi 19 | 20 | MINTUPDATE_TEST=$1 ./test 21 | -------------------------------------------------------------------------------- /usr/bin/mint-refresh-cache: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | if os.getuid() == 0: 7 | try: 8 | import apt 9 | cache = apt.Cache() 10 | cache.update() 11 | except Exception as e: 12 | print("Error: mint-refresh-cache could not update the cache.") 13 | print(e) 14 | else: 15 | print("Error: mint-refresh-cache requires admin privileges") 16 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: buildmo 2 | 3 | buildmo: 4 | @echo "Building the mo files" 5 | # WARNING: the second sed below will only works correctly with the languages that don't contain "-" 6 | for file in `ls po/*.po`; do \ 7 | lang=`echo $$file | sed 's@po/@@' | sed 's/.po//' | sed 's/mintupdate-//'`; \ 8 | install -d usr/share/locale/$$lang/LC_MESSAGES/; \ 9 | msgfmt -o usr/share/locale/$$lang/LC_MESSAGES/mintupdate.mo $$file; \ 10 | done \ 11 | 12 | clean: 13 | rm -rf usr/share/locale 14 | -------------------------------------------------------------------------------- /usr/bin/mintupdate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | import os 3 | import argparse 4 | 5 | if __name__ == "__main__": 6 | # Parse arguments 7 | parser = argparse.ArgumentParser(prog="mintupdate", description="The Linux Mint Update Manager") 8 | parser.add_argument("-v", "--version", action="version", version="__DEB_VERSION__", help="Display the current version") 9 | args = parser.parse_args() 10 | command = "/usr/lib/linuxmint/mintUpdate/mintUpdate.py show &" 11 | os.system(command) 12 | -------------------------------------------------------------------------------- /usr/share/linuxmint/mintupdate/automation/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "upgrade": ["/etc/systemd/system/timers.target.wants/mintupdate-automation-upgrade.timer", "systemd", "/var/lib/linuxmint/mintupdate-automatic-upgrades-enabled"], 3 | "blacklist": ["/etc/mintupdate.blacklist", "Blacklist", null], 4 | "autoremove": ["/etc/systemd/system/timers.target.wants/mintupdate-automation-autoremove.timer", "systemd", "/var/lib/linuxmint/mintupdate-automatic-removals-enabled"], 5 | "clean": ["/etc/apt/apt.conf.d/99_mintupdate_clean", "apt-daily config", null] 6 | } 7 | -------------------------------------------------------------------------------- /lib/systemd/system/mintupdate-automation-cleanup.service: -------------------------------------------------------------------------------- 1 | # cleanup in case mintupdate automation was interrupted 2 | 3 | [Unit] 4 | Description=Update Manager Automation Cleanup 5 | ConditionPathExists=|/etc/polkit-1/localauthority/90-mandatory.d/99-mintupdate-temporary.pkla 6 | ConditionPathIsSymbolicLink=|/etc/polkit-1/localauthority/90-mandatory.d/99-mintupdate-temporary.pkla 7 | 8 | [Service] 9 | Type=oneshot 10 | CPUQuota=50% 11 | CPUWeight=20 12 | IOWeight=20 13 | ExecStart=/bin/rm -f /etc/polkit-1/localauthority/90-mandatory.d/99-mintupdate-temporary.pkla 14 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | workflow_dispatch: 11 | 12 | jobs: 13 | build: 14 | uses: linuxmint/github-actions/.github/workflows/do-builds.yml@master 15 | with: 16 | commit_id: master 17 | ############################## Comma separated list - like 'linuxmint/xapp, linuxmint/cinnamon-desktop' 18 | dependencies: > 19 | linuxmint/mintcommon, 20 | linuxmint/xapp 21 | ############################## 22 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-action-install-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /usr/share/linuxmint/mintupdate/automation/autoremove.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ ! -e "/var/lib/linuxmint/mintupdate-automatic-removals-enabled" ] 4 | then 5 | exit 6 | fi 7 | 8 | ln -s /usr/share/linuxmint/mintupdate/automation/99-mintupdate-temporary.pkla /etc/polkit-1/localauthority/90-mandatory.d/99-mintupdate-temporary.pkla 9 | echo "\n-- Automatic Removal $(date):\n" >> /var/log/mintupdate.log 10 | systemd-inhibit --why="Performing autoremoval" --who="Update Manager" --what=shutdown --mode=block /usr/bin/apt-get autoremove --purge -y >> /var/log/mintupdate.log 2>&1 11 | rm -f /etc/polkit-1/localauthority/90-mandatory.d/99-mintupdate-temporary.pkla 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: FEATURE REQUEST 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots/illustrations about the feature request here. -------------------------------------------------------------------------------- /tests/test_kernel_window.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import sys, os 4 | myPath = os.path.dirname(os.path.abspath(__file__)) 5 | sys.path.insert(0, myPath + '/../usr/lib/linuxmint/mintUpdate/') 6 | 7 | from datetime import datetime 8 | from Classes import * 9 | from mintUpdate import * 10 | from checkAPT import * 11 | 12 | # Test KernelVersion object 13 | def test_kernel_version_series_comparison(): 14 | version1 = KernelVersion ("4.8.0-2-generic") 15 | version2 = KernelVersion ("4.15.0-43-generic") 16 | version3 = KernelVersion ("4.15.0-44-generic") 17 | assert version1.version_id < version2.version_id 18 | assert version2.version_id < version3.version_id 19 | assert version1.series < version2.series 20 | assert version2.series == version3.series 21 | 22 | -------------------------------------------------------------------------------- /doc/man/mintupdate-launcher.8: -------------------------------------------------------------------------------- 1 | .\" Title : mintupdate-launcher 2 | .\" Author : gm10 3 | .\" February, 8 2019 4 | .\" 5 | .\" First parameter, NAME, should be all caps 6 | .\" other parameters are allowed: see man(7), man(1) 7 | .TH MINTUPDATE-LAUNCHER 8 "8 February 2019" 8 | .\" Please adjust this date whenever revising the manpage. 9 | .\" 10 | .\" for manpage-specific macros, see man(7) 11 | .SH NAME 12 | mintupdate-launcher \- Linux Mint Update Manager launcher 13 | 14 | .SH SYNOPSIS 15 | \fBmintupdate-launcher\fR 16 | 17 | .SH DESCRIPTION 18 | \fBmintupdate-launcher\fR launches \fBmintupdate-launcher(8)\fR in tray mode. It is typically being run as a startup application in a user session. 19 | 20 | .SH "AUTHOR" 21 | \fBThe Linux Mint developers\fR 22 | 23 | .SH SEE ALSO 24 | \fBmintupdate(8)\fR 25 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: mintupdate 2 | Section: admin 3 | Priority: optional 4 | Maintainer: Clement Lefebvre 5 | Build-Depends: debhelper (>= 9), 6 | python3, 7 | dh-python 8 | Standards-Version: 3.9.5 9 | 10 | Package: mintupdate 11 | Architecture: all 12 | Depends: 13 | ${python:Depends}, 14 | ${misc:Depends}, 15 | lsb-release, 16 | apt, 17 | aptkit, 18 | distro-info-data, 19 | psmisc, 20 | python3-apt, 21 | python3-multiprocess, 22 | python3-pycurl, 23 | python3-setproctitle, 24 | python3-xapp (>= 1.6), 25 | systemd, 26 | mint-common (>= 2.4.2), 27 | mint-mirrors, 28 | mint-upgrade-info, 29 | gir1.2-notify-0.7, 30 | gir1.2-xapp-1.0 31 | Description: The Linux Mint Update Manager 32 | Helps installing security updates and new versions of packages. 33 | -------------------------------------------------------------------------------- /usr/share/linuxmint/mintupdate/automation/99-mintupdate-temporary.pkla: -------------------------------------------------------------------------------- 1 | # Blocks shutdown and reboot commands while mintupdate 2 | # automation is running. Gets removed when automation 3 | # finishes. 4 | # 5 | [mintupdate] 6 | Identity=unix-user:* 7 | Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.stop-multiple-users;org.freedesktop.consolekit.system.restart;org.freedesktop.consolekit.system.restart-multiple-users;org.freedesktop.login1.halt;org.freedesktop.login1.halt-ignore-inhibit;org.freedesktop.login1.halt-multiple-sessions;org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-ignore-inhibit;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-ignore-inhibit;org.freedesktop.login1.power-off-multiple-sessions 8 | ResultInactive=no 9 | ResultActive=no 10 | -------------------------------------------------------------------------------- /usr/share/polkit-1/actions/com.linuxmint.mint-release-upgrade.policy: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | Linux Mint 8 | https://linuxmint.com/ 9 | 10 | 11 | mintupdate 12 | 13 | no 14 | no 15 | auth_admin_keep 16 | 17 | /usr/bin/mint-release-upgrade-root 18 | true 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /doc/man/mint-release-upgrade.8: -------------------------------------------------------------------------------- 1 | .\" Title : mint-release-upgrade 2 | .\" Author : gm10 3 | .\" February, 8 2019 4 | .\" 5 | .\" First parameter, NAME, should be all caps 6 | .\" other parameters are allowed: see man(7), man(1) 7 | .TH MINT-RELEASE-UPGRADE 8 "8 February 2019" 8 | .\" Please adjust this date whenever revising the manpage. 9 | .\" 10 | .\" for manpage-specific macros, see man(7) 11 | .SH NAME 12 | mint-release-upgrade \- Linux Mint point release installer 13 | 14 | .SH SYNOPSIS 15 | \fBmint-release-upgrade\fR 16 | 17 | .SH DESCRIPTION 18 | \fBmint-release-upgrade\fR is used to install Linux Mint point releases. 19 | 20 | .SH NOTES 21 | \fBmint-release-upgrade\fR is run by \fBmintupdate(8)\fR when the user selects the option to upgrade to the next point release from in mintupdate's Edit menu. 22 | 23 | .SH "AUTHOR" 24 | \fBThe Linux Mint developers\fR 25 | 26 | .SH SEE ALSO 27 | \fBmintupdate(8)\fR 28 | -------------------------------------------------------------------------------- /makepot: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | intltool-extract --type=gettext/glade usr/share/linuxmint/mintupdate/history.ui 3 | intltool-extract --type=gettext/glade usr/share/linuxmint/mintupdate/information.ui 4 | intltool-extract --type=gettext/glade usr/share/linuxmint/mintupdate/kernels.ui 5 | intltool-extract --type=gettext/glade usr/share/linuxmint/mintupdate/main.ui 6 | intltool-extract --type=gettext/glade usr/share/linuxmint/mintupdate/preferences.ui 7 | intltool-extract --type=gettext/glade usr/share/linuxmint/mintupdate/shortcuts.ui 8 | xgettext --language=Python \ 9 | -cTRANSLATORS \ 10 | --keyword=_ \ 11 | --keyword=N_ \ 12 | --output=mintupdate.pot \ 13 | usr/lib/linuxmint/mintUpdate/*.py \ 14 | generate_desktop_files \ 15 | usr/bin/mintupdate-cli \ 16 | usr/bin/mint-release-upgrade \ 17 | usr/bin/mint-release-upgrade-root \ 18 | usr/bin/mintupdate-launcher \ 19 | usr/lib/linuxmint/mintUpdate/aliases \ 20 | usr/share/linuxmint/mintupdate/*.ui.h 21 | 22 | rm -f usr/share/linuxmint/mintupdate/*.ui.h -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: BUG 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **Screenshots** 14 | If applicable, add screenshots to help explain your problem, you can just drag & drop them here. 15 | 16 | **To Reproduce** 17 | Steps to reproduce the behavior: 18 | 1. Go to '...' 19 | 2. Click on '....' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Distribution:** 27 | - [ ] Linux Mint 28 | - [ ] LMDE 29 | - [ ] Other (please specify) 30 | 31 | **Software version:** 32 | See Help > About in Update Manager. 33 | 34 | **Logs:** 35 | Copy & paste the log output from Update Manager > View > Information here. 36 | 37 | **Crash report:** 38 | If you are reporting a crash, please run `mintupdate` from a terminal window, reproduce the crash and copy & paste any output from the terminal window here. 39 | 40 | **Additional context** 41 | Add any other context about the problem you think might be relevant. 42 | 43 | **Locale:** 44 | If the problem is with text not getting displayed correctly, paste the output of the terminal command `locale`. -------------------------------------------------------------------------------- /debian/postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # postinst script 3 | # see: dh_installdeb(1) 4 | 5 | set -e 6 | 7 | # summary of how this script can be called: 8 | # * `configure' 9 | # * `abort-upgrade' 10 | # * `abort-remove' `in-favour' 11 | # 12 | # * `abort-deconfigure' `in-favour' 13 | # `removing' 14 | # 15 | # for details, see http://www.debian.org/doc/debian-policy/ or 16 | # the debian-policy package 17 | # 18 | 19 | case "$1" in 20 | configure) 21 | if which glib-compile-schemas >/dev/null 2>&1 22 | then 23 | glib-compile-schemas /usr/share/glib-2.0/schemas 24 | fi 25 | if which systemctl >/dev/null 2>&1 26 | then 27 | systemctl enable mintupdate-automation-cleanup.service || true 28 | systemctl disable mintupdate-automation-upgrade.service || true 29 | systemctl disable mintupdate-automation-autoremove.service || true 30 | fi 31 | ;; 32 | abort-upgrade|abort-remove|abort-deconfigure) 33 | ;; 34 | triggered) 35 | ;; 36 | *) 37 | echo "postinst called with unknown argument \`$1'" >&2 38 | exit 1 39 | ;; 40 | esac 41 | 42 | # dh_installdeb will replace this with shell code automatically 43 | # generated by other debhelper scripts. 44 | 45 | #DEBHELPER# 46 | 47 | exit 0 48 | 49 | 50 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/checkWarnings.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import sys 4 | import apt_pkg 5 | 6 | try: 7 | selection = sys.argv[1:] 8 | #print ' '.join(str(pkg) for pkg in selection) 9 | packages_to_install = [] 10 | packages_to_remove = [] 11 | 12 | apt_pkg.init() 13 | cache = apt_pkg.Cache(None) 14 | 15 | depcache = apt_pkg.DepCache(cache) 16 | depcache.init() 17 | 18 | with apt_pkg.ActionGroup(depcache): 19 | for package in selection: 20 | pkg = cache[package] 21 | #print "Marking : %s to install" % pkg.Name 22 | depcache.mark_install(pkg) 23 | 24 | depcache.fix_broken() 25 | 26 | #print "Install : %d" % depcache.inst_count 27 | #print "Remove : %d" % depcache.del_count 28 | 29 | # Get changes 30 | for pkg in cache.packages: 31 | if (not depcache.marked_keep(pkg) and 32 | (depcache.marked_install(pkg) or depcache.marked_upgrade(pkg)) and 33 | pkg.name not in selection and 34 | "%s:%s" % (pkg.name, pkg.architecture) not in selection and 35 | pkg.name not in packages_to_install): 36 | packages_to_install.append(pkg.name) 37 | if depcache.marked_delete(pkg) and pkg.name not in packages_to_remove: 38 | packages_to_remove.append(pkg.name) 39 | installations = ' '.join(packages_to_install) 40 | removals = ' '.join(packages_to_remove) 41 | print("%s###%s" % (installations, removals)) 42 | except Exception as e: 43 | print(e) 44 | print(sys.exc_info()[0]) 45 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/logger.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import os 4 | import datetime 5 | import tempfile 6 | import traceback 7 | 8 | class Logger(): 9 | 10 | def __init__(self): 11 | self._create_log() 12 | self.callback = None 13 | 14 | def _create_log(self): 15 | path = os.path.join(tempfile.gettempdir(), "mintUpdate/") 16 | if not os.path.exists(path): 17 | os.umask(0) 18 | os.makedirs(path) 19 | self.log = tempfile.NamedTemporaryFile(mode="w", prefix=path, delete=False) 20 | try: 21 | os.chmod(self.log.name, 0o666) 22 | except: 23 | traceback.print_exc() 24 | 25 | def _log_ready(self): 26 | if self.log.closed: 27 | return False 28 | if not os.path.exists(self.log.name): 29 | self.log.close() 30 | self._create_log() 31 | return True 32 | 33 | def _write(self, separator, line): 34 | timestamp = datetime.datetime.now().strftime('%Y.%m.%d@%H:%M') 35 | line = f"{timestamp} {separator} {line}\n" 36 | if self._log_ready(): 37 | self.log.write(line) 38 | self.log.flush() 39 | if self.callback: 40 | self.callback(line) 41 | 42 | def write(self, line): 43 | self._write("++", line) 44 | 45 | def write_error(self, line): 46 | self._write("--", line) 47 | 48 | def read(self): 49 | if not os.path.exists(self.log.name): 50 | self._create_log() 51 | return "" 52 | else: 53 | with open(self.log.name) as f: 54 | return f.read() 55 | 56 | def close(self): 57 | self.log.close() 58 | 59 | def set_callback(self, callback): 60 | self.callback = callback 61 | 62 | def remove_callback(self): 63 | self.callback = None 64 | -------------------------------------------------------------------------------- /doc/man/mintupdate.8: -------------------------------------------------------------------------------- 1 | .\" Title : mintupdate 2 | .\" Author : gm10 3 | .\" February, 8 2019 4 | .\" 5 | .\" First parameter, NAME, should be all caps 6 | .\" other parameters are allowed: see man(7), man(1) 7 | .TH MINTUPDATE 8 "8 February 2019" 8 | .\" Please adjust this date whenever revising the manpage. 9 | .\" 10 | .\" for manpage-specific macros, see man(7) 11 | .SH NAME 12 | mintupdate \- The Linux Mint Update Manager 13 | 14 | .SH SYNOPSIS 15 | \fBmintupdate\fR [options] 16 | 17 | .SH DESCRIPTION 18 | \fBmintupdate\fR (Update Manager) is Linux Mint's graphical solution to managing software updates available via the apt package management system. It is integrated with the Linux Mint environment and designed to run at session startup. 19 | .PP 20 | In \fBmintupdate\fR's Preferences you find advanced filtering options, can configure the update check schedule and can enable automated maintenance and update functionality. 21 | .PP 22 | \fBmintupdate\fR ensures you are using the recommended kernel for your system, and via the View menu's Linux kernels entry you gain access to an advanced kernel management interface where you install non-default kernels or remove existing ones. 23 | .PP 24 | \fBmintupdate\fR also facilitates installation of Linux Mint point releases as they become available. 25 | 26 | .SH OPTIONS 27 | \fBmintupdate\fR is configured via the GUI and accepts no options except for: 28 | .TP 29 | \fB-v\fR, \fB\-\-version\fR 30 | Display the current version 31 | .PP 32 | See \fBmintupdate-cli(8)\fR for a command line version of mintupdate. 33 | 34 | .SH NOTES 35 | \fBmintupdate\fR's Edit menu entries give acccess to \fBtimeshift-gtk(8)\fR (\fISystem snapshots\fR option), \fBmint-sources(8)\fR (\fISoftware sources\fR option), and \fBmint-release-upgrade(8)\fR (\fIUpgrade to {point release}\fR option). 36 | 37 | \fBmintupdate\fR also provides database updates to \fBmintinstall(8)\fR. 38 | 39 | .SH "AUTHOR" 40 | \fBThe Linux Mint developers\fR 41 | 42 | .SH SEE ALSO 43 | \fBmintupdate-cli(8)\fR, \fBmint-sources(1)\fR, \fBtimeshift-gtk\fR, \fBmintinstall(8)\fR -------------------------------------------------------------------------------- /doc/man/mintupdate-cli.8: -------------------------------------------------------------------------------- 1 | .\" Title : mintupdate-cli 2 | .\" Author : gm10 3 | .\" February, 8 2019 4 | .\" 5 | .\" First parameter, NAME, should be all caps 6 | .\" other parameters are allowed: see man(7), man(1) 7 | .TH MINTUPDATE-CLI 8 "8 February 2019" 8 | .\" Please adjust this date whenever revising the manpage. 9 | .\" 10 | .\" for manpage-specific macros, see man(7) 11 | .SH NAME 12 | mintupdate-cli \- The Linux Mint Update Manager command line interface. 13 | 14 | .SH SYNOPSIS 15 | \fBmintupdate-cli\fR [options] {list | upgrade} 16 | 17 | .SH DESCRIPTION 18 | \fBmintupdate-cli\fR is the command line interface to mintupdate. 19 | .PP 20 | Unless the \fB-h\fR, or \fB--help\fR option is given, one of the commands below must be present: 21 | .PP 22 | \fBlist\fR 23 | .RS 4 24 | list available upgrades 25 | .RE 26 | .PP 27 | \fBupgrade\fR 28 | .RS 4 29 | apply available upgrades 30 | .RE 31 | 32 | .SH OPTIONS 33 | mintupdate-cli accepts the following options: 34 | .TP 35 | \fB-h\fR, \fB--help\fR 36 | Show a help message and exit 37 | .TP 38 | \fB-k\fR, \fB--only-kernel\fR 39 | Only include kernel updates 40 | .TP 41 | \fB-s\fR, \fB--only-security\fR 42 | Only include security updates 43 | .TP 44 | \fB-i IGNORE\fR, \fB--ignore IGNORE\fR 45 | List of updates to ignore (comma-separated list of source package names). 46 | 47 | Note: You can also blacklist updates by adding them to /etc/mintupdate.blacklist, one source package per line. 48 | 49 | To ignore a specific version, use the format package=version. 50 | .TP 51 | \fB-r\fR, \fB--refresh-cache\fR 52 | Refresh the APT cache 53 | .TP 54 | \fB-d\fR, \fB--dry-run\fR 55 | Simulation mode, don't upgrade anything 56 | .TP 57 | \fB-y\fR, \fB--yes\fR 58 | Automatically answer yes to all questions and always install new configuration files (unless you also use "--keep-configuration" option). 59 | .TP 60 | \fB--install-recommends\fR 61 | Install recommended packages regardless of system defaults. 62 | .TP 63 | \fB--keep-configuration\fR 64 | Always keep local changes in configuration files (use with caution). 65 | .TP 66 | \fB-v\fR, \fB--version\fR 67 | Display the current version 68 | 69 | .SH "AUTHOR" 70 | \fBThe Linux Mint developers\fR 71 | 72 | .SH SEE ALSO 73 | \fBmintupdate(8)\fR 74 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/automatic_upgrades.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import os 4 | import subprocess 5 | import time 6 | 7 | if not os.path.exists("/var/lib/linuxmint/mintupdate-automatic-upgrades-enabled"): 8 | exit(0) 9 | 10 | optionsfile = "/etc/mintupdate-automatic-upgrades.conf" 11 | logfile = "/var/log/mintupdate.log" 12 | power_connectfile="/sys/class/power_supply/AC/online" 13 | log = open(logfile, "a") 14 | log.write("\n-- Automatic Upgrade starting %s:\n" % time.strftime('%a %d %b %Y %H:%M:%S %Z')) 15 | log.flush() 16 | 17 | pkla_source = "/usr/share/linuxmint/mintupdate/automation/99-mintupdate-temporary.pkla" 18 | pkla_target = "/etc/polkit-1/localauthority/90-mandatory.d/99-mintupdate-temporary.pkla" 19 | try: 20 | power_supply_file = open(power_connectfile) 21 | powersupply = power_supply_file.read()[0]=='1' 22 | power_supply_file.close() 23 | except: 24 | powersupply = True 25 | log.write(power_connectfile+" not found. Ignore power supply check.") 26 | if powersupply: 27 | try: 28 | # Put shutdown and reboot blocker into place 29 | os.symlink(pkla_source, pkla_target) 30 | except: 31 | pass 32 | 33 | try: 34 | # Parse options file 35 | arguments = [] 36 | if os.path.isfile(optionsfile): 37 | with open(optionsfile) as options: 38 | for line in options: 39 | line = line.strip() 40 | if line and not line.startswith("#"): 41 | arguments.append(line) 42 | 43 | # Run mintupdate-cli through systemd-inhibit 44 | cmd = ["/bin/systemd-inhibit", '--why="Performing automatic updates"', 45 | '--who="Update Manager"', "--what=shutdown", "--mode=block", 46 | "/usr/bin/mintupdate-cli", "upgrade", "--refresh-cache", "--yes"] 47 | cmd.extend(arguments) 48 | subprocess.run(cmd, stdout=log, stderr=log) 49 | 50 | except: 51 | import traceback 52 | log.write("Exception occurred:\n") 53 | log.write(traceback.format_exc()) 54 | 55 | try: 56 | # Remove shutdown and reboot blocker 57 | os.unlink(pkla_target) 58 | except: 59 | pass 60 | 61 | log.write("-- Automatic Upgrade completed\n") 62 | else: 63 | log.write("-- Power supply not connected, abort automatic update.\n") 64 | log.close() 65 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/aliases: -------------------------------------------------------------------------------- 1 | # This file contains the names and descriptions for Mint packages. 2 | # The columns are: package names, update name, update short description, update description 3 | # All columns except for the first one are l10nd via LP/makepot 4 | 5 | mdm ##### mdm ##### _("The display manager.") ##### _("MDM is responsible for the login screen and for opening and closing graphical sessions when users log in or log out.") 6 | 7 | cjs ##### cinnamon-cjs ##### _("The Cinnamon javascript interpreter.") ##### _("Most of the visible components in Cinnamon (panel, menus, applets, desklets) are written in Javascript and interpreted by CJS.") 8 | cinnamon-desktop ##### cinnamon-desktop ##### _("The Cinnamon desktop library.") ##### _("This library is used by Cinnamon. It contains the gsettings schemas as well as utility functions.") 9 | cinnamon-menus ##### cinnamon-menus ##### _("The Cinnamon menus library.") ##### _("This library is used by Cinnamon to load the .desktop files.") 10 | cinnamon-screensaver ##### cinnamon-screensaver ##### _("The Cinnamon screensaver.") ##### _("This package is responsible for the Cinnamon screensaver and screen locker.") 11 | cinnamon-session ##### cinnamon-session ##### _("The Cinnamon session manager.") ##### _("The session manager loads the necessary programs and components after you log in and closes them before you log out.") 12 | cinnamon-settings-daemon ##### cinnamon-settings-daemon ##### _("The Cinnamon settings daemon.") ##### _("The settings daemon sets various parameters and handles everything in the background to provide a smooth Cinnamon experience.") 13 | muffin ##### cinnamon-muffin ##### _("The Cinnamon window manager.") ##### _("Muffin is responsible for window management and compositing.") 14 | nemo ##### cinnamon-nemo ##### _("The Cinnamon file manager.") ##### _("Nemo is used to browse directories, to preview files and to launch applications associated with them. It also handles desktop icons.") 15 | cinnamon ##### cinnamon ##### _("The Cinnamon desktop environment.") ##### _("Cinnamon is a modern Linux desktop which provides advanced innovative features and a traditional user experience.") 16 | -------------------------------------------------------------------------------- /generate_desktop_files: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | DOMAIN = "mintupdate" 4 | PATH = "/usr/share/locale" 5 | 6 | import os, gettext 7 | from mintcommon import additionalfiles 8 | import subprocess 9 | 10 | os.environ['LANGUAGE'] = "en_US.UTF-8" 11 | gettext.install(DOMAIN, PATH) 12 | 13 | prefix = "[Desktop Entry]\n" 14 | 15 | suffix = """Exec=mintupdate 16 | Icon=mintupdate 17 | Terminal=false 18 | Type=Application 19 | Encoding=UTF-8 20 | Categories=Application;System;Settings;XFCE;X-XFCE-SettingsDialog;X-XFCE-SystemSettings; 21 | StartupNotify=false 22 | NotShowIn=KDE; 23 | """ 24 | 25 | name = _("Update Manager") 26 | comment = _("Show and install available updates") 27 | 28 | additionalfiles.generate(DOMAIN, PATH, "usr/share/applications/mintupdate.desktop", prefix, "Update Manager", "Show and install available updates", suffix) 29 | 30 | suffix = """Exec=mintupdate 31 | Icon=mintupdate 32 | Terminal=false 33 | Type=Application 34 | Encoding=UTF-8 35 | Categories=System; 36 | StartupNotify=false 37 | OnlyShowIn=KDE; 38 | """ 39 | 40 | additionalfiles.generate(DOMAIN, PATH, "usr/share/applications/mintupdate-kde.desktop", prefix, "Update Manager", "Show and install available updates", suffix, genericName="Show and install available updates") 41 | 42 | prefix= """ 43 | 46 | 47 | 48 | Linux Mint 49 | https://linuxmint.com/ 50 | 51 | 52 | mintupdate 53 | """ 54 | 55 | suffix = """ 56 | 57 | no 58 | no 59 | auth_admin_keep 60 | 61 | /usr/bin/mintupdate-automation 62 | false 63 | 64 | 65 | """ 66 | 67 | additionalfiles.generate_polkit_policy(DOMAIN, PATH, "usr/share/polkit-1/actions/com.linuxmint.updates.policy", prefix, "Update Manager", suffix) 68 | 69 | locales = [] 70 | cur_dir = os.getcwd() 71 | os.chdir("/usr/share/locale") 72 | lines = subprocess.getoutput("find */LC_MESSAGES/mintupdate.mo") 73 | for line in lines.split("\n"): 74 | line = line.strip().split("/")[0] 75 | locales.append(line) 76 | os.chdir(cur_dir) 77 | 78 | for locale in locales: 79 | os.system("msgunfmt /usr/share/locale/%s/LC_MESSAGES/mintupdate.mo > /tmp/%s.po" % (locale, locale)) 80 | -------------------------------------------------------------------------------- /debian/copyright: -------------------------------------------------------------------------------- 1 | Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: mintupdate 3 | Upstream-Contact: Clement Lefebvre 4 | Source: https://github.com/linuxmint/mintupdate 5 | 6 | Files: * 7 | Copyright: 2007-2015 Clement Lefebvre 8 | License: GPL-3+ 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or (at 12 | your option) any later version. 13 | . 14 | This program is distributed in the hope that it will be useful, but 15 | WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 | General Public License for more details. 18 | . 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | . 22 | On Debian systems, the complete text of the GNU General 23 | Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". 24 | 25 | Files: usr/lib/linuxmint/mintUpdate/proxygsettings.py 26 | Copyright: 2011-2012 Canonical Ltd. 27 | 2014 Erik Devriendt 28 | License: GPL-3 with special exception 29 | This program is free software: you can redistribute it and/or modify it 30 | under the terms of the GNU General Public License version 3, as published 31 | by the Free Software Foundation. 32 | . 33 | This program is distributed in the hope that it will be useful, but 34 | WITHOUT ANY WARRANTY; without even the implied warranties of 35 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 36 | PURPOSE. See the GNU General Public License for more details. 37 | . 38 | You should have received a copy of the GNU General Public License along 39 | with this program. If not, see . 40 | . 41 | In addition, as a special exception, the copyright holders give 42 | permission to link the code of portions of this program with the 43 | OpenSSL library under certain conditions as described in each 44 | individual source file, and distribute linked combinations 45 | including the two. 46 | You must obey the GNU General Public License in all respects 47 | for all of the code used other than OpenSSL. If you modify 48 | file(s) with this exception, you may extend this exception to your 49 | version of the file(s), but you are not obligated to do so. If you 50 | do not wish to do so, delete this exception statement from your 51 | version. If you delete this exception statement from all source 52 | files in the program, then also delete it here. 53 | -------------------------------------------------------------------------------- /usr/bin/mintupdate-automation: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # pylint: disable=E0602 3 | 4 | import json 5 | import os 6 | import sys 7 | import subprocess 8 | from pathlib import Path 9 | 10 | if not os.getuid() == 0: 11 | print("This command needs to be run as root or with sudo.") 12 | sys.exit(1) 13 | 14 | if len(sys.argv) != 3 or sys.argv[1] not in ("upgrade", "autoremove", "blacklist") or sys.argv[2] not in ("enable", "disable"): 15 | print("Bad arguments") 16 | sys.exit(1) 17 | 18 | # import AUTOMATIONS dict 19 | with open("/usr/share/linuxmint/mintupdate/automation/index.json") as f: 20 | AUTOMATIONS = json.load(f) 21 | 22 | automation_id = sys.argv[1] 23 | 24 | def do_enable(_automation_id): 25 | (filename, name, touchfile) = AUTOMATIONS[_automation_id] 26 | if touchfile is not None or sys.argv[1] == "blacklist": 27 | if name == "systemd": 28 | touch = Path(touchfile) 29 | touch.parent.mkdir(parents=True, exist_ok=True) 30 | touch.touch(exist_ok=True) 31 | 32 | basename = os.path.basename(filename) 33 | subprocess.run(["/bin/systemctl", "start", basename]) 34 | subprocess.run(["/bin/systemctl", "enable", basename]) 35 | else: 36 | default = "/usr/share/linuxmint/mintupdate/automation/%s.default" % _automation_id 37 | os.system("cp %s %s" % (default, filename)) 38 | print("%s %s created." % (name, filename)) 39 | if sys.argv[1] == "blacklist": 40 | add_user_blacklist(filename) 41 | 42 | def do_disable(_automation_id): 43 | (filename, name, touchfile) = AUTOMATIONS[_automation_id] 44 | if touchfile is not None: 45 | if name == "systemd": 46 | touch = Path(touchfile) 47 | touch.parent.mkdir(parents=True, exist_ok=True) 48 | touch.unlink(missing_ok=True) 49 | 50 | basename = os.path.basename(filename) 51 | subprocess.run(["/bin/systemctl", "stop", basename]) 52 | subprocess.run(["/bin/systemctl", "disable", basename]) 53 | else: 54 | os.system("rm -f %s" % filename) 55 | print("%s %s removed." % (name, filename)) 56 | 57 | def add_user_blacklist(outfile): 58 | import tempfile 59 | try: 60 | infile = os.path.join(tempfile.gettempdir(), "mintUpdate/blacklist") 61 | with open(infile, "r") as export: 62 | with open(outfile, "a") as f: 63 | for line in export: 64 | f.write(line) 65 | os.remove(infile) 66 | print("User blacklist exported.") 67 | except: 68 | pass 69 | 70 | if sys.argv[2] == "enable": 71 | do_enable(automation_id) 72 | if automation_id == "upgrade": 73 | do_enable("blacklist") 74 | # Enable the cleanup service in case it was disabled manually 75 | subprocess.run(["/bin/systemctl", "enable", "mintupdate-automation-cleanup.service"]) 76 | else: 77 | do_disable(automation_id) 78 | -------------------------------------------------------------------------------- /usr/share/linuxmint/mintupdate/shortcuts.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1 6 | 7 | 8 | 1 9 | shortcuts 10 | 8 11 | 12 | 13 | 1 14 | Window 15 | 16 | 17 | 1 18 | <ctrl>W 19 | Close 20 | 21 | 22 | 23 | 24 | 1 25 | <ctrl>R 26 | Refresh 27 | 28 | 29 | 30 | 31 | 1 32 | <ctrl>I 33 | Install Updates 34 | 35 | 36 | 37 | 38 | 39 | 40 | 1 41 | Selection 42 | 43 | 44 | 1 45 | <ctrl><Shift>A 46 | Clear 47 | 48 | 49 | 50 | 51 | 1 52 | <ctrl>A 53 | Select All 54 | 55 | 56 | 57 | 58 | 1 59 | <ctrl>S 60 | Select Security Updates 61 | 62 | 63 | 64 | 65 | 1 66 | <ctrl>K 67 | Select Kernel Updates 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /usr/share/linuxmint/mintupdate/history.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 400 7 | True 8 | False 9 | False 10 | center 11 | 1000 12 | 500 13 | mintupdate 14 | 15 | 16 | 475 17 | True 18 | False 19 | 12 20 | 12 21 | 22 | 23 | True 24 | True 25 | in 26 | 27 | 28 | True 29 | True 30 | True 31 | True 32 | True 33 | False 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | True 42 | True 43 | 0 44 | 45 | 46 | 47 | 48 | True 49 | False 50 | 15 51 | end 52 | 53 | 54 | Close 55 | True 56 | True 57 | True 58 | 59 | 60 | False 61 | False 62 | 1 63 | 64 | 65 | 66 | 67 | False 68 | True 69 | 1 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-up-to-date-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | Moka Symbolic Icon Theme 23 | 24 | 25 | 26 | Moka Symbolic Icon Theme 28 | 30 | 33 | 37 | 38 | 41 | 45 | 46 | 47 | 51 | 55 | 59 | 63 | 67 | 71 | 75 | 79 | 83 | 87 | 88 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-warning-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 16 | image/svg+xml 17 | 19 | Linux Mint Update Manager - Warning icon 20 | 21 | 22 | 23 | Linux Mint Update Manager - Warning icon 24 | 25 | 28 | 32 | 33 | 34 | 39 | 43 | 47 | 51 | 55 | 59 | 63 | 67 | 71 | 75 | 79 | 80 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-type-flatpak-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 48 | 50 | 51 | 53 | image/svg+xml 54 | 56 | 58 | 59 | 61 | 63 | 65 | 67 | 69 | 71 | 73 | 74 | 75 | 76 | 81 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-type-unstable-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | image/svg+xml 9 | 10 | Gnome Symbolic Icon Theme 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | Gnome Symbolic Icon Theme 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-error-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | Moka Symbolic Icon Theme 23 | 24 | 25 | 26 | Moka Symbolic Icon Theme 28 | 30 | 33 | 37 | 38 | 41 | 45 | 46 | 47 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | 93 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-type-security-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | Moka Symbolic Icon Theme 23 | 24 | 25 | 26 | Moka Symbolic Icon Theme 28 | 30 | 33 | 37 | 38 | 41 | 45 | 46 | 47 | 51 | 55 | 59 | 60 | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | 93 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-checking-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | Moka Symbolic Icon Theme 23 | 24 | 25 | 26 | Moka Symbolic Icon Theme 28 | 30 | 33 | 37 | 38 | 41 | 45 | 46 | 47 | 51 | 55 | 59 | 63 | 67 | 71 | 75 | 79 | 83 | 87 | 91 | 92 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-installing-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | Moka Symbolic Icon Theme 23 | 24 | 25 | 26 | Moka Symbolic Icon Theme 28 | 30 | 33 | 37 | 38 | 41 | 45 | 46 | 47 | 51 | 55 | 59 | 63 | 67 | 71 | 75 | 79 | 83 | 88 | 89 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-type-3rd-party-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | Moka Symbolic Icon Theme 23 | 24 | 25 | 26 | Moka Symbolic Icon Theme 28 | 30 | 33 | 37 | 38 | 41 | 45 | 46 | 47 | 51 | 55 | 59 | 63 | 67 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | 93 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/mintupdate-cli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import argparse 4 | import fnmatch 5 | import os 6 | import subprocess 7 | import sys 8 | import traceback 9 | 10 | from checkAPT import APTCheck 11 | from Classes import PRIORITY_UPDATES 12 | 13 | if __name__ == "__main__": 14 | 15 | def is_blacklisted(blacklisted_packages, source_name, version): 16 | for blacklist in blacklisted_packages: 17 | if "=" in blacklist: 18 | (bl_pkg, bl_ver) = blacklist.split("=", 1) 19 | else: 20 | bl_pkg = blacklist 21 | bl_ver = None 22 | if fnmatch.fnmatch(source_name, bl_pkg) and (not bl_ver or bl_ver == version): 23 | return True 24 | return False 25 | 26 | parser = argparse.ArgumentParser(prog="mintupdate-cli") 27 | parser.add_argument("command", help="command to run (possible commands are: list, upgrade)") 28 | 29 | group = parser.add_mutually_exclusive_group() 30 | group.add_argument("-k", "--only-kernel", action="store_true", help="only include kernel updates") 31 | group.add_argument("-s", "--only-security", action="store_true", help="only include security updates") 32 | parser.add_argument("-i", "--ignore", help="list of updates to ignore (comma-separated list of source package names). Note: You can also blacklist updates by adding them to /etc/mintupdate.blacklist, one source package per line. To ignore a specific version, use the format package=version.") 33 | parser.add_argument("-r", "--refresh-cache", action="store_true", help="refresh the APT cache") 34 | parser.add_argument("-d", "--dry-run", action="store_true", help="simulation mode, don't upgrade anything") 35 | parser.add_argument("-y", "--yes", action="store_true", help="automatically answer yes to all questions and always install new configuration files (unless you also use \"--keep-configuration\" option)") 36 | parser.add_argument("--install-recommends", action="store_true", help="install recommended packages") 37 | parser.add_argument("--keep-configuration", action="store_true", default=False, help="always keep local changes in configuration files (use with caution)") 38 | parser.add_argument("-v", "--version", action="version", version="__DEB_VERSION__", help="Display the current version") 39 | 40 | args = parser.parse_args() 41 | try: 42 | if args.refresh_cache: 43 | subprocess.run("sudo /usr/bin/mint-refresh-cache", shell=True) 44 | check = APTCheck() 45 | check.find_changes() 46 | 47 | blacklisted = [] 48 | if os.path.exists("/etc/mintupdate.blacklist"): 49 | with open("/etc/mintupdate.blacklist") as blacklist_file: 50 | for line in blacklist_file: 51 | line = line.strip() 52 | if line.startswith("#"): 53 | continue 54 | blacklisted.append(line) 55 | if args.ignore: 56 | blacklisted.extend(args.ignore.split(",")) 57 | 58 | updates = [] 59 | for source_name in sorted(check.updates.keys()): 60 | update = check.updates[source_name] 61 | if source_name in PRIORITY_UPDATES: 62 | updates.append(update) 63 | elif args.only_kernel and update.type != "kernel": 64 | continue 65 | elif args.only_security and update.type != "security": 66 | continue 67 | elif is_blacklisted(blacklisted, update.real_source_name, update.new_version): 68 | continue 69 | else: 70 | updates.append(update) 71 | 72 | if args.command == "list": 73 | for update in updates: 74 | print ("%-15s %-45s %s" % (update.type, update.source_name, update.new_version)) 75 | elif args.command == "upgrade": 76 | packages = [] 77 | for update in updates: 78 | packages += update.package_names 79 | arguments = ["apt-get", "install"] 80 | if args.dry_run: 81 | arguments.append("--simulate") 82 | if args.yes: 83 | environment = os.environ 84 | environment.update({"DEBIAN_FRONTEND": "noninteractive"}) 85 | arguments.append("--assume-yes") 86 | if not args.keep_configuration: 87 | arguments.extend(["--option", "Dpkg::Options::=--force-confnew"]) 88 | else: 89 | environment = None 90 | if args.install_recommends: 91 | arguments.append("--install-recommends") 92 | if args.keep_configuration: 93 | arguments.extend(["--option", "Dpkg::Options::=--force-confold"]) 94 | subprocess.call(arguments + packages, env=environment) 95 | except: 96 | traceback.print_exc() 97 | sys.exit(1) 98 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/proxygsettings.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright 2011-2012 Canonical Ltd. 4 | # Copyright 2014 Erik Devriendt 5 | # 6 | # This program is free software: you can redistribute it and/or modify it 7 | # under the terms of the GNU General Public License version 3, as published 8 | # by the Free Software Foundation. 9 | # 10 | # This program is distributed in the hope that it will be useful, but 11 | # WITHOUT ANY WARRANTY; without even the implied warranties of 12 | # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 13 | # PURPOSE. See the GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License along 16 | # with this program. If not, see . 17 | # 18 | # In addition, as a special exception, the copyright holders give 19 | # permission to link the code of portions of this program with the 20 | # OpenSSL library under certain conditions as described in each 21 | # individual source file, and distribute linked combinations 22 | # including the two. 23 | # You must obey the GNU General Public License in all respects 24 | # for all of the code used other than OpenSSL. If you modify 25 | # file(s) with this exception, you may extend this exception to your 26 | # version of the file(s), but you are not obligated to do so. If you 27 | # do not wish to do so, delete this exception statement from your 28 | # version. If you delete this exception statement from all source 29 | # files in the program, then also delete it here. 30 | """Retrieve the proxy configuration from Gnome.""" 31 | 32 | import subprocess 33 | 34 | 35 | GSETTINGS_CMDLINE = "gsettings list-recursively org.gnome.system.proxy" 36 | CANNOT_PARSE_WARNING = "Cannot parse gsettings value: %r" 37 | 38 | 39 | def parse_proxy_hostspec(hostspec): 40 | """Parse the hostspec to get protocol, hostname, username and password.""" 41 | protocol = None 42 | username = None 43 | password = None 44 | hostname = hostspec 45 | 46 | if "://" in hostname: 47 | protocol, hostname = hostname.split("://", 1) 48 | if "@" in hostname: 49 | username, hostname = hostname.rsplit("@", 1) 50 | if ":" in username: 51 | username, password = username.split(":", 1) 52 | return protocol, hostname, username, password 53 | 54 | 55 | def proxy_url_from_settings(scheme, gsettings): 56 | """Build and return the proxy URL for the given scheme, based on the gsettings.""" 57 | protocol, host, username, pwd = parse_proxy_hostspec(gsettings[scheme + ".host"]) 58 | # if the user did not set a proxy for a type (http/https/ftp) we should 59 | # return None to ensure that it is not used 60 | if host == '': 61 | return None 62 | 63 | port = gsettings[scheme + ".port"] 64 | 65 | if scheme == "http" and gsettings["http.use-authentication"]: 66 | username = gsettings["http.authentication-user"] 67 | pwd = gsettings["http.authentication-password"] 68 | 69 | proxy_url = "%s:%d" % (host,port) 70 | if username is not None: 71 | if pwd is not None: 72 | proxy_url = "%s:%s@%s" % (username,pwd,proxy_url) 73 | else: 74 | proxy_url = "%s@%s" % (username,proxy_url) 75 | 76 | if protocol is not None: 77 | proxy_url = "%s://%s" % (protocol, proxy_url) 78 | 79 | return proxy_url 80 | 81 | def get_proxy_settings(): 82 | """Parse the proxy settings as returned by the gsettings executable 83 | and return a dictionary with a proxy URL for each scheme .""" 84 | output = subprocess.check_output(GSETTINGS_CMDLINE.split()).decode("utf-8") 85 | gsettings = {} 86 | base_len = len("org.gnome.system.proxy.") 87 | # pylint: disable=E1103 88 | for line in output.split("\n"): 89 | try: 90 | path, key, value = line.split(" ", 2) 91 | except ValueError: 92 | continue 93 | if value.startswith("'"): 94 | parsed_value = value[1:-1] 95 | elif value.startswith(('[', '@')): 96 | parsed_value = value 97 | elif value in ('true', 'false'): 98 | parsed_value = (value == 'true') 99 | elif value.isdigit(): 100 | parsed_value = int(value) 101 | else: 102 | print(CANNOT_PARSE_WARNING % value) 103 | parsed_value = value 104 | relative_key = (path + "." + key)[base_len:] 105 | gsettings[relative_key] = parsed_value 106 | mode = gsettings["mode"] 107 | settings = {} 108 | if mode == "manual": 109 | for scheme in ["http", "https"]: 110 | scheme_settings = proxy_url_from_settings(scheme, gsettings) 111 | if scheme_settings is not None: 112 | settings[scheme] = scheme_settings 113 | # If mode is automatic the PAC javascript should be interpreted 114 | # on each request. That is out of scope so it's ignored for now 115 | 116 | return settings 117 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/rel_upgrade_root.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import apt 4 | import aptkit.simpleclient 5 | import gettext 6 | import gi 7 | import os 8 | import subprocess 9 | import sys 10 | 11 | gi.require_version('Gtk', '3.0') 12 | from gi.repository import Gtk 13 | 14 | gettext.install("mintupdate", "/usr/share/locale") 15 | 16 | if os.getuid() != 0: 17 | print("Run this code as root!") 18 | sys.exit(1) 19 | 20 | if len(sys.argv) != 2: 21 | print("Missing arguments!") 22 | sys.exit(1) 23 | 24 | codename = sys.argv[1] 25 | sources_list = f"/usr/share/mint-upgrade-info/{codename}/official-package-repositories.list" 26 | if not os.path.exists(sources_list): 27 | print("Unrecognized release: %s" % codename) 28 | sys.exit(1) 29 | 30 | def file_to_list(filename): 31 | returned_list = [] 32 | if os.path.exists(filename): 33 | with open(filename, 'r') as file_handle: 34 | for line in file_handle: 35 | line = line.strip() 36 | if line == "" or line.startswith("#"): 37 | continue 38 | returned_list.append(line) 39 | return returned_list 40 | 41 | class Upgrader(): 42 | 43 | def __init__(self): 44 | self.refresh_done = False 45 | self.client = aptkit.simpleclient.SimpleAPTClient() 46 | self.additions = file_to_list(f"/usr/share/mint-upgrade-info/{codename}/additions") 47 | self.removals = file_to_list(f"/usr/share/mint-upgrade-info/{codename}/removals") 48 | self.blacklist = file_to_list(f"/usr/share/mint-upgrade-info/{codename}/blacklist") 49 | 50 | def run(self): 51 | self.update_cache() 52 | 53 | def update_cache(self): 54 | # STEP 1: UPDATE APT SOURCES 55 | if os.path.exists("/etc/apt/sources.list.d/official-source-repositories.list"): 56 | subprocess.run(["rm", "-f", "/etc/apt/sources.list.d/official-source-repositories.list"]) 57 | subprocess.run(["cp", sources_list, "/etc/apt/sources.list.d/official-package-repositories.list"]) 58 | 59 | # STEP 2: UPDATE APT CACHE 60 | self.client.set_finished_callback(self.on_cache_updated) 61 | self.client.update_cache() 62 | 63 | def on_cache_updated(self, transaction=None, exit_state=None): 64 | # STEP 3: INSTALL MINT UPDATES 65 | cache = apt.Cache() 66 | cache.open(None) 67 | cache.upgrade(True) 68 | packages = [] 69 | for pkg in cache.get_changes(): 70 | # upgradeable.. 71 | if pkg.is_installed and pkg.marked_upgrade: 72 | # not in blacklist.. 73 | if pkg.candidate.source_name not in self.blacklist: 74 | # with a new version.. 75 | if (pkg.candidate.version != pkg.installed.version): 76 | # from the Mint repos.. 77 | for origin in pkg.candidate.origins: 78 | if origin.origin == "linuxmint": 79 | if origin.component != "romeo" and pkg.name != "linux-kernel-generic": 80 | packages.append(pkg.name) 81 | 82 | if len(packages) > 0: 83 | self.client.set_finished_callback(self.on_install_finished) 84 | self.client.install_packages(packages) 85 | else: 86 | self.on_install_finished() 87 | 88 | def on_install_finished(self, transaction=None, exit_state=None): 89 | # STEP 4: ADD PACKAGES 90 | if len(self.additions) > 0: 91 | self.client.set_finished_callback(self.on_additions_finished) 92 | self.client.install_packages(self.additions) 93 | else: 94 | self.on_additions_finished() 95 | 96 | def on_additions_finished(self, transaction=None, exit_state=None): 97 | # STEP 5: REMOVE PACKAGES 98 | removals = [] 99 | cache = apt.Cache() 100 | cache.open(None) 101 | for name in self.removals: 102 | if name in cache and cache[name].is_installed: 103 | removals.append(name) 104 | if len(removals) > 0: 105 | self.client.set_finished_callback(self.on_removals_finished) 106 | self.client.remove_packages(removals) 107 | else: 108 | self.on_removals_finished() 109 | 110 | def on_removals_finished(self, transaction=None, exit_state=None): 111 | # STEP 6: UPDATE GRUB 112 | try: 113 | subprocess.run(["update-grub"]) 114 | if os.path.exists("/usr/share/ubuntu-system-adjustments/systemd/adjust-grub-title"): 115 | subprocess.run(["/usr/share/ubuntu-system-adjustments/systemd/adjust-grub-title"]) 116 | except Exception as detail: 117 | syslog.syslog("Couldn't update grub: %s" % detail) 118 | Gtk.main_quit() 119 | sys.exit(0) 120 | 121 | if __name__ == "__main__": 122 | upgrader =Upgrader() 123 | upgrader.run() 124 | Gtk.main() -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-updates-available-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | Moka Symbolic Icon Theme 23 | 24 | 25 | 26 | Moka Symbolic Icon Theme 28 | 30 | 33 | 37 | 38 | 41 | 45 | 46 | 47 | 51 | 55 | 59 | 63 | 67 | 71 | 75 | 79 | 83 | 89 | 93 | 97 | 98 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/checkKernels.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | import os 3 | import re 4 | import sys 5 | 6 | import apt 7 | 8 | from Classes import (CONFIGURED_KERNEL_TYPE, SUPPORTED_KERNEL_TYPES, 9 | KernelVersion, get_release_dates) 10 | 11 | if len(sys.argv) > 1 and sys.argv[1] in SUPPORTED_KERNEL_TYPES: 12 | CONFIGURED_KERNEL_TYPE = sys.argv[1] 13 | 14 | release_dates = None 15 | try: 16 | current_version = os.uname().release 17 | cache = apt.Cache() 18 | signed_kernels = [''] 19 | local_kernels = {} 20 | r = re.compile(r'^(?:linux-image-)(?:unsigned-)?(\d.+?)(%s)$' % "|".join(SUPPORTED_KERNEL_TYPES)) 21 | for pkg_name in cache.keys(): 22 | installed = 0 23 | used = 0 24 | installable = 0 25 | pkg_version = "" 26 | pkg_match = r.match(pkg_name) 27 | if pkg_match: 28 | pkg = cache[pkg_name] 29 | pkg_data = None 30 | if pkg.candidate: 31 | pkg_data = pkg.candidate 32 | elif pkg.installed: 33 | pkg_data = pkg.installed 34 | else: 35 | continue 36 | version = pkg_match.group(1) 37 | kernel_type = pkg_match.group(2) 38 | full_version = version + kernel_type 39 | if pkg.is_installed: 40 | installed = 1 41 | pkg_version = pkg.installed.version 42 | else: 43 | # only offer to install same-type kernels 44 | if kernel_type != CONFIGURED_KERNEL_TYPE: 45 | continue 46 | if pkg.candidate and pkg.candidate.downloadable: 47 | installable = 1 48 | pkg_version = pkg.candidate.version 49 | # filter duplicates (unsigned kernels where signed exists) 50 | if full_version in signed_kernels: 51 | continue 52 | signed_kernels.append(full_version) 53 | if full_version == current_version: 54 | used = 1 55 | 56 | # provide a representation of the version which helps sorting the kernels 57 | versions = KernelVersion(pkg_version).version_id 58 | 59 | if not pkg_data.origins[0].origin: 60 | origin = 0 61 | elif pkg_data.origins[0].origin == 'Ubuntu': 62 | origin = 1 63 | else: 64 | origin = 2 65 | 66 | archive = pkg_data.origins[0].archive 67 | 68 | # get support duration 69 | supported_tag = pkg_data.record.get("Supported") 70 | if not supported_tag and origin == 1 and "-proposed" not in pkg_data.origins[0].archive: 71 | # Workaround for Ubuntu releasing kernels by copying straight from 72 | # -proposed and only adding the Supported tag shortly after. 73 | # To avoid user confusion in the time in-between we just assume 74 | # that all Ubuntu kernels in all pockets but -proposed are supported 75 | # and generate the supported tag based on the distro support duration 76 | if not release_dates: 77 | release_dates = get_release_dates() 78 | distro = pkg.candidate.origins[0].archive.split("-")[0] 79 | if distro in release_dates: 80 | distro_lifetime = (release_dates[distro][1].year - release_dates[distro][0].year) * 12 +\ 81 | release_dates[distro][1].month - release_dates[distro][0].month 82 | if distro_lifetime >= 12: 83 | supported_tag = "%sy" % (distro_lifetime // 12) 84 | else: 85 | supported_tag = "%sm" % distro_lifetime 86 | if supported_tag: 87 | if supported_tag.endswith("y"): 88 | # override support duration for HWE kernels in LTS releases, 89 | # these will be handled by the kernel window 90 | if "-hwe" in pkg_data.source_name: 91 | support_duration = -1 92 | else: 93 | support_duration = int(supported_tag[:-1]) * 12 94 | elif supported_tag.endswith("m"): 95 | support_duration = int(supported_tag[:-1]) 96 | else: 97 | # unexpected support tag 98 | support_duration = 0 99 | else: 100 | # unsupported 101 | support_duration = 0 102 | 103 | resultString = "KERNEL###%s###%s###%s###%s###%s###%s###%s###%s###%s###%s" % \ 104 | (".".join(versions), version, pkg_version, installed, used, installable, 105 | origin, archive, support_duration, kernel_type) 106 | print(resultString.encode("utf-8").decode('ascii', 'xmlcharrefreplace')) 107 | 108 | except Exception as e: 109 | print("ERROR###ERROR###ERROR###ERROR") 110 | print("%s: %s\n" % (e.__class__.__name__, e), file=sys.stderr) 111 | sys.exit(1) 112 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/flatpakUpdater.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import os 4 | import json 5 | import subprocess 6 | import sys 7 | 8 | import gi 9 | gi.require_version('GLib', '2.0') 10 | from gi.repository import GLib 11 | 12 | try: 13 | if not GLib.find_program_in_path("flatpak"): 14 | raise Exception 15 | gi.require_version('Flatpak', '1.0') 16 | from gi.repository import Flatpak 17 | except Exception: 18 | print("No Flatpak support - are flatpak and gir1.2-flatpak-1.0 installed?") 19 | raise NotImplementedError 20 | 21 | from Classes import FlatpakUpdate 22 | 23 | LOG_PATH = os.path.join(GLib.get_home_dir(), '.linuxmint', 'mintupdate', 'flatpak-updates.log') 24 | UPDATE_WORKER_PATH = "/usr/lib/linuxmint/mintUpdate/flatpak-update-worker.py" 25 | 26 | class FlatpakUpdater(): 27 | def __init__(self): 28 | self.task = None 29 | 30 | self.updates = [] 31 | self.error = None 32 | 33 | def refresh(self): 34 | self.kill_any_helpers() 35 | 36 | try: 37 | subprocess.run([UPDATE_WORKER_PATH, "--refresh"], timeout = 30, stdout=subprocess.DEVNULL) 38 | except subprocess.TimeoutExpired as e: 39 | print("Flatpaks: timed out trying to refresh", str(e)) 40 | 41 | def fetch_updates(self): 42 | self.updates = [] 43 | output = None 44 | 45 | try: 46 | output = subprocess.run([UPDATE_WORKER_PATH, "--fetch-updates"], timeout=45, stdout=subprocess.PIPE, encoding="utf-8").stdout 47 | except subprocess.TimeoutExpired as e: 48 | print("Flatpaks: timed out trying to get a list of updates", str(e)) 49 | 50 | # print(output) 51 | 52 | if output is None: 53 | print("Flatpaks: no updates") 54 | return 55 | 56 | output = output.strip("\n") 57 | 58 | if output == "no-installed": 59 | print("Flatpaks: skipping update check - nothing installed") 60 | return 61 | 62 | if output.startswith("error:"): 63 | self.error = output[6:] 64 | print("Flatpaks: error from fetch-updates call", self.error) 65 | return 66 | 67 | try: 68 | json_data = json.loads(output) 69 | for item in json_data: 70 | self.updates.append(FlatpakUpdate.from_json(item)) 71 | except json.JSONDecodeError as e: 72 | print("Flatpaks: unable to parse updates list", str(e)) 73 | 74 | print("Flatpak: done generating updates") 75 | 76 | def prepare_start_updates(self, updates): 77 | argv = [UPDATE_WORKER_PATH, "--update-packages"] + [update.ref.format_ref() for update in updates] 78 | 79 | try: 80 | self.proc = subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subprocess.PIPE, encoding="utf-8") 81 | except Exception as e: 82 | print("Flatpak: Could not start worker: %s" % str(e)) 83 | return False 84 | 85 | self.out_pipe = self.proc.stdout 86 | self.in_pipe = self.proc.stdin 87 | 88 | try: 89 | res = self.out_pipe.readline() 90 | if res: 91 | answer = res.strip("\n") 92 | if answer == "ready": 93 | return 94 | else: 95 | raise Exception("Unexpected response from worker - expected 'ready', got '%s'" % answer) 96 | except Exception as e: 97 | print("Flatpak: Could not set up to install updates: %s", str(e)) 98 | self.terminate_helper() 99 | 100 | def perform_updates(self): 101 | try: 102 | self.in_pipe.write("start") 103 | self.in_pipe.flush() 104 | 105 | res = self.out_pipe.readline() 106 | if res: 107 | answer = res.strip("\n") 108 | if answer == "done": 109 | print("Flatpaks: updates complete") 110 | elif answer.startswith("error:"): 111 | self.error = answer[6:] 112 | print("Flatpaks: error performing updates: %s" % self.error) 113 | except Exception as e: 114 | print("Flatpak: Could not perform updates: %s", str(e)) 115 | 116 | self.terminate_helper() 117 | 118 | def terminate_helper(self): 119 | if self.proc is None: 120 | return 121 | 122 | try: 123 | self.in_pipe.close() 124 | self.out_pipe.close() 125 | except: 126 | pass 127 | 128 | self.proc.terminate() 129 | try: 130 | if self.error is not None: 131 | self.proc.wait() # Error dialog happening 132 | else: 133 | self.proc.wait(5) 134 | except subprocess.TimeoutExpired: 135 | self.proc.kill() 136 | 137 | self.proc = None 138 | 139 | def kill_any_helpers(self): 140 | try: 141 | os.system("killall -q flatpak-update-worker") 142 | except Exception as e: 143 | print (e) 144 | print(sys.exc_info()[0]) 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | -------------------------------------------------------------------------------- /usr/bin/mintupdate-launcher: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | from functools import wraps 3 | import errno 4 | import gettext 5 | import gi 6 | import locale 7 | import os 8 | import signal 9 | import subprocess 10 | import time 11 | import xapp.os 12 | gi.require_version('Notify', '0.7') 13 | from gi.repository import GLib, Gio, Notify 14 | 15 | # i18n 16 | APP = 'mintupdate' 17 | LOCALE_DIR = "/usr/share/locale" 18 | locale.bindtextdomain(APP, LOCALE_DIR) 19 | gettext.bindtextdomain(APP, LOCALE_DIR) 20 | gettext.textdomain(APP) 21 | _ = gettext.gettext 22 | 23 | Notify.init(_("Update Manager")) 24 | 25 | class TimeoutError(Exception): 26 | pass 27 | 28 | # Limit the amount of time a function can run 29 | def timeout(seconds=10, error_message=os.strerror(errno.ETIME)): 30 | def decorator(func): 31 | def _handle_timeout(signum, frame): 32 | raise TimeoutError(error_message) 33 | 34 | def wrapper(*args, **kwargs): 35 | signal.signal(signal.SIGALRM, _handle_timeout) 36 | signal.alarm(seconds) 37 | try: 38 | result = func(*args, **kwargs) 39 | finally: 40 | signal.alarm(0) 41 | return result 42 | 43 | return wraps(func)(wrapper) 44 | 45 | return decorator 46 | 47 | @timeout(600) 48 | def update_cinnamon_spices(): 49 | if os.path.exists("/usr/bin/cinnamon"): 50 | print("Updating Cinnamon Spices") 51 | try: 52 | import cinnamon 53 | updater = cinnamon.UpdateManager() 54 | updater.refresh_all_caches() 55 | updates = updater.get_updates() 56 | if len(updates) > 0: 57 | msg = _("The following spices were automatically updated:") 58 | msg = msg + "\n" 59 | for update in updates: 60 | updater.upgrade(update) 61 | msg += "\n- %s (%s)" % (update.uuid, update.spice_type) 62 | 63 | if xapp.os.is_desktop_cinnamon(): 64 | subprocess.call(["cinnamon-dbus-command", "RestartCinnamon", "0"]) 65 | time.sleep(10) # Give cinnamon some time, otherwise it won't show our notification. 66 | notification_title = _("Cinnamon was restarted") 67 | notification = Notify.Notification.new(notification_title, msg, "cinnamon-symbolic") 68 | notification.set_urgency(2) 69 | notification.set_timeout(Notify.EXPIRES_NEVER) 70 | notification.show() 71 | except Exception as e: 72 | print("An error occurred while updating cinnamon spices: %s" % e) 73 | 74 | @timeout(600) 75 | def process_flatpaks(): 76 | if os.path.exists("/usr/bin/flatpak"): 77 | # Remove unused flatpak runtimes. Do it before updating so we're not updating unused 78 | # runtimes unnecessarily. 79 | 80 | try: 81 | print("Purging unused flatpaks") 82 | out = subprocess.run( 83 | [ 84 | "flatpak", "uninstall", "--unused", "-y" 85 | ], 86 | stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 87 | print(out.stdout.decode()) 88 | except Exception as e: 89 | print("An error occurred while purging unused flatpaks: %s" % e) 90 | 91 | if settings.get_boolean("auto-update-flatpaks"): 92 | print("Updating flatpaks") 93 | try: 94 | # Update flatpaks 95 | out = subprocess.run( 96 | [ 97 | "flatpak", "update", "-y" 98 | ], 99 | stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 100 | print(out.stdout.decode()) 101 | except Exception as e: 102 | print("An error occurred while updating flatpaks: %s" % e) 103 | 104 | # Install theme if needed 105 | try: 106 | gi.require_version('Flatpak', '1.0') 107 | from gi.repository import Flatpak 108 | from mintcommon.installer import _flatpak 109 | 110 | theme_refs = _flatpak.get_updated_theme_refs() 111 | if theme_refs is not None: 112 | print("Installing new theme to match local theme") 113 | for ref in theme_refs: 114 | out = subprocess.run( 115 | [ 116 | "flatpak", "install", "-y", "--system", 117 | ref.get_remote_name(), ref.get_name() 118 | ], 119 | stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 120 | print(out.stdout.decode()) 121 | except Exception as e: 122 | print("An error occurred checking for a new flatpak theme: %s" % e) 123 | 124 | if __name__ == "__main__": 125 | if os.getuid() == 0: 126 | print("Error: Do not run this as root") 127 | exit(1) 128 | 129 | if ((not xapp.os.is_live_session()) and (not xapp.os.is_guest_session())): 130 | settings = Gio.Settings(schema_id="com.linuxmint.updates") 131 | # Update Cinnamon spices 132 | if settings.get_boolean("auto-update-cinnamon-spices"): 133 | update_cinnamon_spices() 134 | # Update and auto-remove flatpaks 135 | process_flatpaks() 136 | # Launch mintupdate 137 | os.system("/usr/lib/linuxmint/mintUpdate/mintUpdate.py &") 138 | -------------------------------------------------------------------------------- /etc/xdg/autostart/mintupdate.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Encoding=UTF-8 3 | Name=Update Manager 4 | Name[af]=Opdateringsbestuurder 5 | Name[am]=የማሻሻያ አስተዳዳሪ 6 | Name[ar]=مدير التحديث 7 | Name[ar_AR]=مدير التحديث 8 | Name[ar_MA]=مدير التحديث 9 | Name[ast]=Xestor d'anovamientos 10 | Name[az]=Yeniləmə İdarəçisi 11 | Name[be]=Кіраўнік абнаўленняў 12 | Name[be@latin]=Кіраўнік абнаўленняў 13 | Name[bg]=Диспечер на актуализациите 14 | Name[bg_BG]=Диспечер на актуализациите 15 | Name[bn]=আপডেট ব্যবস্থাপক 16 | Name[bn_BD]=আপডেট ব্যবস্থাপক 17 | Name[bn_IN]=আপডেট ব্যবস্থাপক 18 | Name[bs]=Menadžer nadogradnji 19 | Name[ca]=Gestor d'actualitzacions 20 | Name[ca@valencia]=Gestor d'actualitzacions 21 | Name[ca_ES@valencia]=Gestor d'actualitzacions 22 | Name[cs]=Správa aktualizací 23 | Name[cs_CZ]=Správa aktualizací 24 | Name[csb]=Menedżera aktualizacëji 25 | Name[cy]=Rheolwr Diweddaru 26 | Name[da]=Opdateringshåndtering 27 | Name[de]=Aktualisierungsverwaltung 28 | Name[de_CH]=Aktualisierungsverwaltung 29 | Name[de_DE]=Aktualisierungsverwaltung 30 | Name[el]=Διαχειριστής Ενημερώσεων 31 | Name[eo]=Ĝisdatiga mastrumilo 32 | Name[es]=Administrador de actualizaciones 33 | Name[es_419]=Administrador de actualizaciones 34 | Name[es_AR]=Administrador de actualizaciones 35 | Name[es_CL]=Administrador de actualizaciones 36 | Name[es_CO]=Administrador de actualizaciones 37 | Name[es_CR]=Administrador de actualizaciones 38 | Name[es_DO]=Administrador de actualizaciones 39 | Name[es_EC]=Administrador de actualizaciones 40 | Name[es_ES]=Administrador de actualizaciones 41 | Name[es_MX]=Administrador de actualizaciones 42 | Name[es_NI]=Administrador de actualizaciones 43 | Name[es_PA]=Administrador de actualizaciones 44 | Name[es_PE]=Administrador de actualizaciones 45 | Name[es_PR]=Administrador de actualizaciones 46 | Name[es_SV]=Administrador de actualizaciones 47 | Name[es_US]=Administrador de actualizaciones 48 | Name[es_UY]=Administrador de actualizaciones 49 | Name[es_VE]=Administrador de actualizaciones 50 | Name[et]=Uuendamishaldur 51 | Name[eu]=Eguneraketa-kudeatzailea 52 | Name[fa]=مدیر به‌روزرسانی 53 | Name[fa_AF]=مدیر به‌روزرسانی 54 | Name[fa_IR]=مدیر به‌روزرسانی 55 | Name[fi]=Päivitysten hallinta 56 | Name[fi_FI]=Päivitysten hallinta 57 | Name[fil]=Tagapamahala ng Update 58 | Name[fo]=Dagføringa fyrisiting 59 | Name[fr]=Gestionnaire de mises à jour 60 | Name[fr_CA]=Gestionnaire de mises à jour 61 | Name[fr_FR]=Gestionnaire de mises à jour 62 | Name[ga]=Bainisteoir Nuashonraithe 63 | Name[gd]=Manaidsear nan ùrachaidhean 64 | Name[gl]=Xestor de actualizacións 65 | Name[gl_ES]=Xestor de actualizacións 66 | Name[gv]=Reireyder stoo noa 67 | Name[he]=מנהל עדכונים 68 | Name[he_IL]=מנהל עדכונים 69 | Name[hi]=अपडेट मैनेजर 70 | Name[hr]=Upravitelj nadopuna 71 | Name[hu]=Frissítéskezelő 72 | Name[hu_HU]=Frissítéskezelő 73 | Name[ia]=Gestor de actualisation 74 | Name[id]=Manajer Pembaruan 75 | Name[id_ID]=Manajer Pembaruan 76 | Name[is]=Uppfærslustjóri 77 | Name[it]=Gestore Aggiornamenti 78 | Name[it_IT]=Gestore Aggiornamenti 79 | Name[ja]=アップデートマネージャ 80 | Name[ja_JP]=アップデートマネージャ 81 | Name[jv]=Penglola penganyaran 82 | Name[kk]=Жаңарту менеджері 83 | Name[km]=កម្មវិធី​គ្រប់គ្រង​បច្ចុប្បន្នភាព 84 | Name[km_KH]=កម្មវិធី​គ្រប់គ្រង​បច្ចុប្បន្នភាព 85 | Name[ko]=업데이트 매니저 86 | Name[ko_KR]=업데이트 매니저 87 | Name[ku]=Rêveberiya Rojanekirinê 88 | Name[ku_IQ]=Rêveberiya Rojanekirinê 89 | Name[ky]=Жаңылоо менеджери 90 | Name[lt]=Atnaujinimų tvarkytuvė 91 | Name[lt_LT]=Atnaujinimų tvarkytuvė 92 | Name[lv]=Atjauninājumu pārvaldnieks 93 | Name[lv_LV]=Atjauninājumu pārvaldnieks 94 | Name[mk]=Менаџер за надградба 95 | Name[mk_MK]=Менаџер за надградба 96 | Name[ml]=അപ്‌ഡേറ്റ് മാനേജർ 97 | Name[mr]=अद्ययावतीकरण प्रबंधक 98 | Name[ms]=Pengurus Kemaskini 99 | Name[ms_MY]=Pengurus Kemaskini 100 | Name[nb]=Oppdateringsbehandler 101 | Name[nb_NO]=Oppdateringsbehandler 102 | Name[nds]=Aktualisierungsverwaltung 103 | Name[ne]=उप्डेट म्यानेजर 104 | Name[nl]=Bijwerkbeheer 105 | Name[nl_NL]=Bijwerkbeheer 106 | Name[nn]=Oppdateringshandsamar 107 | Name[nn_NO]=Oppdateringshandsamar 108 | Name[oc]=Gestionari de mesas a jorn 109 | Name[pa]=ਅੱਪਡੇਟ ਮੈਨੇਜਰ 110 | Name[pl]=Menedżer aktualizacji 111 | Name[pl_PL]=Menedżer aktualizacji 112 | Name[pt]=Gestor de Atualizações 113 | Name[pt_BR]=Gerenciador de Atualizações 114 | Name[pt_PT]=Gestor de Atualizações 115 | Name[ro]=Administrator de actualizări 116 | Name[ro_RO]=Administrator de actualizări 117 | Name[ru]=Менеджер обновлений 118 | Name[si]=යාවත්කාල කිරීම කළමනාකරනය 119 | Name[sk]=Správca aktualizácií 120 | Name[sk_SK]=Správca aktualizácií 121 | Name[sl]=Upravljalnik posodobitev 122 | Name[sl_SI]=Upravljalnik posodobitev 123 | Name[so]=Agaasime Dalacsiiyaha 124 | Name[sq]=Menaxhuesi i Përditësimeve 125 | Name[sr]=Управник ажурирања 126 | Name[sr@Latn]=Upravnik ažuriranja 127 | Name[sr@cyrillic]=Управник ажурирања 128 | Name[sr@ije]=Управник ажурирања 129 | Name[sr@ijekavianlatin]=Управник ажурирања 130 | Name[sr@latin]=Upravnik ažuriranja 131 | Name[sr_RS]=Управник ажурирања 132 | Name[sr_RS@latin]=Upravnik ažuriranja 133 | Name[sv]=Uppdateringshanterare 134 | Name[ta]=மேம்பாட்டு நிர்வகிப்பான் 135 | Name[ta_LK]=மேம்பாட்டு நிர்வகிப்பான் 136 | Name[te]=నవీకరణ నిర్వాహకం 137 | Name[tg]=Мудири навсозиҳо 138 | Name[th]=โปรแกรมจัดการการปรับปรุง 139 | Name[th_TH]=โปรแกรมจัดการการปรับปรุง 140 | Name[tl]=Tagapamahala ng Update 141 | Name[tr]=Güncelleme Yöneticisi 142 | Name[uk]=Менеджер оновлень 143 | Name[uk_UA]=Менеджер оновлень 144 | Name[ur]=اپڈیٹ منتظم 145 | Name[ur_PK]=اپڈیٹ منتظم 146 | Name[vi]=Trình Quản lý Cập nhật 147 | Name[vi_VN]=Trình Quản lý Cập nhật 148 | Name[zh_CN]=更新管理器 149 | Name[zh_HK]=更新管理員 150 | Name[zh_TW]=更新管理員 151 | Comment=Linux Mint Update Manager 152 | Icon=mintupdate 153 | Exec=mintupdate-launcher 154 | Terminal=false 155 | Type=Application 156 | Categories= 157 | X-GNOME-Autostart-Delay=20 158 | X-MATE-Autostart-Delay=20 159 | -------------------------------------------------------------------------------- /usr/share/polkit-1/actions/com.linuxmint.updates.policy: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | Linux Mint 8 | https://linuxmint.com/ 9 | 10 | 11 | mintupdate 12 | Update Manager 13 | Opdateringsbestuurder 14 | የማሻሻያ አስተዳዳሪ 15 | مدير التحديث 16 | Xestor d'anovamientos 17 | Yeniləmə İdarəçisi 18 | Кіраўнік абнаўленняў 19 | Диспечер на актуализациите 20 | আপডেট ব্যবস্থাপক 21 | Ardoer hizivadurioù 22 | Menadžer nadogradnji 23 | Gestor d'actualitzacions 24 | Gestor d'actualitzacions 25 | Správa aktualizací 26 | Menedżera aktualizacëji 27 | Rheolwr Diweddaru 28 | Opdateringshåndtering 29 | Aktualisierungsverwaltung 30 | Διαχειριστής Ενημερώσεων 31 | Ĝisdatiga mastrumilo 32 | Gestor de actualizaciones 33 | Uuendamishaldur 34 | Eguneraketa-kudeatzailea 35 | مدیر به‌روزرسانی 36 | Päivitysten hallinta 37 | Tagapamahala ng Update 38 | Dagføringa fyrisiting 39 | Gestionnaire de mise à jour 40 | Gestionnaire de mise à jour 41 | Bainisteoir Nuashonraithe 42 | Manaidsear nan ùrachaidhean 43 | Xestor de actualizacións 44 | Reireyder stoo noa 45 | מנהל עדכונים 46 | अपडेट मैनेजर 47 | Upravitelj nadopuna 48 | Frissítéskezelő 49 | Gestor de actualisation 50 | Manajer Pembaruan 51 | Gerente de actualisamentes 52 | Uppfærslustjóri 53 | Gestore aggiornamenti 54 | アップデートマネージャー 55 | Penglola penganyaran 56 | Amsefrak n ileqman 57 | Жаңарту менеджері 58 | កម្មវិធី​គ្រប់គ្រង​បច្ចុប្បន្នភាព 59 | 업데이트 매니저 60 | Rêveberiya Rojanekirinê 61 | Жаңылоо менеджери 62 | Administrator Novationum 63 | ຕົວຈັດການອັບເດດ 64 | Atnaujinimų tvarkytuvė 65 | Atjauninājumu pārvaldnieks 66 | Менаџер за надградба 67 | അപ്‌ഡേറ്റ് മാനേജർ 68 | अद्ययावतीकरण प्रबंधक 69 | Pengurus Kemaskini 70 | Oppdateringsbehandler 71 | Aktualisierungsverwaltung 72 | उप्डेट म्यानेजर 73 | Bijwerkbeheer 74 | Oppdateringshandsamar 75 | Gestionari de mesas a jorn 76 | ਅੱਪਡੇਟ ਮੈਨੇਜਰ 77 | Menedżer aktualizacji 78 | Gestor de atualizações 79 | Gerenciador de Atualizações 80 | Administrator de actualizări 81 | Менеджер обновлений 82 | යාවත්කාල කිරීම කළමනාකරනය 83 | Správca aktualizácií 84 | Upravljalnik posodobitev 85 | Agaasime Dalacsiiyaha 86 | Menaxhuesi i Përditësimeve 87 | Управник ажурирања 88 | Menadžer ažuriranja 89 | Uppdateringshanterare 90 | மேம்பாட்டு நிர்வகிப்பான் 91 | నవీకరణ నిర్వాహకం 92 | Мудири навсозиҳо 93 | โปรแกรมจัดการการปรับปรุง 94 | Tagapamahala ng Update 95 | Güncelleme Yöneticisi 96 | Диспетчер оновлень 97 | اپڈیٹ منتظم 98 | Yangilanish menejeri 99 | Trình Quản lý Cập nhật 100 | 更新管理器 101 | 更新管理員 102 | 更新管理員 103 | 104 | 105 | no 106 | no 107 | auth_admin_keep 108 | 109 | /usr/bin/mintupdate-automation 110 | false 111 | 112 | 113 | -------------------------------------------------------------------------------- /usr/share/glib-2.0/schemas/com.linuxmint.updates.gschema.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | true 6 | 7 | 8 | 9 | 10 | false 11 | 12 | 13 | 14 | 15 | false 16 | 17 | 18 | 19 | 20 | false 21 | 22 | 23 | 24 | 25 | [] 26 | 27 | 28 | 29 | 30 | true 31 | 32 | 33 | 34 | 35 | 0 36 | 37 | 38 | 39 | 40 | 0 41 | 42 | 43 | 44 | 45 | 0 46 | 47 | 48 | 49 | 50 | 0 51 | 52 | 53 | 54 | 55 | 10 56 | 57 | 58 | 59 | 60 | 0 61 | 62 | 63 | 64 | 65 | 2 66 | 67 | 68 | 69 | 70 | 0 71 | 72 | 73 | 74 | 75 | true 76 | 77 | 78 | 79 | 80 | true 81 | 82 | 83 | 84 | 85 | false 86 | 87 | 88 | 89 | 90 | true 91 | 92 | 93 | 94 | 95 | false 96 | 97 | 98 | 99 | 100 | false 101 | 102 | 103 | 104 | 105 | true 106 | 107 | 108 | 109 | 110 | 790 111 | 112 | 113 | 114 | 115 | 570 116 | 117 | 118 | 119 | 120 | 344 121 | 122 | 123 | 124 | 125 | false 126 | 127 | 128 | 129 | 130 | false 131 | 132 | 133 | 134 | 135 | "-generic" 136 | 137 | 138 | 139 | 140 | false 141 | 142 | 143 | 144 | 145 | true 146 | 147 | 148 | 149 | 150 | 7 151 | 152 | 153 | 154 | 155 | 15 156 | 157 | 158 | 159 | 160 | 30 161 | 162 | 163 | 164 | 165 | 2 166 | 167 | 168 | 169 | 170 | false 171 | 172 | 173 | 174 | 175 | true 176 | 177 | 178 | 179 | 180 | false 181 | 182 | 183 | 184 | 185 | true 186 | 187 | 188 | 189 | 190 | true 191 | 192 | 193 | 194 | 195 | 196 | -------------------------------------------------------------------------------- /usr/share/linuxmint/mintupdate/information.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | True 7 | False 8 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 9 | center 10 | 640 11 | 480 12 | mintupdate 13 | 14 | 15 | 16 | 17 | 18 | True 19 | False 20 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 21 | 12 22 | vertical 23 | 12 24 | 25 | 26 | True 27 | False 28 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 29 | vertical 30 | 12 31 | 32 | 33 | True 34 | False 35 | 2 36 | 6 37 | 38 | 39 | True 40 | False 41 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 42 | start 43 | Process ID: 44 | 45 | 46 | 0 47 | 0 48 | 49 | 50 | 51 | 52 | True 53 | False 54 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 55 | start 56 | 57 | 58 | 1 59 | 0 60 | 61 | 62 | 63 | 64 | True 65 | False 66 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 67 | start 68 | Log file: 69 | 70 | 71 | 0 72 | 1 73 | 74 | 75 | 76 | 77 | True 78 | False 79 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 80 | start 81 | 82 | 83 | 1 84 | 1 85 | 86 | 87 | 88 | 89 | False 90 | True 91 | 0 92 | 93 | 94 | 95 | 96 | True 97 | True 98 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 99 | etched-in 100 | 101 | 102 | 600 103 | 248 104 | True 105 | True 106 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 107 | 1 108 | False 109 | 3 110 | True 111 | 112 | 113 | 114 | 115 | True 116 | True 117 | 1 118 | 119 | 120 | 121 | 122 | True 123 | True 124 | 0 125 | 126 | 127 | 128 | 129 | True 130 | False 131 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 132 | end 133 | 134 | 135 | Close 136 | True 137 | True 138 | True 139 | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 140 | 141 | 142 | False 143 | False 144 | 0 145 | 146 | 147 | 148 | 149 | False 150 | False 151 | 1 152 | 153 | 154 | 155 | 156 | 157 | 158 | -------------------------------------------------------------------------------- /usr/share/applications/mintupdate.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Update Manager 3 | Name[af]=Opdateringsbestuurder 4 | Name[am]=የማሻሻያ አስተዳዳሪ 5 | Name[ar]=مدير التحديث 6 | Name[ast]=Xestor d'anovamientos 7 | Name[az]=Yeniləmə İdarəçisi 8 | Name[be]=Кіраўнік абнаўленняў 9 | Name[bg]=Диспечер на актуализациите 10 | Name[bn]=আপডেট ব্যবস্থাপক 11 | Name[br]=Ardoer hizivadurioù 12 | Name[bs]=Menadžer nadogradnji 13 | Name[ca]=Gestor d'actualitzacions 14 | Name[ca@valencia]=Gestor d'actualitzacions 15 | Name[cs]=Správa aktualizací 16 | Name[csb]=Menedżera aktualizacëji 17 | Name[cy]=Rheolwr Diweddaru 18 | Name[da]=Opdateringshåndtering 19 | Name[de]=Aktualisierungsverwaltung 20 | Name[el]=Διαχειριστής Ενημερώσεων 21 | Name[eo]=Ĝisdatiga mastrumilo 22 | Name[es]=Gestor de actualizaciones 23 | Name[et]=Uuendamishaldur 24 | Name[eu]=Eguneraketa-kudeatzailea 25 | Name[fa]=مدیر به‌روزرسانی 26 | Name[fi]=Päivitysten hallinta 27 | Name[fil]=Tagapamahala ng Update 28 | Name[fo]=Dagføringa fyrisiting 29 | Name[fr]=Gestionnaire de mise à jour 30 | Name[fr_CA]=Gestionnaire de mise à jour 31 | Name[ga]=Bainisteoir Nuashonraithe 32 | Name[gd]=Manaidsear nan ùrachaidhean 33 | Name[gl]=Xestor de actualizacións 34 | Name[gv]=Reireyder stoo noa 35 | Name[he]=מנהל עדכונים 36 | Name[hi]=अपडेट मैनेजर 37 | Name[hr]=Upravitelj nadopuna 38 | Name[hu]=Frissítéskezelő 39 | Name[ia]=Gestor de actualisation 40 | Name[id]=Manajer Pembaruan 41 | Name[ie]=Gerente de actualisamentes 42 | Name[is]=Uppfærslustjóri 43 | Name[it]=Gestore aggiornamenti 44 | Name[ja]=アップデートマネージャー 45 | Name[jv]=Penglola penganyaran 46 | Name[kab]=Amsefrak n ileqman 47 | Name[kk]=Жаңарту менеджері 48 | Name[km]=កម្មវិធី​គ្រប់គ្រង​បច្ចុប្បន្នភាព 49 | Name[ko]=업데이트 매니저 50 | Name[ku]=Rêveberiya Rojanekirinê 51 | Name[ky]=Жаңылоо менеджери 52 | Name[la]=Administrator Novationum 53 | Name[lo]=ຕົວຈັດການອັບເດດ 54 | Name[lt]=Atnaujinimų tvarkytuvė 55 | Name[lv]=Atjauninājumu pārvaldnieks 56 | Name[mk]=Менаџер за надградба 57 | Name[ml]=അപ്‌ഡേറ്റ് മാനേജർ 58 | Name[mr]=अद्ययावतीकरण प्रबंधक 59 | Name[ms]=Pengurus Kemaskini 60 | Name[nb]=Oppdateringsbehandler 61 | Name[nds]=Aktualisierungsverwaltung 62 | Name[ne]=उप्डेट म्यानेजर 63 | Name[nl]=Bijwerkbeheer 64 | Name[nn]=Oppdateringshandsamar 65 | Name[oc]=Gestionari de mesas a jorn 66 | Name[pa]=ਅੱਪਡੇਟ ਮੈਨੇਜਰ 67 | Name[pl]=Menedżer aktualizacji 68 | Name[pt]=Gestor de atualizações 69 | Name[pt_BR]=Gerenciador de Atualizações 70 | Name[ro]=Administrator de actualizări 71 | Name[ru]=Менеджер обновлений 72 | Name[si]=යාවත්කාල කිරීම කළමනාකරනය 73 | Name[sk]=Správca aktualizácií 74 | Name[sl]=Upravljalnik posodobitev 75 | Name[so]=Agaasime Dalacsiiyaha 76 | Name[sq]=Menaxhuesi i Përditësimeve 77 | Name[sr]=Управник ажурирања 78 | Name[sr@latin]=Menadžer ažuriranja 79 | Name[sv]=Uppdateringshanterare 80 | Name[ta]=மேம்பாட்டு நிர்வகிப்பான் 81 | Name[te]=నవీకరణ నిర్వాహకం 82 | Name[tg]=Мудири навсозиҳо 83 | Name[th]=โปรแกรมจัดการการปรับปรุง 84 | Name[tl]=Tagapamahala ng Update 85 | Name[tr]=Güncelleme Yöneticisi 86 | Name[uk]=Диспетчер оновлень 87 | Name[ur]=اپڈیٹ منتظم 88 | Name[uz]=Yangilanish menejeri 89 | Name[vi]=Trình Quản lý Cập nhật 90 | Name[zh_CN]=更新管理器 91 | Name[zh_HK]=更新管理員 92 | Name[zh_TW]=更新管理員 93 | Comment=Show and install available updates 94 | Comment[af]=Wys en installeer beskikbare opdaterings 95 | Comment[am]=ዝግጁ የሆኑ ማሻሻያዎችን ማሳያ እና መግጠሚያ 96 | Comment[ar]=عرض التحديثات المتاحة وتثبيتها 97 | Comment[ast]=Amosar ya instalar los anovamientos disponibles 98 | Comment[be]=Паказаць і ўсталяваць даступныя абнаўленні 99 | Comment[bg]=Показване и инсталиране на наличните актуализации 100 | Comment[bn]=যে আপডেটসমূহ পাওয়া যাচ্ছে সেগুলো দেখাও এবং ইন্সটল কর 101 | Comment[bs]=Prikaži i instaliraj dostupne nadogradnje 102 | Comment[ca]=Vegeu i instal·leu les actualitzacions disponibles 103 | Comment[ca@valencia]=Vegeu i instal·leu les actualitzacions disponibles 104 | Comment[cs]=Zobrazit a nainstalovat dostupné aktualizace 105 | Comment[csb]=Wëskrzëni ë winstalëjë przëstãpné aktualizacëje 106 | Comment[cy]=Dangos a gosod y diweddariadau sydd ar gael 107 | Comment[da]=Vis og installér tilgængelige opdateringer 108 | Comment[de]=Verfügbare Aktualisierungen anzeigen und installieren 109 | Comment[el]=Εμφάνιση και εγκατάσταση διαθέσιμων ενημερώσεων 110 | Comment[eo]=Montri kaj instali disponeblajn ĝisdatigojn 111 | Comment[es]=Mostrar e instalar las actualizaciones disponibles 112 | Comment[et]=Saadaolevate uuenduste kuvamine ja paigaldamine 113 | Comment[eu]=Erakutsi eta instalatu eguneraketa eskuragarriak 114 | Comment[fa]=نمایش و نصب به‌روزرسانی‌های موجود 115 | Comment[fi]=Näytä ja asenna saatavilla olevat päivitykset 116 | Comment[fil]=Ipakita at i-install ang mga available na update 117 | Comment[fo]=Vís og legg inn tøkar dagførlsur 118 | Comment[fr]=Afficher et installer les mises à jour proposées 119 | Comment[fr_CA]=Afficher et installer les mises à jour proposées 120 | Comment[ga]=Taispeáin agus suiteáil nuashonruithe atá ar fáil 121 | Comment[gd]=Seall agus stàlaich ùrachaidhean a tha ri làimh 122 | Comment[gl]=Mostra e instala as actualizacións dispoñibles 123 | Comment[gv]=Soilshaghey as cur stoo noa ry-geddyn 'syn co`earrooder 124 | Comment[he]=הצגה והתקנת העדכונים הזמינים 125 | Comment[hi]=उपलब्ध अपडेट दिखाएँ व इंस्टॉल करें 126 | Comment[hr]=Prikaži i instaliraj dostupne nadopune 127 | Comment[hu]=Rendelkezésre álló frissítések megjelenítése és telepítése 128 | Comment[ia]=Monstrar e installar le actualisationes disponibile 129 | Comment[id]=Tampilkan dan instal pembaruan yang tersedia 130 | Comment[ie]=Monstrar e installar disponibil actualisamentes 131 | Comment[is]=Sýna og setja upp tiltækar uppfærslur 132 | Comment[it]=Visualizza e installa gli aggiornamenti disponibili 133 | Comment[ja]=利用可能なアップデートを表示・インストールします 134 | Comment[jv]=Nampilake lan masang penganyaran sing disediakno 135 | Comment[kab]=Sken u sbedd ileqman iwejden 136 | Comment[kk]=Жетімді жаңартуларды көрсету және орнату 137 | Comment[km]=បង្ហាញ និង​ដំឡើង​បច្ចុប្បន្នភាព​ដែល​មាន 138 | Comment[ko]=이용 가능한 업데이트를 보여주고 설치하기 139 | Comment[ku]=Rojanekirinên amade nîşan bide û saz bike 140 | Comment[ky]=Жеткиликтүү жаңылоолорду көрсөтүү жана орнотуу 141 | Comment[la]=Novationes paratas ostende et institue 142 | Comment[lo]=ສະແດງ ແລະ ຕິດຕັ້ງການອັບເດດທີ່ມີຢູ່ 143 | Comment[lt]=Rodyti ir įdiegti prieinamus atnaujinimus 144 | Comment[lv]=Rādīt un instalēt pieejamos atjauninājumus 145 | Comment[mk]=Прикажи и инсталирај ги достапните надградби 146 | Comment[ml]=ലഭ്യമായ പുതുക്കലുകൾ പ്രദർശിപ്പിക്കുകയും ഇൻസ്റ്റോൾ ചെയ്യുകയും ചെയ്യുക 147 | Comment[mr]=अद्ययावतन दाखवा आणि स्थापित करा 148 | Comment[ms]=Tunjuk dan pasang kemaskini yang ada 149 | Comment[nb]=Vis og installer tilgjengelige oppdateringer 150 | Comment[nds]=Verfügbare Aktualisierungen anzeigen und installieren 151 | Comment[ne]=रहेका उप्डेट हरु देखौ अनी इन्स्तल्ल गर 152 | Comment[nl]=Beschikbare actualiseringen tonen en installeren 153 | Comment[nn]=Vis og installer tilgjengelege oppdateringar 154 | Comment[oc]=Afichar e installar las mesas a jorn disponiblas 155 | Comment[pa]=ਉਪਲੱਬਧ ਅੱਪਡੇਟ ਵੇਖੋ ਤੇ ਇੰਸਟਾਲ ਕਰੋ 156 | Comment[pl]=Wyświetl i zainstaluj dostępne aktualizacje 157 | Comment[pt]=Mostrar e instalar atualizações disponíveis 158 | Comment[pt_BR]=Exibir e instalar as atualizações disponíveis 159 | Comment[ro]=Arată și instalează actualizările disponibile 160 | Comment[ru]=Показать и установить доступные обновления 161 | Comment[si]=භවිතය සඳහ අති කට්ටල පෙන්වීම සහ ස්ථපනය කිරීම 162 | Comment[sk]=Zobraziť a inštalovať dostupné aktualizácie 163 | Comment[sl]=Pokaži in namesti razpoložljive posodobitve 164 | Comment[so]=Muuji shubna dhamaan dalacsiimadda la heli karo 165 | Comment[sq]=Shfaq dhe instalo përditësimet e disponueshme 166 | Comment[sr]=Прикажи и угради доступна ажурирања 167 | Comment[sr@latin]=Prikaži i instaliraj dostupna ažuriranja 168 | Comment[sv]=Visa och installera tillgängliga uppdateringar 169 | Comment[ta]=கிடைக்கும் மேம்பாடுகளை பட்டியலிட்டு நிறுவு 170 | Comment[te]=లభ్యతలో ఉన్న నవీకరణలను చూపించు మరియు స్థాపించు 171 | Comment[tg]=Намоиш додан ва насб кардани навсозиҳои дастрас 172 | Comment[th]=แสดงและติดตั้งรายการการปรับรุ่นทั้งหมดที่มี 173 | Comment[tl]=Ipakita at i-install ang mga update na mayroon 174 | Comment[tr]=Mevcut güncellemeleri göster ve kur 175 | Comment[uk]=Показати та встановити доступні оновлення 176 | Comment[ur]=دکھائیں اور انسٹال کریں دستاب کردہ اپڈیٹس 177 | Comment[uz]=Mavjud yangilanishlarni ko‘rsatish va o‘rnatish 178 | Comment[vi]=Hiện và cài đặt các bản cập nhật sẵn có 179 | Comment[zh_CN]=显示并安装可用更新 180 | Comment[zh_HK]=顯示並安裝可用的更新 181 | Comment[zh_TW]=顯示並安裝可用的更新 182 | Exec=mintupdate 183 | Icon=mintupdate 184 | Terminal=false 185 | Type=Application 186 | Encoding=UTF-8 187 | Categories=Application;System;Settings;XFCE;X-XFCE-SettingsDialog;X-XFCE-SystemSettings; 188 | StartupNotify=false 189 | NotShowIn=KDE; 190 | -------------------------------------------------------------------------------- /usr/share/icons/hicolor/scalable/status/mintupdate-type-package-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 39 | 42 | 43 | 45 | 46 | 48 | image/svg+xml 49 | 51 | Moka Symbolic Icon Theme 52 | 53 | 54 | 55 | Moka Symbolic Icon Theme 57 | 59 | 62 | 66 | 67 | 70 | 74 | 75 | 76 | 80 | 84 | 88 | 92 | 96 | 100 | 104 | 108 | 113 | 117 | 123 | 124 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /usr/share/applications/mintupdate-kde.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Update Manager 3 | Name[af]=Opdateringsbestuurder 4 | Name[am]=የማሻሻያ አስተዳዳሪ 5 | Name[ar]=مدير التحديث 6 | Name[ast]=Xestor d'anovamientos 7 | Name[az]=Yeniləmə İdarəçisi 8 | Name[be]=Кіраўнік абнаўленняў 9 | Name[bg]=Диспечер на актуализациите 10 | Name[bn]=আপডেট ব্যবস্থাপক 11 | Name[br]=Ardoer hizivadurioù 12 | Name[bs]=Menadžer nadogradnji 13 | Name[ca]=Gestor d'actualitzacions 14 | Name[ca@valencia]=Gestor d'actualitzacions 15 | Name[cs]=Správa aktualizací 16 | Name[csb]=Menedżera aktualizacëji 17 | Name[cy]=Rheolwr Diweddaru 18 | Name[da]=Opdateringshåndtering 19 | Name[de]=Aktualisierungsverwaltung 20 | Name[el]=Διαχειριστής Ενημερώσεων 21 | Name[eo]=Ĝisdatiga mastrumilo 22 | Name[es]=Gestor de actualizaciones 23 | Name[et]=Uuendamishaldur 24 | Name[eu]=Eguneraketa-kudeatzailea 25 | Name[fa]=مدیر به‌روزرسانی 26 | Name[fi]=Päivitysten hallinta 27 | Name[fil]=Tagapamahala ng Update 28 | Name[fo]=Dagføringa fyrisiting 29 | Name[fr]=Gestionnaire de mise à jour 30 | Name[fr_CA]=Gestionnaire de mise à jour 31 | Name[ga]=Bainisteoir Nuashonraithe 32 | Name[gd]=Manaidsear nan ùrachaidhean 33 | Name[gl]=Xestor de actualizacións 34 | Name[gv]=Reireyder stoo noa 35 | Name[he]=מנהל עדכונים 36 | Name[hi]=अपडेट मैनेजर 37 | Name[hr]=Upravitelj nadopuna 38 | Name[hu]=Frissítéskezelő 39 | Name[ia]=Gestor de actualisation 40 | Name[id]=Manajer Pembaruan 41 | Name[ie]=Gerente de actualisamentes 42 | Name[is]=Uppfærslustjóri 43 | Name[it]=Gestore aggiornamenti 44 | Name[ja]=アップデートマネージャー 45 | Name[jv]=Penglola penganyaran 46 | Name[kab]=Amsefrak n ileqman 47 | Name[kk]=Жаңарту менеджері 48 | Name[km]=កម្មវិធី​គ្រប់គ្រង​បច្ចុប្បន្នភាព 49 | Name[ko]=업데이트 매니저 50 | Name[ku]=Rêveberiya Rojanekirinê 51 | Name[ky]=Жаңылоо менеджери 52 | Name[la]=Administrator Novationum 53 | Name[lo]=ຕົວຈັດການອັບເດດ 54 | Name[lt]=Atnaujinimų tvarkytuvė 55 | Name[lv]=Atjauninājumu pārvaldnieks 56 | Name[mk]=Менаџер за надградба 57 | Name[ml]=അപ്‌ഡേറ്റ് മാനേജർ 58 | Name[mr]=अद्ययावतीकरण प्रबंधक 59 | Name[ms]=Pengurus Kemaskini 60 | Name[nb]=Oppdateringsbehandler 61 | Name[nds]=Aktualisierungsverwaltung 62 | Name[ne]=उप्डेट म्यानेजर 63 | Name[nl]=Bijwerkbeheer 64 | Name[nn]=Oppdateringshandsamar 65 | Name[oc]=Gestionari de mesas a jorn 66 | Name[pa]=ਅੱਪਡੇਟ ਮੈਨੇਜਰ 67 | Name[pl]=Menedżer aktualizacji 68 | Name[pt]=Gestor de atualizações 69 | Name[pt_BR]=Gerenciador de Atualizações 70 | Name[ro]=Administrator de actualizări 71 | Name[ru]=Менеджер обновлений 72 | Name[si]=යාවත්කාල කිරීම කළමනාකරනය 73 | Name[sk]=Správca aktualizácií 74 | Name[sl]=Upravljalnik posodobitev 75 | Name[so]=Agaasime Dalacsiiyaha 76 | Name[sq]=Menaxhuesi i Përditësimeve 77 | Name[sr]=Управник ажурирања 78 | Name[sr@latin]=Menadžer ažuriranja 79 | Name[sv]=Uppdateringshanterare 80 | Name[ta]=மேம்பாட்டு நிர்வகிப்பான் 81 | Name[te]=నవీకరణ నిర్వాహకం 82 | Name[tg]=Мудири навсозиҳо 83 | Name[th]=โปรแกรมจัดการการปรับปรุง 84 | Name[tl]=Tagapamahala ng Update 85 | Name[tr]=Güncelleme Yöneticisi 86 | Name[uk]=Диспетчер оновлень 87 | Name[ur]=اپڈیٹ منتظم 88 | Name[uz]=Yangilanish menejeri 89 | Name[vi]=Trình Quản lý Cập nhật 90 | Name[zh_CN]=更新管理器 91 | Name[zh_HK]=更新管理員 92 | Name[zh_TW]=更新管理員 93 | Comment=Show and install available updates 94 | Comment[af]=Wys en installeer beskikbare opdaterings 95 | Comment[am]=ዝግጁ የሆኑ ማሻሻያዎችን ማሳያ እና መግጠሚያ 96 | Comment[ar]=عرض التحديثات المتاحة وتثبيتها 97 | Comment[ast]=Amosar ya instalar los anovamientos disponibles 98 | Comment[be]=Паказаць і ўсталяваць даступныя абнаўленні 99 | Comment[bg]=Показване и инсталиране на наличните актуализации 100 | Comment[bn]=যে আপডেটসমূহ পাওয়া যাচ্ছে সেগুলো দেখাও এবং ইন্সটল কর 101 | Comment[bs]=Prikaži i instaliraj dostupne nadogradnje 102 | Comment[ca]=Vegeu i instal·leu les actualitzacions disponibles 103 | Comment[ca@valencia]=Vegeu i instal·leu les actualitzacions disponibles 104 | Comment[cs]=Zobrazit a nainstalovat dostupné aktualizace 105 | Comment[csb]=Wëskrzëni ë winstalëjë przëstãpné aktualizacëje 106 | Comment[cy]=Dangos a gosod y diweddariadau sydd ar gael 107 | Comment[da]=Vis og installér tilgængelige opdateringer 108 | Comment[de]=Verfügbare Aktualisierungen anzeigen und installieren 109 | Comment[el]=Εμφάνιση και εγκατάσταση διαθέσιμων ενημερώσεων 110 | Comment[eo]=Montri kaj instali disponeblajn ĝisdatigojn 111 | Comment[es]=Mostrar e instalar las actualizaciones disponibles 112 | Comment[et]=Saadaolevate uuenduste kuvamine ja paigaldamine 113 | Comment[eu]=Erakutsi eta instalatu eguneraketa eskuragarriak 114 | Comment[fa]=نمایش و نصب به‌روزرسانی‌های موجود 115 | Comment[fi]=Näytä ja asenna saatavilla olevat päivitykset 116 | Comment[fil]=Ipakita at i-install ang mga available na update 117 | Comment[fo]=Vís og legg inn tøkar dagførlsur 118 | Comment[fr]=Afficher et installer les mises à jour proposées 119 | Comment[fr_CA]=Afficher et installer les mises à jour proposées 120 | Comment[ga]=Taispeáin agus suiteáil nuashonruithe atá ar fáil 121 | Comment[gd]=Seall agus stàlaich ùrachaidhean a tha ri làimh 122 | Comment[gl]=Mostra e instala as actualizacións dispoñibles 123 | Comment[gv]=Soilshaghey as cur stoo noa ry-geddyn 'syn co`earrooder 124 | Comment[he]=הצגה והתקנת העדכונים הזמינים 125 | Comment[hi]=उपलब्ध अपडेट दिखाएँ व इंस्टॉल करें 126 | Comment[hr]=Prikaži i instaliraj dostupne nadopune 127 | Comment[hu]=Rendelkezésre álló frissítések megjelenítése és telepítése 128 | Comment[ia]=Monstrar e installar le actualisationes disponibile 129 | Comment[id]=Tampilkan dan instal pembaruan yang tersedia 130 | Comment[ie]=Monstrar e installar disponibil actualisamentes 131 | Comment[is]=Sýna og setja upp tiltækar uppfærslur 132 | Comment[it]=Visualizza e installa gli aggiornamenti disponibili 133 | Comment[ja]=利用可能なアップデートを表示・インストールします 134 | Comment[jv]=Nampilake lan masang penganyaran sing disediakno 135 | Comment[kab]=Sken u sbedd ileqman iwejden 136 | Comment[kk]=Жетімді жаңартуларды көрсету және орнату 137 | Comment[km]=បង្ហាញ និង​ដំឡើង​បច្ចុប្បន្នភាព​ដែល​មាន 138 | Comment[ko]=이용 가능한 업데이트를 보여주고 설치하기 139 | Comment[ku]=Rojanekirinên amade nîşan bide û saz bike 140 | Comment[ky]=Жеткиликтүү жаңылоолорду көрсөтүү жана орнотуу 141 | Comment[la]=Novationes paratas ostende et institue 142 | Comment[lo]=ສະແດງ ແລະ ຕິດຕັ້ງການອັບເດດທີ່ມີຢູ່ 143 | Comment[lt]=Rodyti ir įdiegti prieinamus atnaujinimus 144 | Comment[lv]=Rādīt un instalēt pieejamos atjauninājumus 145 | Comment[mk]=Прикажи и инсталирај ги достапните надградби 146 | Comment[ml]=ലഭ്യമായ പുതുക്കലുകൾ പ്രദർശിപ്പിക്കുകയും ഇൻസ്റ്റോൾ ചെയ്യുകയും ചെയ്യുക 147 | Comment[mr]=अद्ययावतन दाखवा आणि स्थापित करा 148 | Comment[ms]=Tunjuk dan pasang kemaskini yang ada 149 | Comment[nb]=Vis og installer tilgjengelige oppdateringer 150 | Comment[nds]=Verfügbare Aktualisierungen anzeigen und installieren 151 | Comment[ne]=रहेका उप्डेट हरु देखौ अनी इन्स्तल्ल गर 152 | Comment[nl]=Beschikbare actualiseringen tonen en installeren 153 | Comment[nn]=Vis og installer tilgjengelege oppdateringar 154 | Comment[oc]=Afichar e installar las mesas a jorn disponiblas 155 | Comment[pa]=ਉਪਲੱਬਧ ਅੱਪਡੇਟ ਵੇਖੋ ਤੇ ਇੰਸਟਾਲ ਕਰੋ 156 | Comment[pl]=Wyświetl i zainstaluj dostępne aktualizacje 157 | Comment[pt]=Mostrar e instalar atualizações disponíveis 158 | Comment[pt_BR]=Exibir e instalar as atualizações disponíveis 159 | Comment[ro]=Arată și instalează actualizările disponibile 160 | Comment[ru]=Показать и установить доступные обновления 161 | Comment[si]=භවිතය සඳහ අති කට්ටල පෙන්වීම සහ ස්ථපනය කිරීම 162 | Comment[sk]=Zobraziť a inštalovať dostupné aktualizácie 163 | Comment[sl]=Pokaži in namesti razpoložljive posodobitve 164 | Comment[so]=Muuji shubna dhamaan dalacsiimadda la heli karo 165 | Comment[sq]=Shfaq dhe instalo përditësimet e disponueshme 166 | Comment[sr]=Прикажи и угради доступна ажурирања 167 | Comment[sr@latin]=Prikaži i instaliraj dostupna ažuriranja 168 | Comment[sv]=Visa och installera tillgängliga uppdateringar 169 | Comment[ta]=கிடைக்கும் மேம்பாடுகளை பட்டியலிட்டு நிறுவு 170 | Comment[te]=లభ్యతలో ఉన్న నవీకరణలను చూపించు మరియు స్థాపించు 171 | Comment[tg]=Намоиш додан ва насб кардани навсозиҳои дастрас 172 | Comment[th]=แสดงและติดตั้งรายการการปรับรุ่นทั้งหมดที่มี 173 | Comment[tl]=Ipakita at i-install ang mga update na mayroon 174 | Comment[tr]=Mevcut güncellemeleri göster ve kur 175 | Comment[uk]=Показати та встановити доступні оновлення 176 | Comment[ur]=دکھائیں اور انسٹال کریں دستاب کردہ اپڈیٹس 177 | Comment[uz]=Mavjud yangilanishlarni ko‘rsatish va o‘rnatish 178 | Comment[vi]=Hiện và cài đặt các bản cập nhật sẵn có 179 | Comment[zh_CN]=显示并安装可用更新 180 | Comment[zh_HK]=顯示並安裝可用的更新 181 | Comment[zh_TW]=顯示並安裝可用的更新 182 | GenericName=Show and install available updates 183 | GenericName[af]=Wys en installeer beskikbare opdaterings 184 | GenericName[am]=ዝግጁ የሆኑ ማሻሻያዎችን ማሳያ እና መግጠሚያ 185 | GenericName[ar]=عرض التحديثات المتاحة وتثبيتها 186 | GenericName[ast]=Amosar ya instalar los anovamientos disponibles 187 | GenericName[be]=Паказаць і ўсталяваць даступныя абнаўленні 188 | GenericName[bg]=Показване и инсталиране на наличните актуализации 189 | GenericName[bn]=যে আপডেটসমূহ পাওয়া যাচ্ছে সেগুলো দেখাও এবং ইন্সটল কর 190 | GenericName[bs]=Prikaži i instaliraj dostupne nadogradnje 191 | GenericName[ca]=Vegeu i instal·leu les actualitzacions disponibles 192 | GenericName[ca@valencia]=Vegeu i instal·leu les actualitzacions disponibles 193 | GenericName[cs]=Zobrazit a nainstalovat dostupné aktualizace 194 | GenericName[csb]=Wëskrzëni ë winstalëjë przëstãpné aktualizacëje 195 | GenericName[cy]=Dangos a gosod y diweddariadau sydd ar gael 196 | GenericName[da]=Vis og installér tilgængelige opdateringer 197 | GenericName[de]=Verfügbare Aktualisierungen anzeigen und installieren 198 | GenericName[el]=Εμφάνιση και εγκατάσταση διαθέσιμων ενημερώσεων 199 | GenericName[eo]=Montri kaj instali disponeblajn ĝisdatigojn 200 | GenericName[es]=Mostrar e instalar las actualizaciones disponibles 201 | GenericName[et]=Saadaolevate uuenduste kuvamine ja paigaldamine 202 | GenericName[eu]=Erakutsi eta instalatu eguneraketa eskuragarriak 203 | GenericName[fa]=نمایش و نصب به‌روزرسانی‌های موجود 204 | GenericName[fi]=Näytä ja asenna saatavilla olevat päivitykset 205 | GenericName[fil]=Ipakita at i-install ang mga available na update 206 | GenericName[fo]=Vís og legg inn tøkar dagførlsur 207 | GenericName[fr]=Afficher et installer les mises à jour proposées 208 | GenericName[fr_CA]=Afficher et installer les mises à jour proposées 209 | GenericName[ga]=Taispeáin agus suiteáil nuashonruithe atá ar fáil 210 | GenericName[gd]=Seall agus stàlaich ùrachaidhean a tha ri làimh 211 | GenericName[gl]=Mostra e instala as actualizacións dispoñibles 212 | GenericName[gv]=Soilshaghey as cur stoo noa ry-geddyn 'syn co`earrooder 213 | GenericName[he]=הצגה והתקנת העדכונים הזמינים 214 | GenericName[hi]=उपलब्ध अपडेट दिखाएँ व इंस्टॉल करें 215 | GenericName[hr]=Prikaži i instaliraj dostupne nadopune 216 | GenericName[hu]=Rendelkezésre álló frissítések megjelenítése és telepítése 217 | GenericName[ia]=Monstrar e installar le actualisationes disponibile 218 | GenericName[id]=Tampilkan dan instal pembaruan yang tersedia 219 | GenericName[ie]=Monstrar e installar disponibil actualisamentes 220 | GenericName[is]=Sýna og setja upp tiltækar uppfærslur 221 | GenericName[it]=Visualizza e installa gli aggiornamenti disponibili 222 | GenericName[ja]=利用可能なアップデートを表示・インストールします 223 | GenericName[jv]=Nampilake lan masang penganyaran sing disediakno 224 | GenericName[kab]=Sken u sbedd ileqman iwejden 225 | GenericName[kk]=Жетімді жаңартуларды көрсету және орнату 226 | GenericName[km]=បង្ហាញ និង​ដំឡើង​បច្ចុប្បន្នភាព​ដែល​មាន 227 | GenericName[ko]=이용 가능한 업데이트를 보여주고 설치하기 228 | GenericName[ku]=Rojanekirinên amade nîşan bide û saz bike 229 | GenericName[ky]=Жеткиликтүү жаңылоолорду көрсөтүү жана орнотуу 230 | GenericName[la]=Novationes paratas ostende et institue 231 | GenericName[lo]=ສະແດງ ແລະ ຕິດຕັ້ງການອັບເດດທີ່ມີຢູ່ 232 | GenericName[lt]=Rodyti ir įdiegti prieinamus atnaujinimus 233 | GenericName[lv]=Rādīt un instalēt pieejamos atjauninājumus 234 | GenericName[mk]=Прикажи и инсталирај ги достапните надградби 235 | GenericName[ml]=ലഭ്യമായ പുതുക്കലുകൾ പ്രദർശിപ്പിക്കുകയും ഇൻസ്റ്റോൾ ചെയ്യുകയും ചെയ്യുക 236 | GenericName[mr]=अद्ययावतन दाखवा आणि स्थापित करा 237 | GenericName[ms]=Tunjuk dan pasang kemaskini yang ada 238 | GenericName[nb]=Vis og installer tilgjengelige oppdateringer 239 | GenericName[nds]=Verfügbare Aktualisierungen anzeigen und installieren 240 | GenericName[ne]=रहेका उप्डेट हरु देखौ अनी इन्स्तल्ल गर 241 | GenericName[nl]=Beschikbare actualiseringen tonen en installeren 242 | GenericName[nn]=Vis og installer tilgjengelege oppdateringar 243 | GenericName[oc]=Afichar e installar las mesas a jorn disponiblas 244 | GenericName[pa]=ਉਪਲੱਬਧ ਅੱਪਡੇਟ ਵੇਖੋ ਤੇ ਇੰਸਟਾਲ ਕਰੋ 245 | GenericName[pl]=Wyświetl i zainstaluj dostępne aktualizacje 246 | GenericName[pt]=Mostrar e instalar atualizações disponíveis 247 | GenericName[pt_BR]=Exibir e instalar as atualizações disponíveis 248 | GenericName[ro]=Arată și instalează actualizările disponibile 249 | GenericName[ru]=Показать и установить доступные обновления 250 | GenericName[si]=භවිතය සඳහ අති කට්ටල පෙන්වීම සහ ස්ථපනය කිරීම 251 | GenericName[sk]=Zobraziť a inštalovať dostupné aktualizácie 252 | GenericName[sl]=Pokaži in namesti razpoložljive posodobitve 253 | GenericName[so]=Muuji shubna dhamaan dalacsiimadda la heli karo 254 | GenericName[sq]=Shfaq dhe instalo përditësimet e disponueshme 255 | GenericName[sr]=Прикажи и угради доступна ажурирања 256 | GenericName[sr@latin]=Prikaži i instaliraj dostupna ažuriranja 257 | GenericName[sv]=Visa och installera tillgängliga uppdateringar 258 | GenericName[ta]=கிடைக்கும் மேம்பாடுகளை பட்டியலிட்டு நிறுவு 259 | GenericName[te]=లభ్యతలో ఉన్న నవీకరణలను చూపించు మరియు స్థాపించు 260 | GenericName[tg]=Намоиш додан ва насб кардани навсозиҳои дастрас 261 | GenericName[th]=แสดงและติดตั้งรายการการปรับรุ่นทั้งหมดที่มี 262 | GenericName[tl]=Ipakita at i-install ang mga update na mayroon 263 | GenericName[tr]=Mevcut güncellemeleri göster ve kur 264 | GenericName[uk]=Показати та встановити доступні оновлення 265 | GenericName[ur]=دکھائیں اور انسٹال کریں دستاب کردہ اپڈیٹس 266 | GenericName[uz]=Mavjud yangilanishlarni ko‘rsatish va o‘rnatish 267 | GenericName[vi]=Hiện và cài đặt các bản cập nhật sẵn có 268 | GenericName[zh_CN]=显示并安装可用更新 269 | GenericName[zh_HK]=顯示並安裝可用的更新 270 | GenericName[zh_TW]=顯示並安裝可用的更新 271 | Exec=mintupdate 272 | Icon=mintupdate 273 | Terminal=false 274 | Type=Application 275 | Encoding=UTF-8 276 | Categories=System; 277 | StartupNotify=false 278 | OnlyShowIn=KDE; 279 | -------------------------------------------------------------------------------- /usr/lib/linuxmint/mintUpdate/flatpak-update-worker.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import functools 4 | import os 5 | import argparse 6 | import json 7 | import sys 8 | import setproctitle 9 | from pathlib import Path 10 | import signal 11 | import locale 12 | import gettext 13 | 14 | import gi 15 | gi.require_version('GLib', '2.0') 16 | gi.require_version('Gtk', '3.0') 17 | gi.require_version('Flatpak', '1.0') 18 | from gi.repository import Gtk, GLib, Flatpak, Gio 19 | 20 | from mintcommon.installer import installer 21 | from mintcommon.installer import _flatpak 22 | 23 | from Classes import FlatpakUpdate 24 | 25 | # i18n 26 | APP = 'mintupdate' 27 | LOCALE_DIR = "/usr/share/locale" 28 | locale.bindtextdomain(APP, LOCALE_DIR) 29 | gettext.bindtextdomain(APP, LOCALE_DIR) 30 | gettext.textdomain(APP) 31 | _ = gettext.gettext 32 | 33 | setproctitle.setproctitle("flatpak-update-worker") 34 | GLib.set_application_name(_("Flatpak updates")) 35 | 36 | CHUNK_SIZE = 4096 37 | 38 | LOG_PATH = os.path.join(GLib.get_home_dir(), '.linuxmint', 'mintupdate', 'flatpak-updates.log') 39 | 40 | DEBUG_MODE = False 41 | try: 42 | DEBUG_MODE = os.environ["DEBUG"] 43 | except: 44 | pass 45 | 46 | def debug(*args): 47 | if not DEBUG_MODE: 48 | return 49 | sanitized = [str(arg) for arg in args if arg is not None] 50 | argstr = " ".join(sanitized) 51 | print("flatpak-update-worker (DEBUG): %s" % argstr, file=sys.stderr, flush=True) 52 | 53 | def warn(*args): 54 | sanitized = [str(arg) for arg in args if arg is not None] 55 | argstr = " ".join(sanitized) 56 | print("flatpak-update-worker (WARN): %s" % argstr, file=sys.stderr, flush=True) 57 | 58 | class FlatpakUpdateWorker(): 59 | def __init__(self): 60 | self.installer = installer.Installer(installer.PKG_TYPE_FLATPAK) 61 | self.fp_sys = _flatpak.get_fp_sys() 62 | self.task = None 63 | 64 | self.cancellable = Gio.Cancellable() 65 | 66 | if not self.check_for_any_installed(): 67 | self.send_to_updater("no-installed") 68 | self.cancellable.cancel() 69 | self.quit() 70 | 71 | self.stdin = Gio.UnixInputStream.new(sys.stdin.fileno(), True) 72 | 73 | self.updates = [] 74 | 75 | def check_for_any_installed(self): 76 | try: 77 | installed = self.fp_sys.list_installed_refs(self.cancellable) 78 | except GLib.Error as e: 79 | warn("not able to list installed refs: (%d) %s" % (e.code, e.message)) 80 | installed = [] 81 | 82 | if len(installed) == 0: 83 | debug("no flatpaks installed, exiting without refreshing") 84 | return False 85 | 86 | debug("%d flatpaks installed, continuing" % len(installed)) 87 | return True 88 | 89 | def refresh(self, init=True): 90 | if self.cancellable.is_cancelled(): 91 | return 92 | 93 | self.fp_sys.cleanup_local_refs_sync(None) 94 | self.fp_sys.prune_local_repo(None) 95 | 96 | if init: 97 | self.installer.init_sync() 98 | 99 | self.installer.force_new_cache_sync() 100 | 101 | def fetch_updates(self): 102 | if self.cancellable.is_cancelled(): 103 | return 104 | 105 | self.installer.connect("appstream-changed", self.on_appstream_loaded) 106 | 107 | if not self.installer.init_sync(): 108 | warn("cache not valid, refreshing") 109 | self.installer.init() 110 | else: 111 | debug("cache valid") 112 | 113 | def on_appstream_loaded(self, installer): 114 | self.updates = [] 115 | self.installer.select_flatpak_updates(None, 116 | self._fetch_task_ready, self._fetch_updates_error, 117 | None, None, 118 | use_mainloop=False) 119 | 120 | def _fetch_task_ready(self, task): 121 | debug("task object:", task, "transaction:", task.transaction) 122 | 123 | self.task = task 124 | self.error = task.error_message 125 | 126 | if self.error is None and task.transaction is not None: 127 | self._process_fetch_task(task) 128 | 129 | out = json.dumps(self.updates, default=lambda o: o.to_json(), indent=4) 130 | self.send_to_updater(out) 131 | else: 132 | self.send_to_updater(self.error) 133 | 134 | self.quit() 135 | debug("done generating updates", self.error) 136 | 137 | def _fetch_updates_error(self, task): 138 | warn("fetch error", task.error_message) 139 | 140 | def _process_fetch_task(self, task): 141 | trans = task.transaction 142 | ops = trans.get_operations() 143 | 144 | def cmp_ref_name(a, b): 145 | ref_a = Flatpak.Ref.parse(a.get_ref()) 146 | ref_b = Flatpak.Ref.parse(b.get_ref()) 147 | a_refstr_len = len(ref_a.get_name().split(".")) 148 | b_refstr_len = len(ref_b.get_name().split(".")) 149 | 150 | return a_refstr_len < b_refstr_len 151 | 152 | ops.sort(key=functools.cmp_to_key(cmp_ref_name)) 153 | ops.sort(key=lambda op: Flatpak.Ref.parse(op.get_ref()).get_name()) 154 | 155 | for op in ops: 156 | if op.get_operation_type() == Flatpak.TransactionOperationType.UPDATE: 157 | ref = Flatpak.Ref.parse(op.get_ref()) 158 | debug("Update: ", op.get_ref(), ref.get_branch()) 159 | try: 160 | installed_ref = self.fp_sys.get_installed_ref(ref.get_kind(), 161 | ref.get_name(), 162 | ref.get_arch(), 163 | ref.get_branch(), 164 | None) 165 | installed_ref.load_appdata() 166 | except GLib.Error as e: 167 | if e.code == Flatpak.Error.NOT_INSTALLED: 168 | installed_ref = None 169 | 170 | pkginfo = self.installer.find_pkginfo(ref.format_ref(), installer.PKG_TYPE_FLATPAK, remote=op.get_remote()) 171 | try: 172 | update = FlatpakUpdate(op, self.installer, ref, installed_ref, None, pkginfo) 173 | 174 | if self.is_base_package(update) or (not self.add_to_parent_update(update)): 175 | self.updates.append(update) 176 | except Exception as e: 177 | warn("Problem creating FlatpakUpdate for %s: %s" % (ref.format_ref(), e)) 178 | 179 | elif op.get_operation_type() == Flatpak.TransactionOperationType.INSTALL: 180 | ref = Flatpak.Ref.parse(op.get_ref()) 181 | debug("Install: ", op.get_ref()) 182 | try: 183 | remote_ref = self.fp_sys.fetch_remote_ref_sync(op.get_remote(), 184 | ref.get_kind(), 185 | ref.get_name(), 186 | ref.get_arch(), 187 | ref.get_branch(), 188 | None) 189 | except GLib.Error as e: 190 | debug("Can't add ref to install: %s" % e.message) 191 | remote_ref = None 192 | 193 | pkginfo = self.installer.find_pkginfo(ref.format_ref(), installer.PKG_TYPE_FLATPAK, remote=op.get_remote()) 194 | try: 195 | update = FlatpakUpdate(op, self.installer, ref, None, remote_ref, pkginfo) 196 | 197 | if self.is_base_package(update) or (not self.add_to_parent_update(update)): 198 | self.updates.append(update) 199 | except Exception as e: 200 | warn("Problem creating FlatpakUpdate for %s: %s" % (ref.format_ref(), e)) 201 | task.cancel() 202 | 203 | def add_to_parent_update(self, update): 204 | for maybe_parent in self.updates: 205 | if not update.ref_name.startswith(maybe_parent.ref_name): 206 | continue 207 | 208 | kf = update.metadata 209 | 210 | try: 211 | extension_of = kf.get_string("ExtensionOf", "ref") 212 | if extension_of == maybe_parent.ref.format_ref(): 213 | maybe_parent.add_package(update) 214 | return True 215 | except: 216 | pass 217 | 218 | try: 219 | runtime_ref_id = "runtime/%s" % kf.get_string("Runtime", "runtime") 220 | 221 | parent_ref = maybe_parent.ref.format_ref() 222 | if parent_ref == runtime_ref_id: 223 | maybe_parent.add_package(update) 224 | return True 225 | except: 226 | pass 227 | 228 | def is_base_package(self, update): 229 | name = update.ref.format_ref() 230 | if name.startswith("app"): 231 | return True 232 | try: 233 | kf = update.metadata 234 | runtime_ref_id = "runtime/%s" % kf.get_string("Runtime", "runtime") 235 | if name == runtime_ref_id: 236 | return True 237 | except Exception: 238 | return False 239 | 240 | def prepare_start_updates(self, updates): 241 | if self.cancellable.is_cancelled(): 242 | return 243 | 244 | debug("creating real update task") 245 | self.error = None 246 | 247 | self.installer.select_flatpak_updates(updates, 248 | self._start_task_ready, self._start_updates_error, 249 | self._execute_finished, None) 250 | 251 | def _start_task_ready(self, task): 252 | self.task = task 253 | self.send_to_updater("ready") 254 | 255 | self.stdin.read_bytes_async(4096, GLib.PRIORITY_DEFAULT, None, self.message_from_updater) 256 | 257 | def _start_updates_error(self, task): 258 | warn("start updates error", task.error_message) 259 | self.send_to_updater(f"error:{task.error_message}") 260 | 261 | def start_updates(self): 262 | self.installer.execute_task(self.task) 263 | 264 | def _execute_finished(self, task): 265 | self.error = task.error_message 266 | if task.error_message is not None: 267 | self.send_to_updater(f"error:{task.error_message}") 268 | else: 269 | self.send_to_updater("done") 270 | self.write_to_log(task) 271 | self.quit() 272 | 273 | def write_to_log(self, task): 274 | try: 275 | entries = task.get_transaction_log() 276 | except: 277 | return 278 | 279 | directory = Path(LOG_PATH).parent 280 | 281 | try: 282 | os.makedirs(directory, exist_ok=True) 283 | with open(LOG_PATH, "a") as f: 284 | for entry in entries: 285 | f.write("%s\n" % entry) 286 | except Exception as e: 287 | warn("Can't write to flatpak update log:", e) 288 | 289 | def send_to_updater(self, msg): 290 | print(msg, flush=True) 291 | 292 | def message_from_updater(self, pipe, res): 293 | if self.cancellable is None or self.cancellable.is_cancelled(): 294 | return 295 | 296 | try: 297 | bytes_read = pipe.read_bytes_finish(res) 298 | except GLib.Error as e: 299 | if e.code != Gio.IOErrorEnum.CANCELLED: 300 | warn("Error reading from updater: %s" % e.message) 301 | return 302 | 303 | if bytes_read: 304 | message = bytes_read.get_data().decode().strip("\n") 305 | debug("receiving from updater: '%s'" % message) 306 | 307 | if message == "confirm": 308 | self.confirm_start() 309 | elif message == "start": 310 | self.start_updates() 311 | 312 | pipe.read_bytes_async(4096, GLib.PRIORITY_DEFAULT, self.cancellable, self.message_from_updater) 313 | 314 | def quit(self, data=None): 315 | GLib.timeout_add(0, self.quit_on_ml) 316 | 317 | def quit_on_ml(self): 318 | if self.task: 319 | self.task.cancel() 320 | 321 | self.cancellable.cancel() 322 | Gtk.main_quit() 323 | 324 | if __name__ == "__main__": 325 | parser = argparse.ArgumentParser(description="Flatpak worker for mintupdate") 326 | parser.add_argument("-d", "--debug", help="Print debugging information.", 327 | action="store_true") 328 | parser.add_argument("-r", "--refresh", help="Refresh local flatpak cache and appstream info.", 329 | action="store_true") 330 | parser.add_argument("-f", "--fetch-updates", help="Get a json list of update info.", 331 | action="store_true") 332 | parser.add_argument("-u", "--update-packages", help="Updates packages - one or more flatpak ref strings must be supplied. " 333 | "This process will remain running for communication.", 334 | action="store_true") 335 | 336 | parser.add_argument('refs', metavar='ref', type=str, nargs='*', help='refs to update') 337 | args = parser.parse_args() 338 | 339 | updater = FlatpakUpdateWorker() 340 | GLib.unix_signal_add(GLib.PRIORITY_HIGH, signal.SIGTERM, updater.quit, None) 341 | 342 | if args.refresh: 343 | try: 344 | updater.refresh() 345 | exit(0) 346 | except Exception as e: 347 | print(e) 348 | exit(1) 349 | elif args.fetch_updates: 350 | updater.fetch_updates() 351 | elif args.update_packages: 352 | if len(args.refs) == 0: 353 | print("Expected one or more space-separated flatpak refs") 354 | exit(1) 355 | updater.prepare_start_updates(args.refs) 356 | else: 357 | print("nothing to do") 358 | exit(0) 359 | 360 | try: 361 | Gtk.main() 362 | except KeyboardInterrupt: 363 | Gtk.main_quit() 364 | 365 | exit(0) 366 | --------------------------------------------------------------------------------