diff --git a/README.md b/README.md index 20b693b..db9873a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Once a new package is added, it takes priority over the original one from Ubuntu so they never enter into the repo from upstream and need to be compiled with this helpers and pushed into reprepro. -To add a package to the list, follow the [CONTRIBUTING](https://gitlab.trisquel.org/trisquel/package-helpers/blob/nabia/CONTRIBUTING.md) guidelines. +To add a package to the list, follow the [CONTRIBUTING](CONTRIBUTING.md) guidelines. ## Steps @@ -39,7 +39,7 @@ Those are the steps done by the helpers: * You don't need to use sudo in order to run those scripts, but some extra packages are needed: - `sudo apt-get install cdbs devscripts dpkg-dev git gnupg gnupg2 patch python2 quilt rename rpl sed python3-jsonschema` + `sudo apt-get install cdbs devscripts dpkg-dev git gnupg gnupg2 patch quilt rename rpl sed python3-jsonschema` * Take care to use the right sourcePackageName, many source packages produce several binary packages. `apt-cache showsrc binary-package` can help you. diff --git a/helpers/DATA/akregator/trisquel_feeds.patch b/helpers/DATA/akregator/trisquel_feeds.patch index 7d54c10..cc88808 100644 --- a/helpers/DATA/akregator/trisquel_feeds.patch +++ b/helpers/DATA/akregator/trisquel_feeds.patch @@ -1,5 +1,5 @@ ---- src/akregator_part.cpp 2020-06-05 11:41:23.000000000 -0500 -+++ src/akregator_part_trisquel.cpp 2020-06-05 12:46:05.914051386 -0500 +--- a/src/akregator_part.cpp 2020-06-05 11:41:23.000000000 -0500 ++++ b/src/akregator_part.cpp 2020-06-05 12:46:05.914051386 -0500 @@ -189,6 +189,61 @@ wire.setAttribute(QStringLiteral("xmlUrl"), QStringLiteral("http://wire.kubuntu.org/?feed=rss2")); kubuntuFolder.appendChild(wire); diff --git a/helpers/DATA/apparmor/002-add-unconfined-profile-firefox-icedove.patch b/helpers/DATA/apparmor/002-add-unconfined-profile-firefox-icedove-icecat.patch similarity index 69% rename from helpers/DATA/apparmor/002-add-unconfined-profile-firefox-icedove.patch rename to helpers/DATA/apparmor/002-add-unconfined-profile-firefox-icedove-icecat.patch index d5a95ec..a48c7ff 100644 --- a/helpers/DATA/apparmor/002-add-unconfined-profile-firefox-icedove.patch +++ b/helpers/DATA/apparmor/002-add-unconfined-profile-firefox-icedove-icecat.patch @@ -30,8 +30,24 @@ index 060eb24d..667b1674 100644 - include if exists + include if exists } +diff --git a/profiles/apparmor.d/icecat b/profiles/apparmor.d/icecat +index 4071c345..148e445e 100644 +--- a/profiles/apparmor.d/icecat ++++ b/profiles/apparmor.d/icecat +@@ -4,9 +4,9 @@ + abi , + include + +-profile firefox /{usr/lib/firefox{,-esr,-beta,-devedition,-nightly},opt/firefox}/firefox{,-esr,-bin} flags=(unconfined) { ++profile icecat /{usr/lib/icecat{,-esr,-beta,-devedition,-nightly},opt/icecat}/icecat{,-esr,-bin} flags=(unconfined) { + userns, + + # Site-specific additions and overrides. See local/README for details. +- include if exists ++ include if exists + } diff --git a/debian/apparmor.install b/debian/apparmor.install -index 79c8700e..2971e426 100644 +index 9cdaa3a2..d9ee697c 100644 --- a/debian/apparmor.install +++ b/debian/apparmor.install @@ -68,6 +68,7 @@ etc/apparmor.d/sbuild-update @@ -42,11 +58,13 @@ index 79c8700e..2971e426 100644 etc/apparmor.d/thunderbird etc/apparmor.d/toybox etc/apparmor.d/trinity -@@ -83,6 +84,7 @@ etc/apparmor.d/1password +@@ -83,7 +84,9 @@ etc/apparmor.d/1password etc/apparmor.d/Discord etc/apparmor.d/MongoDB_Compass etc/apparmor.d/code +etc/apparmor.d/abrowser etc/apparmor.d/firefox ++etc/apparmor.d/icecat etc/apparmor.d/github-desktop etc/apparmor.d/obsidian + etc/apparmor.d/opera diff --git a/helpers/DATA/apparmor/003-add-extra-abrowser-profile.patch b/helpers/DATA/apparmor/003-add-extra-abrowser-profile.patch deleted file mode 100644 index 6122296..0000000 --- a/helpers/DATA/apparmor/003-add-extra-abrowser-profile.patch +++ /dev/null @@ -1,91 +0,0 @@ -diff --git a/profiles/apparmor/profiles/extras/abrowser b/profiles/apparmor/profiles/extras/abrowser -index c7b4aa7c..ed8f01c5 100644 ---- a/profiles/apparmor/profiles/extras/abrowser -+++ b/profiles/apparmor/profiles/extras/abrowser -@@ -14,7 +14,7 @@ abi , - include - - # Declare some variables to help with variants --@{MOZ_APP_NAME}=firefox{,-esr} -+@{MOZ_APP_NAME}=abrowser{,-esr} - @{MOZ_LIBDIR}=/usr/lib/@{MOZ_APP_NAME}{,-[0-9]*} - @{MOZ_ADDONDIR}=/usr/lib/{@{MOZ_APP_NAME},xulrunner}-addons - -@@ -22,7 +22,7 @@ include - # /usr/lib/firefox-4.0b8/firefox - # but not: - # /usr/lib/firefox-4.0b8/firefox.sh --profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { -+profile abrowser @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { - include - include - include -@@ -144,8 +144,8 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { - /etc/wildmidi/wildmidi.cfg r, - - # firefox specific -- /etc/firefox*/ r, -- /etc/firefox*/** r, -+ /etc/abrowser*/ r, -+ /etc/abrowser*/** r, - /etc/xul-ext/** r, - /etc/xulrunner{,-[0-9]*}/ r, - /etc/xulrunner{,-[0-9]*}/** r, -@@ -234,12 +234,12 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { - owner @{HOME}/.thumbnails/*/*.png r, - - # per-user firefox configuration -- owner @{HOME}/.{firefox,mozilla}/ rw, -- owner @{HOME}/.{firefox,mozilla}/** rw, -- owner @{HOME}/.{firefox,mozilla}/**/*.{db,parentlock,sqlite}* k, -- owner @{HOME}/.{firefox,mozilla}/plugins/** rm, -- owner @{HOME}/.{firefox,mozilla}/**/plugins/** rm, -- owner @{HOME}/.gnome2/firefox* rwk, -+ owner @{HOME}/.{abrowser,mozilla}/ rw, -+ owner @{HOME}/.{abrowser,mozilla}/** rw, -+ owner @{HOME}/.{abrowser,mozilla}/**/*.{db,parentlock,sqlite}* k, -+ owner @{HOME}/.{abrowser,mozilla}/plugins/** rm, -+ owner @{HOME}/.{abrowser,mozilla}/**/plugins/** rm, -+ owner @{HOME}/.gnome2/abrowser* rwk, - owner @{HOME}/.cache/mozilla/{,@{MOZ_APP_NAME}/} rw, - owner @{HOME}/.cache/mozilla/@{MOZ_APP_NAME}/** rw, - owner @{HOME}/.cache/mozilla/@{MOZ_APP_NAME}/**/*.sqlite k, -@@ -440,7 +440,7 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { - owner @{HOME}/.mozilla/**/extensions/** mixr, - - # Widevine CDM plugin (LP: #1777070) -- owner @{HOME}/.mozilla/firefox/*/gmp-widevinecdm/*/libwidevinecdm.so m, -+ owner @{HOME}/.mozilla/abrowser/*/gmp-widevinecdm/*/libwidevinecdm.so m, - - deny @{MOZ_LIBDIR}/update.test w, - deny /usr/lib/mozilla/extensions/**/ w, -@@ -458,7 +458,7 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { - - /usr/bin/lsb_release Pxr -> lsb_release, - -- # These should be started outside of Firefox -+ # These should be started outside of abrowser - deny /usr/bin/dbus-launch x, - deny /usr/bin/speech-dispatcher x, - -@@ -466,6 +466,6 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { - include if exists - - # Site-specific additions and overrides. See local/README for details. -- include if exists -- include if exists -+ include if exists -+ include if exists - } -diff --git a/debian/apparmor-profiles.install b/debian/apparmor-profiles.install -index d12ab262..a6ea623d 100644 ---- a/debian/apparmor-profiles.install -+++ b/debian/apparmor-profiles.install -@@ -86,6 +86,7 @@ usr/share/apparmor/extra-profiles/usr.lib.GConf.2.gconfd-2 - usr/share/apparmor/extra-profiles/usr.lib.RealPlayer10.realplay - usr/share/apparmor/extra-profiles/usr.lib.bonobo.bonobo-activation-server - usr/share/apparmor/extra-profiles/usr.lib.evolution-data-server.evolution-data-server-1.10 -+usr/share/apparmor/extra-profiles/abrowser - usr/share/apparmor/extra-profiles/firefox - usr/share/apparmor/extra-profiles/firefox.sh - usr/share/apparmor/extra-profiles/usr.lib.firefox.mozilla-xremote-client diff --git a/helpers/DATA/apparmor/003-add-extra-profile-for-abrowser-icecat.patch b/helpers/DATA/apparmor/003-add-extra-profile-for-abrowser-icecat.patch new file mode 100644 index 0000000..d156906 --- /dev/null +++ b/helpers/DATA/apparmor/003-add-extra-profile-for-abrowser-icecat.patch @@ -0,0 +1,173 @@ +diff --git a/profiles/apparmor/profiles/extras/icecat b/profiles/apparmor/profiles/extras/icecat +index cbe1aa80..71813e99 100644 +--- a/profiles/apparmor/profiles/extras/icecat ++++ b/profiles/apparmor/profiles/extras/icecat +@@ -14,7 +14,7 @@ abi , + include + + # Declare some variables to help with variants +-@{MOZ_APP_NAME}=firefox{,-esr} ++@{MOZ_APP_NAME}=icecat{,-esr} + @{MOZ_LIBDIR}=/usr/lib/@{MOZ_APP_NAME}{,-[0-9]*} + @{MOZ_ADDONDIR}=/usr/lib/{@{MOZ_APP_NAME},xulrunner}-addons + +@@ -22,7 +22,7 @@ include + # /usr/lib/firefox-4.0b8/firefox + # but not: + # /usr/lib/firefox-4.0b8/firefox.sh +-profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { ++profile icecat @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + include + include + include +@@ -144,8 +144,8 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + /etc/wildmidi/wildmidi.cfg r, + + # firefox specific +- /etc/firefox*/ r, +- /etc/firefox*/** r, ++ /etc/icecat*/ r, ++ /etc/icecat*/** r, + /etc/xul-ext/** r, + /etc/xulrunner{,-[0-9]*}/ r, + /etc/xulrunner{,-[0-9]*}/** r, +@@ -234,12 +234,12 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + owner @{HOME}/.thumbnails/*/*.png r, + + # per-user firefox configuration +- owner @{HOME}/.{firefox,mozilla}/ rw, +- owner @{HOME}/.{firefox,mozilla}/** rw, +- owner @{HOME}/.{firefox,mozilla}/**/*.{db,parentlock,sqlite}* k, +- owner @{HOME}/.{firefox,mozilla}/plugins/** rm, +- owner @{HOME}/.{firefox,mozilla}/**/plugins/** rm, +- owner @{HOME}/.gnome2/firefox* rwk, ++ owner @{HOME}/.{icecat,mozilla}/ rw, ++ owner @{HOME}/.{icecat,mozilla}/** rw, ++ owner @{HOME}/.{icecat,mozilla}/**/*.{db,parentlock,sqlite}* k, ++ owner @{HOME}/.{icecat,mozilla}/plugins/** rm, ++ owner @{HOME}/.{icecat,mozilla}/**/plugins/** rm, ++ owner @{HOME}/.gnome2/icecat* rwk, + owner @{HOME}/.cache/mozilla/{,@{MOZ_APP_NAME}/} rw, + owner @{HOME}/.cache/mozilla/@{MOZ_APP_NAME}/** rw, + owner @{HOME}/.cache/mozilla/@{MOZ_APP_NAME}/**/*.sqlite{,-shm} k, +@@ -440,7 +440,7 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + owner @{HOME}/.mozilla/**/extensions/** mixr, + + # Widevine CDM plugin (LP: #1777070) +- owner @{HOME}/.mozilla/firefox/*/gmp-widevinecdm/*/libwidevinecdm.so m, ++ owner @{HOME}/.mozilla/icecat/*/gmp-widevinecdm/*/libwidevinecdm.so m, + + deny @{MOZ_LIBDIR}/update.test w, + deny /usr/lib/mozilla/extensions/**/ w, +@@ -458,7 +458,7 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + + /usr/bin/lsb_release Pxr -> lsb_release, + +- # These should be started outside of Firefox ++ # These should be started outside of icecat + deny /usr/bin/dbus-launch x, + deny /usr/bin/speech-dispatcher x, + +@@ -466,6 +466,6 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + include if exists + + # Site-specific additions and overrides. See local/README for details. +- include if exists +- include if exists ++ include if exists ++ include if exists + } +diff --git a/profiles/apparmor/profiles/extras/firefox b/profiles/apparmor/profiles/extras/abrowser +index cbe1aa80..2fb77651 100644 +--- a/profiles/apparmor/profiles/extras/firefox ++++ b/profiles/apparmor/profiles/extras/abrowser +@@ -14,7 +14,7 @@ abi , + include + + # Declare some variables to help with variants +-@{MOZ_APP_NAME}=firefox{,-esr} ++@{MOZ_APP_NAME}=abrowser{,-esr} + @{MOZ_LIBDIR}=/usr/lib/@{MOZ_APP_NAME}{,-[0-9]*} + @{MOZ_ADDONDIR}=/usr/lib/{@{MOZ_APP_NAME},xulrunner}-addons + +@@ -22,7 +22,7 @@ include + # /usr/lib/firefox-4.0b8/firefox + # but not: + # /usr/lib/firefox-4.0b8/firefox.sh +-profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { ++profile abrowser @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + include + include + include +@@ -144,8 +144,8 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + /etc/wildmidi/wildmidi.cfg r, + + # firefox specific +- /etc/firefox*/ r, +- /etc/firefox*/** r, ++ /etc/abrowser*/ r, ++ /etc/abrowser*/** r, + /etc/xul-ext/** r, + /etc/xulrunner{,-[0-9]*}/ r, + /etc/xulrunner{,-[0-9]*}/** r, +@@ -234,12 +234,12 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + owner @{HOME}/.thumbnails/*/*.png r, + + # per-user firefox configuration +- owner @{HOME}/.{firefox,mozilla}/ rw, +- owner @{HOME}/.{firefox,mozilla}/** rw, +- owner @{HOME}/.{firefox,mozilla}/**/*.{db,parentlock,sqlite}* k, +- owner @{HOME}/.{firefox,mozilla}/plugins/** rm, +- owner @{HOME}/.{firefox,mozilla}/**/plugins/** rm, +- owner @{HOME}/.gnome2/firefox* rwk, ++ owner @{HOME}/.{abrowser,mozilla}/ rw, ++ owner @{HOME}/.{abrowser,mozilla}/** rw, ++ owner @{HOME}/.{abrowser,mozilla}/**/*.{db,parentlock,sqlite}* k, ++ owner @{HOME}/.{abrowser,mozilla}/plugins/** rm, ++ owner @{HOME}/.{abrowser,mozilla}/**/plugins/** rm, ++ owner @{HOME}/.gnome2/abrowser* rwk, + owner @{HOME}/.cache/mozilla/{,@{MOZ_APP_NAME}/} rw, + owner @{HOME}/.cache/mozilla/@{MOZ_APP_NAME}/** rw, + owner @{HOME}/.cache/mozilla/@{MOZ_APP_NAME}/**/*.sqlite{,-shm} k, +@@ -440,7 +440,7 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + owner @{HOME}/.mozilla/**/extensions/** mixr, + + # Widevine CDM plugin (LP: #1777070) +- owner @{HOME}/.mozilla/firefox/*/gmp-widevinecdm/*/libwidevinecdm.so m, ++ owner @{HOME}/.mozilla/abrowser/*/gmp-widevinecdm/*/libwidevinecdm.so m, + + deny @{MOZ_LIBDIR}/update.test w, + deny /usr/lib/mozilla/extensions/**/ w, +@@ -458,7 +458,7 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + + /usr/bin/lsb_release Pxr -> lsb_release, + +- # These should be started outside of Firefox ++ # These should be started outside of abrowser + deny /usr/bin/dbus-launch x, + deny /usr/bin/speech-dispatcher x, + +@@ -466,6 +466,6 @@ profile firefox @{MOZ_LIBDIR}/@{MOZ_APP_NAME}{,*[^s][^h]} { + include if exists + + # Site-specific additions and overrides. See local/README for details. +- include if exists +- include if exists ++ include if exists ++ include if exists + } +diff --git a/debian/apparmor-profiles.install b/debian/apparmor-profiles.install +index 5cecd9dd..62531edb 100644 +--- a/debian/apparmor-profiles.install ++++ b/debian/apparmor-profiles.install +@@ -88,8 +88,10 @@ usr/share/apparmor/extra-profiles/usr.lib.GConf.2.gconfd-2 + usr/share/apparmor/extra-profiles/usr.lib.RealPlayer10.realplay + usr/share/apparmor/extra-profiles/usr.lib.bonobo.bonobo-activation-server + usr/share/apparmor/extra-profiles/usr.lib.evolution-data-server.evolution-data-server-1.10 ++usr/share/apparmor/extra-profiles/abrowser + usr/share/apparmor/extra-profiles/firefox + usr/share/apparmor/extra-profiles/firefox.sh ++usr/share/apparmor/extra-profiles/icecat + usr/share/apparmor/extra-profiles/usr.lib.firefox.mozilla-xremote-client + usr/share/apparmor/extra-profiles/usr.lib.man-db.man + usr/share/apparmor/extra-profiles/postfix-anvil diff --git a/helpers/DATA/apparmor/004-update-profile-extra-firefox-sh.patch b/helpers/DATA/apparmor/004-update-profile-extra-firefox-sh.patch index d36f9c3..839d606 100644 --- a/helpers/DATA/apparmor/004-update-profile-extra-firefox-sh.patch +++ b/helpers/DATA/apparmor/004-update-profile-extra-firefox-sh.patch @@ -1,8 +1,8 @@ diff --git a/profiles/apparmor/profiles/extras/firefox.sh b/profiles/apparmor/profiles/extras/firefox.sh -index fb75c5b6..83a7404c 100644 +index fb75c5b6..7b23cd83 100644 --- a/profiles/apparmor/profiles/extras/firefox.sh +++ b/profiles/apparmor/profiles/extras/firefox.sh -@@ -22,3 +22,22 @@ profile firefox.sh /usr/lib/firefox/firefox.sh { +@@ -22,3 +22,41 @@ profile firefox.sh /usr/lib/firefox/firefox.sh { # Site-specific additions and overrides. See local/README for details. include if exists } @@ -25,3 +25,22 @@ index fb75c5b6..83a7404c 100644 + # Site-specific additions and overrides. See local/README for details. + include if exists +} ++ ++profile firefox.sh /usr/lib/icecat/firefox.sh { ++ include ++ include ++ include ++ ++ deny capability sys_ptrace, ++ ++ /{usr/,}bin/basename rix, ++ /{usr/,}bin/bash rix, ++ /{usr/,}bin/grep rix, ++ /etc/magic r, ++ /usr/bin/file rix, ++ /usr/lib/icecat/icecat px, ++ /usr/share/misc/magic.mgc r, ++ ++ # Site-specific additions and overrides. See local/README for details. ++ include if exists ++} diff --git a/helpers/DATA/apt-setup/50mirror.trisquel b/helpers/DATA/apt-setup/50mirror.trisquel new file mode 100755 index 0000000..28d603d --- /dev/null +++ b/helpers/DATA/apt-setup/50mirror.trisquel @@ -0,0 +1,122 @@ +#!/bin/sh +set -e + +. /usr/share/debconf/confmodule + +file="$1" + +log() { + logger -t apt-setup "$@" +} +warning() { + log "warning: $@" +} + +# Ask if a mirror should be used if the base system can be installed from CD +if [ -e /cdrom/.disk/base_installable ] || [ "$OVERRIDE_BASE_INSTALLABLE" ]; then + if ! search-path choose-mirror; then + warning "choose-mirror is not available; cannot offer network mirror" + exit 1 + fi + + # Default to false if no network selected in netcfg + if db_get netcfg/dhcp_options && \ + [ "$RET" = "Do not configure the network at this time" ]; then + use_mirror=false + fi + + # Set default if no value (see Debian mirror generator) + db_get apt-setup/use_mirror + [ "$RET" ] || db_set apt-setup/use_mirror true + + # Text is variable for Debian + db_metaget apt-mirror/use/netinst_old description + db_subst apt-setup/use_mirror EXPLANATION "$RET" + + db_input medium apt-setup/use_mirror || [ $? -eq 30 ] + db_go # or exit 10 + + db_get apt-setup/use_mirror + if [ "$RET" = false ]; then + exit 1 + fi + + if db_get cdrom/codename && [ "$RET" ]; then + db_set mirror/codename $RET + fi + if db_get cdrom/suite && [ "$RET" ]; then + db_set mirror/suite $RET + fi + choose-mirror -n # no progress bar +fi + +db_input low apt-setup/backports || true + +dists="main" + +db_get mirror/protocol +protocol="$RET" +db_get mirror/codename +codename="$RET" +db_get mirror/$protocol/hostname +hostname="$RET" +db_get mirror/$protocol/directory +directory="/${RET#/}" + +if [ "$protocol" = http ]; then + db_get mirror/$protocol/proxy + proxy="$RET" + if [ -n "$proxy" ]; then + if ! grep -iq "Acquire::$protocol::Proxy" $ROOT/etc/apt/apt.conf.new; then + echo "Acquire::$protocol::Proxy \"$proxy\";" >> $ROOT/etc/apt/apt.conf.new + fi + fi +fi + +# Trisquel: Deb822-first, keep legacy clean +: "${ROOT:=/target}" +SD="$ROOT/etc/apt/sources.list.d" +SF="$SD/trisquel.sources" +mkdir -p "$SD" + +# Use keyring in /usr/share/keyrings +SIGNED_BY="/usr/share/keyrings/trisquel-archive-keyring.gpg" + +# Canonical URI for Deb822 (trailing slash) +uri="$protocol://$hostname$directory" +case "$uri" in */) : ;; *) uri="$uri/";; esac + +# Write Deb822 sources file in the requested structure +cat << EOF > "$SF" +# Trisquel repositories for supported software and updates +Types: deb +URIs: ${uri} +Suites: ${codename} ${codename}-updates ${codename}-security +Components: main +Signed-By: ${SIGNED_BY} + +# Source package repositories +Types: deb-src +URIs: ${uri} +Suites: ${codename} ${codename}-updates ${codename}-security +Components: main +Signed-By: ${SIGNED_BY} + +# Optional backports repository +Enabled: no +Types: deb deb-src +URIs: ${uri} +Suites: ${codename}-backports +Components: main +Signed-By: ${SIGNED_BY} +EOF + +# Set legacy format for apt-setup to apply updates correctly. +{ + echo "deb ${uri} ${codename} main" + echo "deb ${uri} ${codename}-updates main" + echo "deb ${uri} ${codename}-security main" +} >> "$file" + +exit 0 + diff --git a/helpers/DATA/apt-setup/93trisquel-sources-clean b/helpers/DATA/apt-setup/93trisquel-sources-clean new file mode 100755 index 0000000..6dab379 --- /dev/null +++ b/helpers/DATA/apt-setup/93trisquel-sources-clean @@ -0,0 +1,11 @@ +#!/bin/sh +set -e + +LEGACY=/target/etc/apt/sources.list +SD=/target/etc/apt/sources.list.d + +if ls "$SD"/*.sources >/dev/null 2>&1; then + MSG="# Trisquel sources have moved to /etc/apt/sources.list.d/trisquel.sources" + printf '%s\n' "$MSG" > "$LEGACY" +fi +exit 0 diff --git a/helpers/DATA/apt-setup/99deb822-breadcrumb b/helpers/DATA/apt-setup/99deb822-breadcrumb new file mode 100755 index 0000000..efc34c3 --- /dev/null +++ b/helpers/DATA/apt-setup/99deb822-breadcrumb @@ -0,0 +1,18 @@ +#!/bin/sh +set -e +. /usr/share/debconf/confmodule + +file="$1" +ROOT="${ROOT:-/target}" +LEGACY="$ROOT/etc/apt/sources.list" +SD="$ROOT/etc/apt/sources.list.d" +SAVETO="$ROOT/etc/apt/sources.list.new" + +# If .sources exist, leave sources.list reduced only as a breadcrumb +if ls "$SD"/*.sources >/dev/null 2>&1; then + MSG="# Trisquel sources have moved to /etc/apt/sources.list.d/trisquel.sources" + : > "$SAVETO" + printf '%s\n' "$MSG" > "$file" +fi + +exit 0 diff --git a/helpers/DATA/casper/35apparmor_abrowser b/helpers/DATA/casper/35apparmor_abrowser deleted file mode 100644 index dffa611..0000000 --- a/helpers/DATA/casper/35apparmor_abrowser +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh - -PREREQ="" -DESCRIPTION="Enabling Abrowser apparmor profile..." - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -. /scripts/casper-functions - -log_begin_msg "$DESCRIPTION" - -cat << EOF > /root/etc/rc.local -#!/bin/sh -# Enable apparmor profile during live session to allow Abrowser to create user namespaces -[ -d /rofs ] && apparmor_parser -a /etc/apparmor.d/abrowser -EOF -chmod 755 /root/etc/rc.local - -log_end_msg diff --git a/helpers/DATA/casper/36apparmor_live b/helpers/DATA/casper/36apparmor_live new file mode 100644 index 0000000..094a847 --- /dev/null +++ b/helpers/DATA/casper/36apparmor_live @@ -0,0 +1,61 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Enabling Live apparmor profiles..." + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. /scripts/casper-functions + +log_begin_msg "$DESCRIPTION" + +RC_EXIST=0 + +if [ ! -e /root/etc/rc.local ]; then + umask 022 + mkdir -p /root/etc + cat << 'EOF' > /root/etc/rc.local +#!/bin/sh +exit 0 +EOF + chmod 755 /root/etc/rc.local + RC_EXIST=1 +fi + +if [ "$RC_EXIST" -eq 0 ]; then + head -n1 /root/etc/rc.local | grep -q '^#!' || sed -i '1s|^|#!/bin/sh\n|' /root/etc/rc.local + sed -i 's/\r$//' /root/etc/rc.local + chmod 755 /root/etc/rc.local +fi + +if ! grep -q 'BEGIN trisquel-live-apparmor' /root/etc/rc.local 2>/dev/null; then + sed -i '/^exit 0$/d' /root/etc/rc.local + cat << 'EOF' >> /root/etc/rc.local +# --- BEGIN trisquel-live-apparmor --- +if [ -d /rofs ]; then + /usr/lib/casper/casper-apparmor-live || true +fi +# --- END trisquel-live-apparmor --- +EOF + echo 'exit 0' >> /root/etc/rc.local +fi + +mkdir -p /root/etc/apt/apt.conf.d +cat << 'APT' > /root/etc/apt/apt.conf.d/99-apparmor-live-hook +# /etc/apt/apt.conf.d/99-apparmor-live-hook +DPkg::Post-Invoke { "sh -c '[ -d /rofs ] && /usr/lib/casper/casper-apparmor-live || true'"; }; +APT +chmod 644 /root/etc/apt/apt.conf.d/99-apparmor-live-hook + +log_end_msg diff --git a/helpers/DATA/casper/set_trisquel_iso_suggestion.patch b/helpers/DATA/casper/patch_changes/000-set_trisquel_iso_suggestion.patch similarity index 100% rename from helpers/DATA/casper/set_trisquel_iso_suggestion.patch rename to helpers/DATA/casper/patch_changes/000-set_trisquel_iso_suggestion.patch diff --git a/helpers/DATA/casper/patch_changes/001-fix_disable_kde_services_triskel_live.patch b/helpers/DATA/casper/patch_changes/001-fix_disable_kde_services_triskel_live.patch new file mode 100644 index 0000000..f0e0dff --- /dev/null +++ b/helpers/DATA/casper/patch_changes/001-fix_disable_kde_services_triskel_live.patch @@ -0,0 +1,13 @@ +diff --git a/scripts/casper-bottom/34disable_kde_services b/scripts/casper-bottom/34disable_kde_services +index f368ec2e..caa76986 100755 +--- a/scripts/casper-bottom/34disable_kde_services ++++ b/scripts/casper-bottom/34disable_kde_services +@@ -20,7 +20,7 @@ esac + + log_begin_msg "$DESCRIPTION" + +-for pkg in kubuntu-default-settings ubuntustudio; do ++for pkg in triskel-default-settings kubuntu-default-settings ubuntustudio; do + settingsdir="/root/usr/share/$pkg/kf5-settings" + [ -d "$settingsdir" ] || continue + printf "[Daemon]\nTimeout=0\nAutolock=false\nLockOnResume=false\n" >> "$settingsdir"/kscreenlockerrc diff --git a/helpers/DATA/casper/patch_changes/002-setup_apparmor_live_reload.patch b/helpers/DATA/casper/patch_changes/002-setup_apparmor_live_reload.patch new file mode 100644 index 0000000..d78ec82 --- /dev/null +++ b/helpers/DATA/casper/patch_changes/002-setup_apparmor_live_reload.patch @@ -0,0 +1,29 @@ +diff --git a/debian/casper.install b/debian/casper.install +index 5eb58de8..248d17d0 100644 +--- a/debian/casper.install ++++ b/debian/casper.install +@@ -10,4 +10,5 @@ bin/casper-update-initramfs usr/share/casper + hooks usr/share/initramfs-tools + scripts usr/share/initramfs-tools + casper-md5check/casper-md5check usr/lib/casper ++extra/casper-apparmor-live usr/lib/casper + casper.conf etc +diff --git a/extra/casper-apparmor-live b/extra/casper-apparmor-live +new file mode 100755 +index 00000000..c11b80ad +--- /dev/null ++++ b/extra/casper-apparmor-live +@@ -0,0 +1,13 @@ ++#!/bin/sh ++# /usr/lib/casper/casper-apparmor-live ++[ -d /rofs ] || exit 0 ++find /etc/apparmor.d -type f \ ++ ! -path "/etc/apparmor.d/abstractions/*" \ ++ ! -path "/etc/apparmor.d/tunables/*" \ ++ ! -path "/etc/apparmor.d/local/*" \ ++ ! -path "/etc/apparmor.d/disable/*" \ ++ ! -path "/etc/apparmor.d/rsyslog.d/*" \ ++ ! -path "/etc/apparmor.d/force-complain/*" \ ++ ! -path "/etc/apparmor.d/apache2.d/*" \ ++ ! -path "/etc/apparmor.d/abi/*" \ ++ -print0 | xargs -0 -r -n1 apparmor_parser -r -T -W || true diff --git a/helpers/DATA/debconf/patch_changes/000-add_Template_undef_guard.patch b/helpers/DATA/debconf/patch_changes/000-add_Template_undef_guard.patch new file mode 100644 index 0000000..e30df28 --- /dev/null +++ b/helpers/DATA/debconf/patch_changes/000-add_Template_undef_guard.patch @@ -0,0 +1,12 @@ +diff --git a/Debconf/Template.pm b/Debconf/Template.pm +index 9ab4833d..c3649929 100644 +--- a/Debconf/Template.pm ++++ b/Debconf/Template.pm +@@ -140,6 +140,7 @@ Get an existing template (it may be pulled out of the database, etc). + sub get { + my Debconf::Template $this=shift; + my $template=shift; ++ return unless defined $template && length $template; + return $template{$template} if exists $template{$template}; + if ($Debconf::Db::templates->exists($template)) { + $this = fields::new($this); diff --git a/helpers/DATA/debconf/patch_changes/001-add_DbDriver_Cache_undef_guard.patch b/helpers/DATA/debconf/patch_changes/001-add_DbDriver_Cache_undef_guard.patch new file mode 100644 index 0000000..8f3b8ba --- /dev/null +++ b/helpers/DATA/debconf/patch_changes/001-add_DbDriver_Cache_undef_guard.patch @@ -0,0 +1,12 @@ +diff --git a/Debconf/DbDriver/Cache.pm b/Debconf/DbDriver/Cache.pm +index 1b0e36fb..2e80d3bb 100644 +--- a/Debconf/DbDriver/Cache.pm ++++ b/Debconf/DbDriver/Cache.pm +@@ -122,6 +122,7 @@ undef -- marked as deleted in the cache, so does not exist + sub exists { + my $this=shift; + my $item=shift; ++ return 0 unless defined $item && length $item; + + return $this->{cache}->{$item} + if exists $this->{cache}->{$item}; diff --git a/helpers/DATA/debian-installer/001_remove-proposed-updates.patch b/helpers/DATA/debian-installer/001_remove-proposed-updates.patch index 5a679b9..4dc8a0d 100644 --- a/helpers/DATA/debian-installer/001_remove-proposed-updates.patch +++ b/helpers/DATA/debian-installer/001_remove-proposed-updates.patch @@ -19,7 +19,7 @@ index 371e8b57..6caa6641 100755 BOOTMENU_BEEP=n else USE_UDEBS_FROM=trixie --USE_PROPOSED_UPDATES=0 +-USE_PROPOSED_UPDATES=1 TRANSSTATUS=translation-status BOOTMENU_BEEP=y endif diff --git a/helpers/DATA/debian-installer/003_medium_supported.patch b/helpers/DATA/debian-installer/003_medium_supported.patch index 735a84a..8393a24 100644 --- a/helpers/DATA/debian-installer/003_medium_supported.patch +++ b/helpers/DATA/debian-installer/003_medium_supported.patch @@ -11,7 +11,7 @@ diff -Nru debian-installer-20210731+deb11u8+11.0trisquel13/build/config/arm64.cf --- debian-installer-20210731+deb11u8+11.0trisquel13/build/config/arm64.cfg 2023-05-12 13:48:56.073639701 -0600 +++ debian-installer-20210731+deb11u8+11.0trisquel13_/build/config/arm64.cfg 2023-05-12 14:00:45.351718688 -0600 @@ -1,4 +1,4 @@ --MEDIUM_SUPPORTED = cdrom netboot netboot-gtk device-tree u-boot +-MEDIUM_SUPPORTED = cdrom netboot netboot-gtk device-tree u-boot hd-media +MEDIUM_SUPPORTED = cdrom netboot device-tree u-boot KERNELMAJOR = 2.6 diff --git a/helpers/DATA/debian-installer/005_customize-chromeos-devices-build.patch b/helpers/DATA/debian-installer/005_customize-chromeos-devices-build.patch deleted file mode 100644 index 9f5ec6f..0000000 --- a/helpers/DATA/debian-installer/005_customize-chromeos-devices-build.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/build/config/x86.cfg b/build/config/x86.cfg -index 5ddc8cef..74ddad61 100644 ---- a/build/config/x86.cfg -+++ b/build/config/x86.cfg -@@ -443,8 +443,8 @@ arch_netboot_dir: x86_syslinux x86_grub_efi - mkdir -p $(TEMP_DEPTHCHARGE) - depthchargectl build -v \ - --board amd64-generic \ -- --kernel-release $(KERNELVERSION) \ -+ --kernel-release '' \ - --kernel $(TEMP_KERNEL) \ - --initramfs $(TEMP_INITRD) \ - --root none \ - diff --git a/helpers/DATA/debian-installer/007-remove_graphical_options_from_netinstall.patch b/helpers/DATA/debian-installer/patch_changes/007-remove_graphical_options_from_netinstall.patch similarity index 100% rename from helpers/DATA/debian-installer/007-remove_graphical_options_from_netinstall.patch rename to helpers/DATA/debian-installer/patch_changes/007-remove_graphical_options_from_netinstall.patch diff --git a/helpers/DATA/debian-installer/patch_changes/008-re-enable_dpkg_force-overwrite.patch b/helpers/DATA/debian-installer/patch_changes/008-re-enable_dpkg_force-overwrite.patch new file mode 100644 index 0000000..872c735 --- /dev/null +++ b/helpers/DATA/debian-installer/patch_changes/008-re-enable_dpkg_force-overwrite.patch @@ -0,0 +1,16 @@ +We'll remove the force-overwrite flag once we conclude the riscv rework on the kernel and new arch implementation. +-- ark74 - Mon, 07 Jul 2025 23:27:26 -0600 + +diff --git a/build/config/common b/build/config/common +index 6e58ca8f..5953b26f 100644 +--- a/build/config/common ++++ b/build/config/common +@@ -41,7 +41,7 @@ PRESEED = + # Options to pass to dpkg when it is unpacking the udebs to create the + # image. None should be needed, but --force-overwrite might need to be + # enabled from time to time if udebs have conflicting files. +-DPKG_UNPACK_OPTIONS = ++DPKG_UNPACK_OPTIONS = --force-overwrite + + # The codename of the Trisquel release that should be installed by default. + TRISQUEL_RELEASE = ecne diff --git a/helpers/DATA/finish-install/09trisquel-uefi-splash b/helpers/DATA/finish-install/09trisquel-uefi-splash new file mode 100755 index 0000000..537e917 --- /dev/null +++ b/helpers/DATA/finish-install/09trisquel-uefi-splash @@ -0,0 +1,49 @@ +#!/bin/sh +# Enable 'splash' only on UEFI desktop installs, and only if Plymouth is present. +# Runs before 10update-initramfs, so we only call update-grub here. +# + +# Run only on UEFI installs +[ -d /sys/firmware/efi ] || exit 0 + +# Require plymouth in the target system (otherwise splash is pointless) +in-target dpkg -s plymouth >/dev/null 2>&1 || exit 0 + +# Heuristic “desktop present?” check — avoid debconf; rely on packages/DM. +if ! in-target sh -c ' + dpkg -s trisquel-desktop-common >/dev/null 2>&1 || + dpkg -s triskel >/dev/null 2>&1 || + dpkg -s trisquel-gnome >/dev/null 2>&1 || + dpkg -s trisquel-mini >/dev/null 2>&1 || + dpkg -s lightdm >/dev/null 2>&1 || + dpkg -s gdm3 >/dev/null 2>&1 || + dpkg -s sddm >/dev/null 2>&1 +'; then +# No desktop, then do nothing + exit 0 +fi + +CFG=/target/etc/default/grub +[ -f "$CFG" ] || exit 0 + +# If the key is missing entirely, create it with just "splash" +grep -q '^GRUB_CMDLINE_LINUX_DEFAULT=' "$CFG" \ + || echo 'GRUB_CMDLINE_LINUX_DEFAULT="splash"' >> "$CFG" + +# Normalize trivial cases: +# - empty quotes > "splash" +# - unquoted value > quote it +sed -i -r \ + -e 's/^GRUB_CMDLINE_LINUX_DEFAULT=""$/GRUB_CMDLINE_LINUX_DEFAULT="splash"/' \ + -e 's/^(GRUB_CMDLINE_LINUX_DEFAULT)=([^"].*)$/\1="\2"/' \ + "$CFG" + +# If 'splash' is already present, leave as-is; otherwise append it +grep -q '^GRUB_CMDLINE_LINUX_DEFAULT=.*\bsplash\b' "$CFG" || \ + sed -i -r 's/^(GRUB_CMDLINE_LINUX_DEFAULT="[^"]*)"/\1 splash"/' "$CFG" + +# Regenerate grub.cfg; never fail finish-install +in-target update-grub >/dev/null 2>&1 || true + +# Always succeed so remaining finish-install hooks run +exit 0 diff --git a/helpers/DATA/firefox/patch_changes/007-disable_remote_settings_antifeature.patch b/helpers/DATA/firefox/patch_changes/007-disable_remote_settings_antifeature.patch index aee1258..5262b48 100644 --- a/helpers/DATA/firefox/patch_changes/007-disable_remote_settings_antifeature.patch +++ b/helpers/DATA/firefox/patch_changes/007-disable_remote_settings_antifeature.patch @@ -2,10 +2,17 @@ diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/ index 7e98e6d..7716e41 100644 --- a/services/settings/RemoteSettingsClient.sys.mjs +++ b/services/settings/RemoteSettingsClient.sys.mjs -@@ -227,6 +227,8 @@ class AttachmentDownloader extends Downloader { +@@ -229,13 +229,8 @@ class AttachmentDownloader extends Downloader { * @see Downloader.download */ async download(record, options) { +- await lazy.UptakeTelemetry.report( +- TELEMETRY_COMPONENT, +- lazy.UptakeTelemetry.STATUS.DOWNLOAD_START, +- { +- source: this._client.identifier, +- } +- ); + console.warn("Function 'download' disabled in Abrowser due privacy concerns."); + return null; try { diff --git a/helpers/DATA/firefox/patch_changes/011-temp_fix_for_ppc64el_missing_fallback_value.patch b/helpers/DATA/firefox/patch_changes/011-temp_fix_for_ppc64el_missing_fallback_value.patch deleted file mode 100644 index 11da591..0000000 --- a/helpers/DATA/firefox/patch_changes/011-temp_fix_for_ppc64el_missing_fallback_value.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml -index ee506bd6..7e12ca68 100644 ---- a/modules/libpref/init/StaticPrefList.yaml -+++ b/modules/libpref/init/StaticPrefList.yaml -@@ -12461,6 +12461,8 @@ - type: RelaxedAtomicBool - #if defined(MOZ_AV1) - value: true -+#else -+ value: false - #endif - mirror: always - diff --git a/helpers/DATA/firefox/patch_changes/013-remove_finish_setup_third_party_services.patch b/helpers/DATA/firefox/patch_changes/013-remove_finish_setup_third_party_services.patch new file mode 100644 index 0000000..c00136f --- /dev/null +++ b/helpers/DATA/firefox/patch_changes/013-remove_finish_setup_third_party_services.patch @@ -0,0 +1,98 @@ +diff --git a/browser/components/aboutwelcome/modules/AboutWelcomeDefaults.sys.mjs b/browser/components/aboutwelcome/modules/AboutWelcomeDefaults.sys.mjs +index ba47adb6..c4b29ec4 100644 +--- a/browser/components/aboutwelcome/modules/AboutWelcomeDefaults.sys.mjs ++++ b/browser/components/aboutwelcome/modules/AboutWelcomeDefaults.sys.mjs +@@ -704,7 +704,7 @@ const MR_ABOUT_WELCOME_DEFAULT = { + action: { + type: "OPEN_URL", + data: { +- args: "https://addons.mozilla.org/en-US/firefox/collections/4757633/b4d5649fb087446aa05add5f0258c3/?page=1&collection_sort=-popularity", ++ args: "https://gnuzilla.gnu.org/", + where: "tabshifted", + }, + navigate: true, +@@ -750,49 +750,6 @@ const MR_ABOUT_WELCOME_DEFAULT = { + }, + targeting: "isFxASignedIn", + }, +- { +- id: "AW_ACCOUNT_LOGIN", +- content: { +- fullscreen: true, +- position: "split", +- split_narrow_bkg_position: "-228px", +- image_alt_text: { +- string_id: "mr2022-onboarding-gratitude-image-alt", +- }, +- background: +- "url('chrome://activity-stream/content/data/content/assets/fox-doodle-waving-laptop.svg') center center / 80% no-repeat var(--mr-screen-background-color)", +- progress_bar: true, +- logo: {}, +- title: { +- string_id: "onboarding-sign-up-title", +- }, +- subtitle: { +- string_id: "onboarding-sign-up-description", +- }, +- secondary_button: { +- label: { +- string_id: "mr2-onboarding-start-browsing-button-label", +- }, +- style: "secondary", +- action: { +- navigate: true, +- }, +- }, +- primary_button: { +- label: { +- string_id: "onboarding-sign-up-button", +- }, +- action: { +- data: { +- entrypoint: "newuser-onboarding-desktop", +- }, +- type: "FXA_SIGNIN_FLOW", +- navigate: true, +- }, +- }, +- }, +- targeting: "!isFxASignedIn", +- }, + ], + }; + +diff --git a/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs b/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs +index 29d2ca46..41b65ac4 100644 +--- a/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs ++++ b/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs +@@ -885,7 +885,7 @@ const MESSAGES = () => { + dismiss: true, + type: "OPEN_URL", + data: { +- args: "https://addons.mozilla.org/en-US/firefox/collections/4757633/36d285535db74c6986abbeeed3e214/?page=1&collection_sort=added", ++ args: "https://gnuzilla.gnu.org/", + where: "tabshifted", + }, + }, +diff --git a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs +index abc6db68..0c86955f 100644 +--- a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs ++++ b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs +@@ -1226,7 +1226,7 @@ const BASE_MESSAGES = () => [ + { + type: "OPEN_URL", + data: { +- args: "https://addons.mozilla.org/en-US/firefox/collections/4757633/b4d5649fb087446aa05add5f0258c3/?page=1&collection_sort=-popularity", ++ args: "https://gnuzilla.gnu.org/", + where: "current", + }, + }, +@@ -1430,7 +1430,7 @@ const BASE_MESSAGES = () => [ + { + type: "OPEN_URL", + data: { +- args: "https://addons.mozilla.org/en-US/firefox/collections/4757633/b4d5649fb087446aa05add5f0258c3/?page=1&collection_sort=-popularity", ++ args: "https://gnuzilla.gnu.org/", + where: "current", + }, + }, diff --git a/helpers/DATA/firefox/patch_changes/014-remove_support_firefox_mission_on_abrowser.patch b/helpers/DATA/firefox/patch_changes/014-remove_support_firefox_mission_on_abrowser.patch new file mode 100644 index 0000000..73f2ec6 --- /dev/null +++ b/helpers/DATA/firefox/patch_changes/014-remove_support_firefox_mission_on_abrowser.patch @@ -0,0 +1,138 @@ +diff --git a/browser/components/preferences/home.inc.xhtml b/browser/components/preferences/home.inc.xhtml +index c0094fe0..08856c78 100644 +--- a/browser/components/preferences/home.inc.xhtml ++++ b/browser/components/preferences/home.inc.xhtml +@@ -101,15 +101,6 @@ + + + +- +- +- +- +- +- +- + + + +diff --git a/browser/extensions/newtab/lib/AboutPreferences.sys.mjs b/browser/extensions/newtab/lib/AboutPreferences.sys.mjs +index 0d43919b..f2e0fbd0 100644 +--- a/browser/extensions/newtab/lib/AboutPreferences.sys.mjs ++++ b/browser/extensions/newtab/lib/AboutPreferences.sys.mjs +@@ -120,37 +120,6 @@ const PREFS_FOR_SETTINGS = () => [ + ), + eventSource: "TOP_STORIES", + }, +- { +- id: "support-firefox", +- pref: { +- feed: "showSponsoredCheckboxes", +- titleString: "home-prefs-support-firefox-header", +- nestedPrefs: [ +- { +- name: "showSponsoredTopSites", +- titleString: "home-prefs-shortcuts-by-option-sponsored", +- eventSource: "SPONSORED_TOP_SITES", +- }, +- { +- name: "showSponsored", +- titleString: "home-prefs-recommended-by-option-sponsored-stories", +- eventSource: "POCKET_SPOCS", +- shouldHidePref: !Services.prefs.getBoolPref( +- "browser.newtabpage.activity-stream.feeds.system.topstories", +- true +- ), +- shouldDisablePref: !Services.prefs.getBoolPref( +- "browser.newtabpage.activity-stream.feeds.section.topstories", +- true +- ), +- }, +- ], +- }, +- shouldHidePref: !Services.prefs.getBoolPref( +- "browser.newtabpage.activity-stream.system.showSponsoredCheckboxes", +- false +- ), +- }, + ]; + + export class AboutPreferences { +@@ -351,41 +320,8 @@ export class AboutPreferences { + } + }); + +- // Special cases to like the nested prefs with another pref, +- // so we can disable it real time. +- if (id === "support-firefox") { +- function setupSupportFirefoxSubCheck(triggerPref, subPref) { +- const subCheckFullName = `browser.newtabpage.activity-stream.${triggerPref}`; +- const subCheckPref = Preferences.get(subCheckFullName); +- +- subCheckPref?.on("change", () => { +- const showSponsoredFullName = `browser.newtabpage.activity-stream.${subPref}`; +- const showSponsoredSubcheck = subChecks.find( +- subcheck => +- subcheck.getAttribute("preference") === showSponsoredFullName +- ); +- if (showSponsoredSubcheck) { +- showSponsoredSubcheck.disabled = !Services.prefs.getBoolPref( +- subCheckFullName, +- true +- ); +- } +- }); +- } +- +- setupSupportFirefoxSubCheck("feeds.section.topstories", "showSponsored"); +- setupSupportFirefoxSubCheck("feeds.topsites", "showSponsoredTopSites"); +- } +- + pref.on("change", () => { + subChecks.forEach(subcheck => { +- // Update child preferences for the "Support Firefox" checkbox group +- // so that they're turned on and off at the same time. +- if (id === "support-firefox") { +- const subPref = Preferences.get(subcheck.getAttribute("preference")); +- subPref.value = pref.value; +- } +- + // Disable any nested checkboxes if the parent pref is not enabled. + subcheck.disabled = !pref._value; + }); +diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl +index 269eca10..4c35b53f 100644 +--- a/browser/locales/en-US/browser/preferences/preferences.ftl ++++ b/browser/locales/en-US/browser/preferences/preferences.ftl +@@ -749,11 +749,7 @@ home-prefs-trending-search-header = + home-prefs-trending-search-description = Popular and frequently searched topics + + # "Support" here means to help sustain or contribute to something, especially through funding or sponsorship. +-home-prefs-support-firefox-header = +- .label = Support { -brand-product-name } +- +-home-prefs-mission-message = Our sponsors support our mission to build a better web +-home-prefs-mission-message-learn-more-link = Find out how ++## Removed by Abrowser customization process. + + # Variables: + # $num (number) - Number of rows displayed +diff --git a/browser/themes/shared/preferences/preferences.css b/browser/themes/shared/preferences/preferences.css +index 9c8155e5..4718341f 100644 +--- a/browser/themes/shared/preferences/preferences.css ++++ b/browser/themes/shared/preferences/preferences.css +@@ -1541,12 +1541,3 @@ richlistitem .text-link:hover { + .search-header:has(.section-heading) { + margin: 0; + } +- +-/* Styles for the "sponsors support our mission" message and link on the Home tab */ +-.mission-message { +- margin-block-start: var(--space-large); +- +- > a { +- font-size: var(--font-size-small); +- } +-} diff --git a/helpers/DATA/firefox/patch_changes/015-set_higher_priority_than_chromium_based_ones.patch b/helpers/DATA/firefox/patch_changes/015-set_higher_priority_than_chromium_based_ones.patch new file mode 100644 index 0000000..1a77d79 --- /dev/null +++ b/helpers/DATA/firefox/patch_changes/015-set_higher_priority_than_chromium_based_ones.patch @@ -0,0 +1,17 @@ +diff --git a/debian/firefox.postinst.in b/debian/firefox.postinst.in +index 4cb73f02..44e9261a 100644 +--- a/debian/firefox.postinst.in ++++ b/debian/firefox.postinst.in +@@ -36,10 +36,10 @@ finish_rm_conffile() { + + if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-remove" ] ; then + update-alternatives --install /usr/bin/gnome-www-browser \ +- gnome-www-browser /usr/bin/$MOZ_APP_NAME 40 ++ gnome-www-browser /usr/bin/$MOZ_APP_NAME 240 + + update-alternatives --install /usr/bin/x-www-browser \ +- x-www-browser /usr/bin/$MOZ_APP_NAME 40 ++ x-www-browser /usr/bin/$MOZ_APP_NAME 240 + fi + + if [ "$1" = "configure" ] ; then diff --git a/helpers/DATA/firefox/settings.js b/helpers/DATA/firefox/settings.js index 978048e..a7ffc69 100644 --- a/helpers/DATA/firefox/settings.js +++ b/helpers/DATA/firefox/settings.js @@ -62,7 +62,7 @@ pref("general.useragent.compatMode.abrowser",true); pref ("browser.startup.homepage_override.mstone", "ignore"); // Preferences for the Get Add-ons panel -pref ("extensions.webservice.discoverURL", "https://gnuzilla.gnu.org/mozzarella/"); +pref ("extensions.webservice.discoverURL", "https://gnuzilla.gnu.org/"); pref ("extensions.getAddons.search.url", "https://trisquel.info"); // Help URL @@ -258,6 +258,7 @@ pref("browser.newtabpage.activity-stream.discoverystream.endpoints", ""); pref("browser.newtabpage.activity-stream.feeds.snippets",false); pref("browser.newtabpage.activity-stream.disableSnippets", true); pref("browser.newtabpage.activity-stream.tippyTop.service.endpoint", ""); +pref("browser.newtabpage.activity-stream.showSponsoredCheckboxes", false); // Enable xrender //pref("gfx.xrender.enabled",true); @@ -278,11 +279,11 @@ pref("extensions.htmlaboutaddons.discover.enabled", false); pref("extensions.htmlaboutaddons.recommendations.enabled", false); pref("extensions.getAddons.cache.enabled", false); pref("extensions.getAddons.get.url", ""); -pref("extensions.getAddons.link.url", "https://gnuzilla.gnu.org/mozzarella/"); +pref("extensions.getAddons.link.url", "https://gnuzilla.gnu.org/"); pref("extensions.getAddons.langpacks.url", ""); pref("extensions.getAddons.discovery.api_url", ""); pref("extensions.recommendations.privacyPolicyUrl", "https://trisquel.info/legal"); -pref("extensions.getAddons.search.browseURL", "https://gnuzilla.gnu.org/mozzarella/search.php?q=%TERMS%"); +pref("extensions.getAddons.search.browseURL", "https://gnuzilla.gnu.org/search.php?q=%TERMS%"); // Disable pingback on first run pref("browser.newtabpage.activity-stream.fxaccounts.endpoint", ""); diff --git a/helpers/DATA/grub-installer/patch_changes/000-migrate_efi_fix_install_to_patch.patch b/helpers/DATA/grub-installer/patch_changes/000-migrate_efi_fix_install_to_patch.patch new file mode 100644 index 0000000..9b4dd07 --- /dev/null +++ b/helpers/DATA/grub-installer/patch_changes/000-migrate_efi_fix_install_to_patch.patch @@ -0,0 +1,18 @@ +diff --git a/grub-installer b/grub-installer +index 4fdbb30e..af19a59f 100755 +--- a/grub-installer ++++ b/grub-installer +@@ -533,8 +533,12 @@ case "$grub_package" in + grub-efi-ia32-bin grub-efi-ia32 + ;; + grub-efi*) ++ export DEBIAN_PRIORITY=critical ++ export DEBIAN_FRONTEND=noninteractive ++ unset DEBIAN_HAS_FRONTEND ++ unset DEBCONF_REDIR + log-output -t grub-installer $chroot $ROOT dpkg -P \ +- grub grub-legacy grub-pc-bin grub-pc ++ grub grub-legacy grub-pc-bin grub-pc grub-gfxpayload-lists + ;; + esac + diff --git a/helpers/DATA/grub-installer/patch_changes/001-set_only_low_priority_question_as_ubiquity.patch b/helpers/DATA/grub-installer/patch_changes/001-set_only_low_priority_question_as_ubiquity.patch new file mode 100644 index 0000000..3abed06 --- /dev/null +++ b/helpers/DATA/grub-installer/patch_changes/001-set_only_low_priority_question_as_ubiquity.patch @@ -0,0 +1,46 @@ +diff --git a/grub-installer b/grub-installer +index 3d80321f..a1793ee5 100755 +--- a/grub-installer ++++ b/grub-installer +@@ -475,23 +475,24 @@ case $grub_package in + NV_PRIO=high + fi + +- # Should we force a copy of grub-efi to be installed +- # to the removable media path too? Set default to true +- # if the removable media path is empty, then ask at low +- # priority, or can also be pre-seeded of course +- if ! [ -e /var/lib/grub-installer/removable_media_path_checked ]; then +- info "Checking removable media path $ROOT/boot/efi/EFI/BOOT/BOOT${EFI_SUFFIX}.EFI" +- if ! [ -f $ROOT/boot/efi/EFI/BOOT/BOOT${EFI_SUFFIX}.EFI ]; then +- info "Removable media path is empty" +- db_fget grub-installer/force-efi-extra-removable seen +- if [ "$RET" = false ]; then +- info "force-efi-extra-removable not preseeded, set it true" +- db_set grub-installer/force-efi-extra-removable true +- fi +- fi +- mkdir -p /var/lib/grub-installer +- touch /var/lib/grub-installer/removable_media_path_checked +- fi ++# Mimic ubiquity 1.128ubuntu15 behaviour and only bypass low priority question. -- Ark74 ++# # Should we force a copy of grub-efi to be installed ++# # to the removable media path too? Set default to true ++# # if the removable media path is empty, then ask at low ++# # priority, or can also be pre-seeded of course ++# if ! [ -e /var/lib/grub-installer/removable_media_path_checked ]; then ++# info "Checking removable media path $ROOT/boot/efi/EFI/BOOT/BOOT${EFI_SUFFIX}.EFI" ++# if ! [ -f $ROOT/boot/efi/EFI/BOOT/BOOT${EFI_SUFFIX}.EFI ]; then ++# info "Removable media path is empty" ++# db_fget grub-installer/force-efi-extra-removable seen ++# if [ "$RET" = false ]; then ++# info "force-efi-extra-removable not preseeded, set it true" ++# db_set grub-installer/force-efi-extra-removable true ++# fi ++# fi ++# mkdir -p /var/lib/grub-installer ++# touch /var/lib/grub-installer/removable_media_path_checked ++# fi + db_input $ER_PRIO grub-installer/force-efi-extra-removable || [ $? -eq 30 ] + db_go || exit 10 + db_get grub-installer/force-efi-extra-removable diff --git a/helpers/DATA/grub-installer/patch_changes/01_39c6708ef9c5f191cf9000f7499f0a1fe2dc9422.patch b/helpers/DATA/grub-installer/patch_changes/01_39c6708ef9c5f191cf9000f7499f0a1fe2dc9422.patch deleted file mode 100644 index 6abeca6..0000000 --- a/helpers/DATA/grub-installer/patch_changes/01_39c6708ef9c5f191cf9000f7499f0a1fe2dc9422.patch +++ /dev/null @@ -1,1098 +0,0 @@ -From 7bcf88624342b44066bcb312486e1d7c81ae7e7f Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Wed, 23 Aug 2023 07:50:47 +0200 -Subject: [PATCH 01/14] move duplicated functions into functions.sh - ---- - debian/postinst | 18 +------------ - functions.sh | 41 +++++++++++++++++++++++++++++ - grub-installer | 16 ----------- - rescue.d/80grub-reinstall | 16 ----------- - rescue.d/81grub-efi-force-removable | 29 -------------------- - 5 files changed, 42 insertions(+), 78 deletions(-) - -diff --git a/debian/postinst b/debian/postinst -index 85714195..b7f5ef1f 100755 ---- a/debian/postinst -+++ b/debian/postinst -@@ -2,23 +2,7 @@ - - . /usr/share/debconf/confmodule - --log () { -- logger -t grub-installer "$@" --} -- --error () { -- log "error: $@" --} -- --die () { -- local template="$1" -- shift -- -- error "$@" -- db_input critical "$template" || [ $? -eq 30 ] -- db_go || true -- exit 1 --} -+. /usr/share/grub-installer/functions.sh - - mountvirtfs () { - fstype="$1" -diff --git a/functions.sh b/functions.sh -index 412e97a7..55789b08 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -37,3 +37,44 @@ update_mtab() { - is_floppy () { - echo "$1" | grep -q '(fd' || echo "$1" | grep -q "/dev/fd" || echo "$1" | grep -q floppy - } -+ -+log () { -+ logger -t grub-installer "$@" -+} -+ -+error () { -+ log "error: $@" -+} -+ -+info() { -+ log "info: $@" -+} -+ -+debug () { -+ [ -z "${DEBCONF_DEBUG}" ] || log "debug: $@" -+} -+ -+die () { -+ local template="$1" -+ shift -+ -+ error "$@" -+ db_input critical "$template" || [ $? -eq 30 ] -+ db_go || true -+ exit 1 -+} -+ -+EXTRA_PATHS="" -+mountvirtfs () { -+ fstype="$1" -+ path="$2" -+ if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \ -+ ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then -+ mkdir -p "$path" || \ -+ die grub-installer/mounterr "Error creating $path" -+ mount -t "$fstype" "$fstype" "$path" || \ -+ die grub-installer/mounterr "Error mounting $path" -+ EXTRA_PATHS="$EXTRA_PATHS $path" -+ trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+ fi -+} -diff --git a/grub-installer b/grub-installer -index 2787e7c8..bd2bcf9d 100755 ---- a/grub-installer -+++ b/grub-installer -@@ -21,22 +21,6 @@ newline=" - - db_capb backup - --log() { -- logger -t grub-installer "$@" --} -- --error() { -- log "error: $@" --} -- --info() { -- log "info: $@" --} -- --debug () { -- [ -z "${DEBCONF_DEBUG}" ] || log "debug: $@" --} -- - ARCH="$(archdetect)" - info "architecture: $ARCH" - SUBARCH="${ARCH#*/}" -diff --git a/rescue.d/80grub-reinstall b/rescue.d/80grub-reinstall -index cc3fe8a8..c52a0be2 100755 ---- a/rescue.d/80grub-reinstall -+++ b/rescue.d/80grub-reinstall -@@ -4,22 +4,6 @@ - - . /usr/share/grub-installer/functions.sh - --mountvirtfs () { -- fstype="$1" -- path="$2" -- if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \ -- ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then -- mkdir -p "$path" || \ -- die grub-installer/mounterr "Error creating $path" -- mount -t "$fstype" "$fstype" "$path" || \ -- die grub-installer/mounterr "Error mounting $path" -- EXTRA_PATHS="$EXTRA_PATHS $path" -- trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -- fi --} -- -- -- - db_progress START 0 2 grub-installer/progress/title - db_progress INFO grub-installer/progress/step_bootdev - -diff --git a/rescue.d/81grub-efi-force-removable b/rescue.d/81grub-efi-force-removable -index cbb1ce74..958f9a48 100755 ---- a/rescue.d/81grub-efi-force-removable -+++ b/rescue.d/81grub-efi-force-removable -@@ -4,39 +4,10 @@ - - . /usr/share/grub-installer/functions.sh - --EXTRA_PATHS="" -- - log () { - logger -t grub-installer "grub-efi-force-removable $@" - } - --error () { -- log "error: $@" --} -- --die () { -- local template="$1" -- shift -- -- error "$@" -- db_input critical "$template" || [ $? -eq 30 ] -- db_go || true -- exit 1 --} -- --mountvirtfs () { -- fstype="$1" -- path="$2" -- if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \ -- ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then -- mkdir -p "$path" || \ -- die grub-installer/mounterr "Error creating $path" -- mount -t "$fstype" "$fstype" "$path" || \ -- die grub-installer/mounterr "Error mounting $path" -- EXTRA_PATHS="$EXTRA_PATHS $path" -- trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -- fi --} - - db_progress START 0 3 grub-installer/progress/title - db_progress INFO grub-installer/progress/step_force_efi_removable --- -GitLab - - -From 1ec23ed1b62a4fed2b42b0cf555f4d2894c31b7c Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Wed, 23 Aug 2023 08:12:10 +0200 -Subject: [PATCH 02/14] log: append the script's name if DEBCONF_DEBUG set - -This is a way of making 81grub-efi-force-removable less special, and -seems like it might be a useful thing to have in our logs anyway. - -The fact that 81grub-efi-force-removable adds its own name when logging -strikes me as left-over scafolding from when it was built, so we could -just remove this instead. ---- - functions.sh | 8 ++++---- - rescue.d/81grub-efi-force-removable | 14 +++++++------- - 2 files changed, 11 insertions(+), 11 deletions(-) - -diff --git a/functions.sh b/functions.sh -index 55789b08..9eeb34b0 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -39,19 +39,19 @@ is_floppy () { - } - - log () { -- logger -t grub-installer "$@" -+ logger -t grub-installer "$*${DEBCONF_DEBUG:+ [${0##*/}]}" - } - - error () { -- log "error: $@" -+ log "error: $*" - } - - info() { -- log "info: $@" -+ log "info: $*" - } - - debug () { -- [ -z "${DEBCONF_DEBUG}" ] || log "debug: $@" -+ [ -z "${DEBCONF_DEBUG}" ] || log "debug: $*" - } - - die () { -diff --git a/rescue.d/81grub-efi-force-removable b/rescue.d/81grub-efi-force-removable -index 958f9a48..f03d88d7 100755 ---- a/rescue.d/81grub-efi-force-removable -+++ b/rescue.d/81grub-efi-force-removable -@@ -4,17 +4,17 @@ - - . /usr/share/grub-installer/functions.sh - --log () { -- logger -t grub-installer "grub-efi-force-removable $@" -+_dbg_log() { -+ # just having DEBCONF_DEBUG defined is enough to get log() to append the script's name -+ DEBCONF_DEBUG=${DEBCONF_DEBUG:-0} log "$@" - } - -- - db_progress START 0 3 grub-installer/progress/title - db_progress INFO grub-installer/progress/step_force_efi_removable - - # Should we also install grub-efi to the removable media path? - # Ask the user --log "Prompting user about removable media path" -+_dbg_log "Prompting user about removable media path" - db_input high grub-installer/force-efi-extra-removable - if ! db_go; then - # back up to menu -@@ -30,7 +30,7 @@ fi - db_progress STEP 1 - db_progress INFO grub-installer/progress/step_mount_filesystems - --log "Mounting filesystems" -+_dbg_log "Mounting filesystems" - # If we're installing grub-efi, it wants /sys mounted in the - # target. Maybe /proc too, and definitely the efivars fs. Should be - # harmless if we're not using it. -@@ -45,7 +45,7 @@ trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT - db_progress STEP 1 - db_progress INFO grub-installer/progress/step_install_loader - # Do the installation now --log "Running grub-install" -+_dbg_log "Running grub-install" - if ! chroot /target grub-install --force-extra-removable; then - db_input critical grub-installer/grub-install-failed || true - db_go || true -@@ -56,7 +56,7 @@ fi - db_progress STEP 1 - db_progress INFO grub-installer/progress/step_update_debconf_efi_removable - # And add the debconf flag so the installed system will also do this in future --log "Running debconf-set-selections in the chroot" -+_dbg_log "Running debconf-set-selections in the chroot" - chroot /target 'debconf-set-selections' < -Date: Wed, 23 Aug 2023 08:13:48 +0200 -Subject: [PATCH 03/14] merge 'efivarsfs' special case into functions.sh - ---- - debian/postinst | 23 ++++------------------- - functions.sh | 12 +++++++++--- - 2 files changed, 13 insertions(+), 22 deletions(-) - -diff --git a/debian/postinst b/debian/postinst -index b7f5ef1f..b1954b87 100755 ---- a/debian/postinst -+++ b/debian/postinst -@@ -4,29 +4,14 @@ - - . /usr/share/grub-installer/functions.sh - --mountvirtfs () { -- fstype="$1" -- path="$2" -- if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \ -- ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then -- mkdir -p "$path" || \ -- die grub-installer/mounterr "Error creating $path" -- -- if mount -t "$fstype" "$fstype" "$path"; then -- log "Success mounting $path" -- trap "umount $path" HUP INT QUIT KILL PIPE TERM EXIT -- elif [ "$fstype" = "efivarfs" ]; then -- error "Error mounting $path (non-fatal)" -- else -- die grub-installer/mounterr "Error mounting $path" -- fi -- fi --} -- - # If we're installing grub-efi, it wants /sys mounted in the - # target. Maybe /proc too? - mountvirtfs proc /target/proc - mountvirtfs sysfs /target/sys -+# unmounting /target/proc causes an error later on in the install: -+# umount: can't unmount /target/proc: Invalid argument -+# (seems like a bug somewhere, but will preserve the old 'overwriting traps' behaviour for now) -+EXTRA_PATHS="" - mountvirtfs efivarfs /target/sys/firmware/efi/efivars - - grub-installer /target -diff --git a/functions.sh b/functions.sh -index 9eeb34b0..c23265ab 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -72,9 +72,15 @@ mountvirtfs () { - ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then - mkdir -p "$path" || \ - die grub-installer/mounterr "Error creating $path" -- mount -t "$fstype" "$fstype" "$path" || \ -+ -+ if mount -t "$fstype" "$fstype" "$path"; then -+ log "Success mounting $path" -+ EXTRA_PATHS="$EXTRA_PATHS $path" -+ trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+ elif [ "$fstype" = "efivarfs" ]; then -+ error "Error mounting $path (non-fatal)" -+ else - die grub-installer/mounterr "Error mounting $path" -- EXTRA_PATHS="$EXTRA_PATHS $path" -- trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+ fi - fi - } --- -GitLab - - -From 676368b5f9b9c7e8b9d7e2fd3e4ce98770659660 Mon Sep 17 00:00:00 2001 -From: Arnaud Rebillout -Date: Wed, 23 Aug 2023 09:59:22 +0200 -Subject: [PATCH 04/14] Don't fail if we can't mkdir efivars - -Closes: #1031183 ---- - functions.sh | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/functions.sh b/functions.sh -index c23265ab..183a6baa 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -70,8 +70,14 @@ mountvirtfs () { - path="$2" - if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \ - ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then -- mkdir -p "$path" || \ -+ if mkdir -p "$path"; then -+ true -+ elif [ "$fstype" = "efivarfs" ]; then -+ error "Error creating $path (non-fatal)" -+ return -+ else - die grub-installer/mounterr "Error creating $path" -+ fi - - if mount -t "$fstype" "$fstype" "$path"; then - log "Success mounting $path" --- -GitLab - - -From 5d7b0988cedc35707f17f824aa6ad11a5199f989 Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Wed, 23 Aug 2023 10:15:51 +0200 -Subject: [PATCH 05/14] mountvirtfs: separate success vs. fatality logic - -Having the efivarfs check in an elif made this code seem tangly to me. -Hopefully this is now cleaner, with the operation's success or failure -first being deterimined, then whether any error should be fatal being -deterimined afterwards. ---- - functions.sh | 25 +++++++++++++------------ - 1 file changed, 13 insertions(+), 12 deletions(-) - -diff --git a/functions.sh b/functions.sh -index 183a6baa..6675efcd 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -71,22 +71,23 @@ mountvirtfs () { - if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \ - ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then - if mkdir -p "$path"; then -- true -- elif [ "$fstype" = "efivarfs" ]; then -- error "Error creating $path (non-fatal)" -- return -+ if mount -t "$fstype" "$fstype" "$path"; then -+ log "Success mounting $path" -+ EXTRA_PATHS="$EXTRA_PATHS $path" -+ trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+ return -+ else -+ failed_action="Mounting" -+ fi - else -- die grub-installer/mounterr "Error creating $path" -+ failed_action="Creating" - fi - -- if mount -t "$fstype" "$fstype" "$path"; then -- log "Success mounting $path" -- EXTRA_PATHS="$EXTRA_PATHS $path" -- trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -- elif [ "$fstype" = "efivarfs" ]; then -- error "Error mounting $path (non-fatal)" -+ # if here, a failure has occured (otherwise would 'return' above) -+ if [ "$fstype" = "efivarfs" ]; then -+ error "$failed_action $path failed (non-fatal)" - else -- die grub-installer/mounterr "Error mounting $path" -+ die grub-installer/mounterr "$failed_action '$path' failed" - fi - fi - } --- -GitLab - - -From bc1945e46f6ae7a3113e6761d9f2a5e21a52adbd Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Wed, 23 Aug 2023 10:27:27 +0200 -Subject: [PATCH 06/14] avoid tagging expected(ish) failure as 'error:' - -I've left the word 'error' in the message, to make it easy to find -anyway, but if the behaviour is somewhat expected, then having 'error:' -starting the line seems likely to be a red-herring when an unrelated bug -occurs (even with the 'non-fatal'). ---- - functions.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/functions.sh b/functions.sh -index 6675efcd..a03e03af 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -85,7 +85,7 @@ mountvirtfs () { - - # if here, a failure has occured (otherwise would 'return' above) - if [ "$fstype" = "efivarfs" ]; then -- error "$failed_action $path failed (non-fatal)" -+ info "$failed_action $path failed (non-fatal error)" - else - die grub-installer/mounterr "$failed_action '$path' failed" - fi --- -GitLab - - -From 2b80ed9f3295f2fde11dfd97dc5e5da3cacc699e Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Wed, 23 Aug 2023 10:36:16 +0200 -Subject: [PATCH 07/14] only try to mount /sys.../efi/... on efi systems - ---- - debian/postinst | 21 ++++++++++++--------- - 1 file changed, 12 insertions(+), 9 deletions(-) - -diff --git a/debian/postinst b/debian/postinst -index b1954b87..86d6428b 100755 ---- a/debian/postinst -+++ b/debian/postinst -@@ -4,14 +4,17 @@ - - . /usr/share/grub-installer/functions.sh - --# If we're installing grub-efi, it wants /sys mounted in the --# target. Maybe /proc too? --mountvirtfs proc /target/proc --mountvirtfs sysfs /target/sys --# unmounting /target/proc causes an error later on in the install: --# umount: can't unmount /target/proc: Invalid argument --# (seems like a bug somewhere, but will preserve the old 'overwriting traps' behaviour for now) --EXTRA_PATHS="" --mountvirtfs efivarfs /target/sys/firmware/efi/efivars -+ARCH=$(archdetect) -+if [ "${ARCH#*/}" = "efi" ]; then -+ # If we're installing grub-efi, it wants /sys mounted in the -+ # target. Maybe /proc too? -+ mountvirtfs proc /target/proc -+ mountvirtfs sysfs /target/sys -+ # unmounting /target/proc causes an error later on in the install: -+ # umount: can't unmount /target/proc: Invalid argument -+ # (seems like a bug somewhere, but will preserve the old 'overwriting traps' behaviour for now) -+ EXTRA_PATHS="" -+ mountvirtfs efivarfs /target/sys/firmware/efi/efivars -+fi - - grub-installer /target --- -GitLab - - -From da766c976ef03b578dab1306ba86581fb474ba61 Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Wed, 23 Aug 2023 10:45:07 +0200 -Subject: [PATCH 08/14] mountvirtfs: introduce optional 'fatality' param - -This seems clearer than having mountvirtfs treat efivarfs as a special -case, as one gets to see that there's something different in the call, -and it also means that if the function manages to fail for some other -reason than the mkdir failing, we won't mask that with `... || true` ---- - debian/postinst | 2 +- - functions.sh | 9 ++++++--- - rescue.d/80grub-reinstall | 2 +- - rescue.d/81grub-efi-force-removable | 2 +- - 4 files changed, 9 insertions(+), 6 deletions(-) - -diff --git a/debian/postinst b/debian/postinst -index 86d6428b..2523c14f 100755 ---- a/debian/postinst -+++ b/debian/postinst -@@ -14,7 +14,7 @@ if [ "${ARCH#*/}" = "efi" ]; then - # umount: can't unmount /target/proc: Invalid argument - # (seems like a bug somewhere, but will preserve the old 'overwriting traps' behaviour for now) - EXTRA_PATHS="" -- mountvirtfs efivarfs /target/sys/firmware/efi/efivars -+ mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal - fi - - grub-installer /target -diff --git a/functions.sh b/functions.sh -index a03e03af..a40af89d 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -68,6 +68,8 @@ EXTRA_PATHS="" - mountvirtfs () { - fstype="$1" - path="$2" -+ failure_response="${3:-fatal}" -+ - if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \ - ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then - if mkdir -p "$path"; then -@@ -83,11 +85,12 @@ mountvirtfs () { - failed_action="Creating" - fi - -+ log_msg="$failed_action '$path' failed ($failure_response error)" - # if here, a failure has occured (otherwise would 'return' above) -- if [ "$fstype" = "efivarfs" ]; then -- info "$failed_action $path failed (non-fatal error)" -+ if [ "$failure_response" != "fatal" ]; then -+ info "$log_msg" - else -- die grub-installer/mounterr "$failed_action '$path' failed" -+ die grub-installer/mounterr "$log_msg" - fi - fi - } -diff --git a/rescue.d/80grub-reinstall b/rescue.d/80grub-reinstall -index c52a0be2..31b45125 100755 ---- a/rescue.d/80grub-reinstall -+++ b/rescue.d/80grub-reinstall -@@ -13,7 +13,7 @@ db_progress INFO grub-installer/progress/step_bootdev - mountvirtfs proc /target/proc - mountvirtfs sysfs /target/sys - modprobe efivarfs >/dev/null 2>&1 || true --mountvirtfs efivarfs /target/sys/firmware/efi/efivars || true -+mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal - if [ -e /target/boot/efi ]; then - chroot /target mount /boot/efi || true - EXTRA_PATHS="$EXTRA_PATHS /target/boot/efi" -diff --git a/rescue.d/81grub-efi-force-removable b/rescue.d/81grub-efi-force-removable -index f03d88d7..212aeb74 100755 ---- a/rescue.d/81grub-efi-force-removable -+++ b/rescue.d/81grub-efi-force-removable -@@ -37,7 +37,7 @@ _dbg_log "Mounting filesystems" - mountvirtfs proc /target/proc - mountvirtfs sysfs /target/sys - modprobe efivarfs >/dev/null 2>&1 || true --mountvirtfs efivarfs /target/sys/firmware/efi/efivars || true -+mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal - chroot /target mount /boot/efi || true - EXTRA_PATHS="$EXTRA_PATHS /target/boot/efi" - trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT --- -GitLab - - -From a1e2235247fd6c1ead6b15e7122d9e3451878b3b Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Wed, 23 Aug 2023 10:52:23 +0200 -Subject: [PATCH 09/14] grub-installer/mounterr: say which path failed - ---- - debian/grub-installer.templates | 4 ++-- - functions.sh | 10 +++++++--- - 2 files changed, 9 insertions(+), 5 deletions(-) - -diff --git a/debian/grub-installer.templates b/debian/grub-installer.templates -index 83bbb217..7c4272bd 100644 ---- a/debian/grub-installer.templates -+++ b/debian/grub-installer.templates -@@ -229,8 +229,8 @@ Description: for internal use; can be preseeded - Template: grub-installer/mounterr - Type: error - # :sl4: --_Description: Failed to mount /target/proc -- Mounting the proc file system on /target/proc failed. -+_Description: Failed to mount ${PATH} -+ Mounting the ${FSTYPE} file system on ${PATH} failed. - . - Check /var/log/syslog or see virtual console 4 for the details. - . -diff --git a/functions.sh b/functions.sh -index a40af89d..4e3338c6 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -55,10 +55,14 @@ debug () { - } - - die () { -- local template="$1" -- shift -+ local template="$1" ; shift -+ local fstype="$1" ; shift -+ local path="$1" ; shift -+ - - error "$@" -+ db_subst "$template" FSTYPE "$fstype" -+ db_subst "$template" PATH "$path" - db_input critical "$template" || [ $? -eq 30 ] - db_go || true - exit 1 -@@ -90,7 +94,7 @@ mountvirtfs () { - if [ "$failure_response" != "fatal" ]; then - info "$log_msg" - else -- die grub-installer/mounterr "$log_msg" -+ die grub-installer/mounterr "$fstype" "$path" "$log_msg" - fi - fi - } --- -GitLab - - -From b878d83e2289e3907126d29dc2f687aaba7d4aab Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Wed, 23 Aug 2023 18:30:04 +0200 -Subject: [PATCH 10/14] insert new paths at the start of $EXTRA_PATHS - -This ensures that umount is called with the most recently mounted thing -first, which is required when mountpoints are nested. ---- - functions.sh | 2 +- - rescue.d/80grub-reinstall | 2 +- - rescue.d/81grub-efi-force-removable | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/functions.sh b/functions.sh -index 4e3338c6..186ad7b1 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -79,7 +79,7 @@ mountvirtfs () { - if mkdir -p "$path"; then - if mount -t "$fstype" "$fstype" "$path"; then - log "Success mounting $path" -- EXTRA_PATHS="$EXTRA_PATHS $path" -+ EXTRA_PATHS="$path $EXTRA_PATHS" - trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT - return - else -diff --git a/rescue.d/80grub-reinstall b/rescue.d/80grub-reinstall -index 31b45125..d9441a49 100755 ---- a/rescue.d/80grub-reinstall -+++ b/rescue.d/80grub-reinstall -@@ -16,7 +16,7 @@ modprobe efivarfs >/dev/null 2>&1 || true - mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal - if [ -e /target/boot/efi ]; then - chroot /target mount /boot/efi || true -- EXTRA_PATHS="$EXTRA_PATHS /target/boot/efi" -+ EXTRA_PATHS="/target/boot/efi $EXTRA_PATHS" - fi - if [ -n "$EXTRA_PATHS" ]; then - trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -diff --git a/rescue.d/81grub-efi-force-removable b/rescue.d/81grub-efi-force-removable -index 212aeb74..ede1ed33 100755 ---- a/rescue.d/81grub-efi-force-removable -+++ b/rescue.d/81grub-efi-force-removable -@@ -39,7 +39,7 @@ mountvirtfs sysfs /target/sys - modprobe efivarfs >/dev/null 2>&1 || true - mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal - chroot /target mount /boot/efi || true --EXTRA_PATHS="$EXTRA_PATHS /target/boot/efi" -+EXTRA_PATHS="/target/boot/efi $EXTRA_PATHS" - trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT - - db_progress STEP 1 --- -GitLab - - -From 01126606e5055c1448b439666557fa1e94588ff0 Mon Sep 17 00:00:00 2001 -From: Pascal Hambourg -Date: Sun, 27 Aug 2023 15:17:42 +0200 -Subject: [PATCH 11/14] Move unmount-on-exit logic into its own function - -So that it can be used with other mounts than mountvirtfs (/run, /boot/efi). - -Use unmount_on_exit with /proc and /run, so that unmounts match mounts -even on error exit. Unconditional unmount on normal exit only was -flawed. ---- - functions.sh | 8 ++++++-- - grub-installer | 14 +++++--------- - rescue.d/80grub-reinstall | 6 +----- - rescue.d/81grub-efi-force-removable | 4 +--- - 4 files changed, 13 insertions(+), 19 deletions(-) - -diff --git a/functions.sh b/functions.sh -index 186ad7b1..76df5ae0 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -69,6 +69,11 @@ die () { - } - - EXTRA_PATHS="" -+unmount_on_exit () { -+ EXTRA_PATHS="$1 $EXTRA_PATHS" -+ trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+} -+ - mountvirtfs () { - fstype="$1" - path="$2" -@@ -79,8 +84,7 @@ mountvirtfs () { - if mkdir -p "$path"; then - if mount -t "$fstype" "$fstype" "$path"; then - log "Success mounting $path" -- EXTRA_PATHS="$path $EXTRA_PATHS" -- trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+ unmount_on_exit "$path" - return - else - failed_action="Mounting" -diff --git a/grub-installer b/grub-installer -index bd2bcf9d..efdc5fa7 100755 ---- a/grub-installer -+++ b/grub-installer -@@ -35,17 +35,21 @@ if [ -z "$initial_proc_contents" ]; then - info "Mounting /proc into $ROOT" - if [ "$(udpkg --print-os)" = "kfreebsd" ]; then - mount -t linprocfs proc $ROOT/proc -+ unmount_on_exit $ROOT/proc - elif [ "$(udpkg --print-os)" = "hurd" ]; then - mount -t proc none $ROOT/proc -+ unmount_on_exit $ROOT/proc - else -- mount -t proc proc $ROOT/proc -+ mountvirtfs proc $ROOT/proc - fi - fi - - # On Linux, we need /run in the chroot to work around - # https://bugs.debian.org/918590. - if [ "$(udpkg --print-os)" = "linux" ] && [ ! -d "$ROOT/run/udev" ]; then -+ info "Bind mounting /run into $ROOT" - mount --bind /run $ROOT/run -+ unmount_on_exit $ROOT/run - fi - - get_serial_console() { -@@ -1483,11 +1487,3 @@ fi - - db_progress STEP 1 - db_progress STOP -- --if [ "$(udpkg --print-os)" = "linux" ] && ! umount $ROOT/run; then -- info "Failed to unmount /run in $ROOT" --fi -- --if ! umount $ROOT/proc; then -- info "Failed to unmount /proc in $ROOT" --fi -diff --git a/rescue.d/80grub-reinstall b/rescue.d/80grub-reinstall -index d9441a49..754338ba 100755 ---- a/rescue.d/80grub-reinstall -+++ b/rescue.d/80grub-reinstall -@@ -15,11 +15,7 @@ mountvirtfs sysfs /target/sys - modprobe efivarfs >/dev/null 2>&1 || true - mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal - if [ -e /target/boot/efi ]; then -- chroot /target mount /boot/efi || true -- EXTRA_PATHS="/target/boot/efi $EXTRA_PATHS" --fi --if [ -n "$EXTRA_PATHS" ]; then -- trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+ chroot /target mount /boot/efi && unmount_on_exit /target/boot/efi || true - fi - - db_input critical grub-installer/bootdev -diff --git a/rescue.d/81grub-efi-force-removable b/rescue.d/81grub-efi-force-removable -index ede1ed33..9275185d 100755 ---- a/rescue.d/81grub-efi-force-removable -+++ b/rescue.d/81grub-efi-force-removable -@@ -38,9 +38,7 @@ mountvirtfs proc /target/proc - mountvirtfs sysfs /target/sys - modprobe efivarfs >/dev/null 2>&1 || true - mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal --chroot /target mount /boot/efi || true --EXTRA_PATHS="/target/boot/efi $EXTRA_PATHS" --trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+chroot /target mount /boot/efi && unmount_on_exit /target/boot/efi || true - - db_progress STEP 1 - db_progress INFO grub-installer/progress/step_install_loader --- -GitLab - - -From 4ce7d6c337c36cee7db499482ab9507c7d018c5f Mon Sep 17 00:00:00 2001 -From: Pascal Hambourg -Date: Sun, 27 Aug 2023 18:02:38 +0200 -Subject: [PATCH 12/14] Move /sys and efivarfs mounts from postinst to - grub-installer - -And mount them only if we're installing grub-efi* to avoid adding a -bogus 'uefi-firmware' menu entry when ignore_uefi is set. -Also, remove /proc mount from postinst since grub-installer does it too. ---- - debian/postinst | 17 ----------------- - grub-installer | 7 +++++++ - 2 files changed, 7 insertions(+), 17 deletions(-) - -diff --git a/debian/postinst b/debian/postinst -index 2523c14f..f63eea3d 100755 ---- a/debian/postinst -+++ b/debian/postinst -@@ -1,20 +1,3 @@ - #! /bin/sh -e - --. /usr/share/debconf/confmodule -- --. /usr/share/grub-installer/functions.sh -- --ARCH=$(archdetect) --if [ "${ARCH#*/}" = "efi" ]; then -- # If we're installing grub-efi, it wants /sys mounted in the -- # target. Maybe /proc too? -- mountvirtfs proc /target/proc -- mountvirtfs sysfs /target/sys -- # unmounting /target/proc causes an error later on in the install: -- # umount: can't unmount /target/proc: Invalid argument -- # (seems like a bug somewhere, but will preserve the old 'overwriting traps' behaviour for now) -- EXTRA_PATHS="" -- mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal --fi -- - grub-installer /target -diff --git a/grub-installer b/grub-installer -index efdc5fa7..50defde0 100755 ---- a/grub-installer -+++ b/grub-installer -@@ -461,6 +461,13 @@ fi - - case $grub_package in - grub-efi*) -+ # If we're installing grub-efi, it wants /sys and efivarfs -+ # mounted in the target. Conversely, if we're installing grub-pc, -+ # efivarfs must not be mounted in the target to prevent update-grub -+ # from adding a bogus menu entry for UEFI firmware settings. -+ mountvirtfs sysfs $ROOT/sys -+ mountvirtfs efivarfs $ROOT/sys/firmware/efi/efivars non-fatal -+ - # debconf priority for the EFI removable question. The happy path here - # is that efi boot variables are available. If they are not, then the - # user most likely has to force grub to the removable media path in --- -GitLab - - -From 74edbf3a4ce9882569f8238cecd7651b6295087c Mon Sep 17 00:00:00 2001 -From: Philip Hands -Date: Mon, 28 Aug 2023 14:31:24 +0200 -Subject: [PATCH 13/14] Use a combined stack for on_exit() cleanup tasks - -Add support for not only umount but any cleanup commands (rmdir, rm...) -to prepare partman's ignore_uefi flag propagation to the target system. - -This requires to undo the operations in the reverse order to which they -were done in order to accomodate nested operations. So push all the -commands onto a single LIFO stack. ---- - functions.sh | 25 ++++++++++++++++++++----- - grub-installer | 6 +++--- - rescue.d/80grub-reinstall | 2 +- - rescue.d/81grub-efi-force-removable | 2 +- - 4 files changed, 25 insertions(+), 10 deletions(-) - -diff --git a/functions.sh b/functions.sh -index 76df5ae0..c48bf675 100644 ---- a/functions.sh -+++ b/functions.sh -@@ -68,11 +68,26 @@ die () { - exit 1 - } - --EXTRA_PATHS="" --unmount_on_exit () { -- EXTRA_PATHS="$1 $EXTRA_PATHS" -- trap "umount $EXTRA_PATHS" HUP INT QUIT KILL PIPE TERM EXIT -+# on_exit() takes a command, and pushes it onto a stack of commands, which -+# are later executed by perform_exit_stack() (via trap) in LIFO order. -+EXIT_STACK="" -+on_exit() { -+ if [ 1 != $# ]; then -+ error "$0: on_exit() expects exactly 1 argument, but was given $# ${*:+(args:$(printf " [%s]" "$@"))}" -+ exit 1 -+ fi -+ EXIT_STACK=$(printf '%s\n%s' "$1" "$EXIT_STACK") -+} -+ -+perform_exit_stack () { -+ printf '%s\n' "$EXIT_STACK" | \ -+ while read -r cmd; do -+ debug "perform_exit_stack(): Running \"$cmd\"" -+ eval "$cmd" || info "attempt to run \"$cmd\" failed [$?] when exiting \"$0\" (non-fatal)" -+ done -+ debug "perform_exit_stack(): exiting \"$0\"" - } -+trap perform_exit_stack HUP INT QUIT KILL PIPE TERM EXIT - - mountvirtfs () { - fstype="$1" -@@ -84,7 +99,7 @@ mountvirtfs () { - if mkdir -p "$path"; then - if mount -t "$fstype" "$fstype" "$path"; then - log "Success mounting $path" -- unmount_on_exit "$path" -+ on_exit "umount '$path'" - return - else - failed_action="Mounting" -diff --git a/grub-installer b/grub-installer -index 50defde0..5b9dc6a1 100755 ---- a/grub-installer -+++ b/grub-installer -@@ -35,10 +35,10 @@ if [ -z "$initial_proc_contents" ]; then - info "Mounting /proc into $ROOT" - if [ "$(udpkg --print-os)" = "kfreebsd" ]; then - mount -t linprocfs proc $ROOT/proc -- unmount_on_exit $ROOT/proc -+ on_exit "umount '$ROOT/proc'" - elif [ "$(udpkg --print-os)" = "hurd" ]; then - mount -t proc none $ROOT/proc -- unmount_on_exit $ROOT/proc -+ on_exit "umount '$ROOT/proc'" - else - mountvirtfs proc $ROOT/proc - fi -@@ -49,7 +49,7 @@ fi - if [ "$(udpkg --print-os)" = "linux" ] && [ ! -d "$ROOT/run/udev" ]; then - info "Bind mounting /run into $ROOT" - mount --bind /run $ROOT/run -- unmount_on_exit $ROOT/run -+ on_exit "umount '$ROOT/run'" - fi - - get_serial_console() { -diff --git a/rescue.d/80grub-reinstall b/rescue.d/80grub-reinstall -index 754338ba..cd05f3d6 100755 ---- a/rescue.d/80grub-reinstall -+++ b/rescue.d/80grub-reinstall -@@ -15,7 +15,7 @@ mountvirtfs sysfs /target/sys - modprobe efivarfs >/dev/null 2>&1 || true - mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal - if [ -e /target/boot/efi ]; then -- chroot /target mount /boot/efi && unmount_on_exit /target/boot/efi || true -+ chroot /target mount /boot/efi && on_exit "umount /target/boot/efi" || true - fi - - db_input critical grub-installer/bootdev -diff --git a/rescue.d/81grub-efi-force-removable b/rescue.d/81grub-efi-force-removable -index 9275185d..82e17a3b 100755 ---- a/rescue.d/81grub-efi-force-removable -+++ b/rescue.d/81grub-efi-force-removable -@@ -38,7 +38,7 @@ mountvirtfs proc /target/proc - mountvirtfs sysfs /target/sys - modprobe efivarfs >/dev/null 2>&1 || true - mountvirtfs efivarfs /target/sys/firmware/efi/efivars non-fatal --chroot /target mount /boot/efi && unmount_on_exit /target/boot/efi || true -+chroot /target mount /boot/efi && on_exit "umount /target/boot/efi" || true - - db_progress STEP 1 - db_progress INFO grub-installer/progress/step_install_loader --- -GitLab - - -From 44cf4f9ea70d42371a37f159a9610a92b506f4a1 Mon Sep 17 00:00:00 2001 -From: Pascal Hambourg -Date: Sun, 27 Aug 2023 19:28:45 +0200 -Subject: [PATCH 14/14] grub-installer: propagate ignore_uefi flag to target - system for os-prober - -If partman-efi set /var/lib/partman/ignore_uefi flag, os-prober -should perform legacy BIOS probes and skip EFI probes in target chroot, -so temporarily set ignore_uefi in the target system too. ---- - grub-installer | 30 ++++++++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) - -diff --git a/grub-installer b/grub-installer -index 5b9dc6a1..09dfe212 100755 ---- a/grub-installer -+++ b/grub-installer -@@ -323,6 +323,8 @@ case $ARCH in - ;; - i386/efi|amd64/efi) - if [ -f /var/lib/partman/ignore_uefi ]; then -+ # $SUBARCH != "efi" if partman ignore_uefi flag is set -+ # so this branch should not be reached - grub_package="grub-pc" - else - grub_package="grub-efi" -@@ -368,6 +370,34 @@ case $ARCH in - grub_package="grub-pc" - esac - -+if [ -f /var/lib/partman/ignore_uefi ]; then -+ # propagate partman ignore_uefi flag to the target system so that -+ # os-prober performs legacy BIOS probes instead of EFI probes -+ # when running update-grub in target chroot -+ if [ ! -e $ROOT/var/lib/partman ]; then -+ if mkdir -p $ROOT/var/lib/partman; then -+ on_exit "rmdir '$ROOT/var/lib/partman'" -+ else -+ error "Failed to create directory $ROOT/var/lib/partman" -+ exit 1 -+ fi -+ elif [ ! -d $ROOT/var/lib/partman ]; then -+ error "$ROOT/var/lib/partman exists but is not a directory" -+ exit 1 -+ fi -+ if [ ! -e $ROOT/var/lib/partman/ignore_uefi ]; then -+ if touch $ROOT/var/lib/partman/ignore_uefi; then -+ on_exit "rm '$ROOT/var/lib/partman/ignore_uefi'" -+ else -+ error "Failed to create file $ROOT/var/lib/partman/ignore_uefi" -+ exit 1 -+ fi -+ elif [ ! -f $ROOT/var/lib/partman/ignore_uefi ]; then -+ error "$ROOT/var/lib/partman/ignore_uefi exists but is not a regular file" -+ exit 1 -+ fi -+fi -+ - case "$frtype:$bootfstype:$bootfslabel:$grub_package" in - multipath:*:*:*) - # Multipath requires GRUB Legacy for now --- -GitLab - diff --git a/helpers/DATA/grub-installer/patch_changes/02_a50782a34b4e792d62b77a5b56c9ca7fe14ece9c.patch b/helpers/DATA/grub-installer/patch_changes/02_a50782a34b4e792d62b77a5b56c9ca7fe14ece9c.patch deleted file mode 100644 index 6097ef4..0000000 --- a/helpers/DATA/grub-installer/patch_changes/02_a50782a34b4e792d62b77a5b56c9ca7fe14ece9c.patch +++ /dev/null @@ -1,42 +0,0 @@ -From a50782a34b4e792d62b77a5b56c9ca7fe14ece9c Mon Sep 17 00:00:00 2001 -From: D-I role -Date: Thu, 14 Sep 2023 20:02:51 +0000 -Subject: [PATCH] [l10n] Update templates.pot (from l10n-sync run at dillon) - ---- - debian/po/templates.pot | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/debian/po/templates.pot b/debian/po/templates.pot -index 30e63b4e..c46bf4bd 100644 ---- a/debian/po/templates.pot -+++ b/debian/po/templates.pot -@@ -8,7 +8,7 @@ msgid "" - msgstr "" - "Project-Id-Version: grub-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" - "Last-Translator: FULL NAME \n" - "Language-Team: LANGUAGE \n" -@@ -394,14 +394,14 @@ msgstr "" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" -+msgid "Failed to mount ${PATH}" - msgstr "" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "" - - #. Type: error --- -GitLab - diff --git a/helpers/DATA/grub-installer/patch_changes/03_1e1b1e7cd8e9284dd4067705f55c3a207e008d60.patch b/helpers/DATA/grub-installer/patch_changes/03_1e1b1e7cd8e9284dd4067705f55c3a207e008d60.patch deleted file mode 100644 index 5a7b49b..0000000 --- a/helpers/DATA/grub-installer/patch_changes/03_1e1b1e7cd8e9284dd4067705f55c3a207e008d60.patch +++ /dev/null @@ -1,2659 +0,0 @@ -From 1e1b1e7cd8e9284dd4067705f55c3a207e008d60 Mon Sep 17 00:00:00 2001 -From: D-I role -Date: Thu, 14 Sep 2023 20:23:31 +0000 -Subject: [PATCH] [l10n] Commit changed/added po files (from l10n-sync run at - dillon) - ---- - debian/po/am.po | 10 ++++++---- - debian/po/ar.po | 14 ++++++++------ - debian/po/ast.po | 10 ++++++---- - debian/po/be.po | 14 ++++++++------ - debian/po/bg.po | 12 +++++++----- - debian/po/bn.po | 10 ++++++---- - debian/po/bo.po | 11 +++++------ - debian/po/bs.po | 10 ++++++---- - debian/po/ca.po | 12 +++++++----- - debian/po/cs.po | 12 +++++++----- - debian/po/cy.po | 10 ++++++---- - debian/po/da.po | 10 ++++++---- - debian/po/de.po | 12 +++++++----- - debian/po/dz.po | 10 ++++++---- - debian/po/el.po | 10 ++++++---- - debian/po/eo.po | 10 ++++++---- - debian/po/es.po | 12 +++++++----- - debian/po/et.po | 10 ++++++---- - debian/po/eu.po | 10 ++++++---- - debian/po/fa.po | 10 ++++++---- - debian/po/fi.po | 14 ++++++++------ - debian/po/fr.po | 10 ++++++---- - debian/po/ga.po | 10 ++++++---- - debian/po/gl.po | 10 ++++++---- - debian/po/gu.po | 10 ++++++---- - debian/po/he.po | 12 +++++++----- - debian/po/hi.po | 14 ++++++++------ - debian/po/hr.po | 14 ++++++++------ - debian/po/hu.po | 10 ++++++---- - debian/po/id.po | 14 ++++++++------ - debian/po/is.po | 12 +++++++----- - debian/po/it.po | 10 ++++++---- - debian/po/ja.po | 10 ++++++---- - debian/po/ka.po | 12 +++++++----- - debian/po/kab.po | 10 ++++++---- - debian/po/kk.po | 10 ++++++---- - debian/po/km.po | 10 ++++++---- - debian/po/kn.po | 10 ++++++---- - debian/po/ko.po | 12 +++++++----- - debian/po/ku.po | 10 ++++++---- - debian/po/lo.po | 10 ++++++---- - debian/po/lt.po | 12 +++++++----- - debian/po/lv.po | 10 ++++++---- - debian/po/mk.po | 10 ++++++---- - debian/po/ml.po | 10 ++++++---- - debian/po/mr.po | 10 ++++++---- - debian/po/nb.po | 14 ++++++++------ - debian/po/ne.po | 10 ++++++---- - debian/po/nl.po | 12 +++++++----- - debian/po/nn.po | 10 ++++++---- - debian/po/oc.po | 10 ++++++---- - debian/po/pa.po | 10 ++++++---- - debian/po/pl.po | 12 +++++++----- - debian/po/pt.po | 12 +++++++----- - debian/po/pt_BR.po | 12 +++++++----- - debian/po/ro.po | 12 +++++++----- - debian/po/ru.po | 10 ++++++---- - debian/po/se.po | 11 +++++++---- - debian/po/si.po | 10 ++++++---- - debian/po/sk.po | 10 ++++++---- - debian/po/sl.po | 10 ++++++---- - debian/po/sq.po | 10 ++++++---- - debian/po/sr.po | 12 +++++++----- - debian/po/sv.po | 14 ++++++++------ - debian/po/ta.po | 10 ++++++---- - debian/po/te.po | 10 ++++++---- - debian/po/tg.po | 10 ++++++---- - debian/po/th.po | 10 ++++++---- - debian/po/tl.po | 10 ++++++---- - debian/po/tr.po | 14 ++++++++------ - debian/po/ug.po | 10 ++++++---- - debian/po/uk.po | 14 ++++++++------ - debian/po/vi.po | 10 ++++++---- - debian/po/zh_CN.po | 14 ++++++++------ - debian/po/zh_TW.po | 14 ++++++++------ - 75 files changed, 490 insertions(+), 342 deletions(-) - -diff --git a/debian/po/am.po b/debian/po/am.po -index ee843616..1b753cf7 100644 ---- a/debian/po/am.po -+++ b/debian/po/am.po -@@ -17,7 +17,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-12-11 11:40+0000\n" - "Last-Translator: Danial Behzadi \n" - "Language-Team: Amharic \n" -@@ -428,14 +428,16 @@ msgstr "ግሩብ የገዢ ስልት ማስነሻ እንደገና ይተከል" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc ን መጫን አልተሳካም" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "ሲዲውን መጫን አልተሳካም" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "የproc ፋይል ስርዓትን በ /target/proc መጫን አልተሳካም።" - - #. Type: error -diff --git a/debian/po/ar.po b/debian/po/ar.po -index 300d86ee..fa7fca2c 100644 ---- a/debian/po/ar.po -+++ b/debian/po/ar.po -@@ -30,9 +30,9 @@ msgid "" - msgstr "" - "Project-Id-Version: ar\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2022-01-05 22:55+0000\n" --"Last-Translator: Bashir Hassan \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-02-10 08:40+0000\n" -+"Last-Translator: Khaled Mahmoud \n" - "Language-Team: \n" - "Language: ar\n" - "MIME-Version: 1.0\n" -@@ -453,14 +453,16 @@ msgstr "تثبيت محمّل الإقلاع GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "فشل تركيب /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "فشل تركيب القرص المدمج" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "فشل تركيب نظام ملفّات proc عند /target/proc." - - #. Type: error -diff --git a/debian/po/ast.po b/debian/po/ast.po -index 9dca7d44..04971f2a 100644 ---- a/debian/po/ast.po -+++ b/debian/po/ast.po -@@ -19,7 +19,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-12-11 11:40+0000\n" - "Last-Translator: Danial Behzadi \n" - "Language-Team: Softastur\n" -@@ -460,14 +460,16 @@ msgstr "Reinstalar el cargador d'arranque GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Falló montar /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Falló montar CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Falló montar el sistema de ficheros proc en /target/proc" - - #. Type: error -diff --git a/debian/po/be.po b/debian/po/be.po -index a3ba5ad3..3b137f1a 100644 ---- a/debian/po/be.po -+++ b/debian/po/be.po -@@ -22,9 +22,9 @@ msgid "" - msgstr "" - "Project-Id-Version: be\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-27 15:36+0300\n" --"Last-Translator: Viktar Siarheichyk \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-01 07:07+0000\n" -+"Last-Translator: Viktar Siarhejčyk \n" - "Language-Team: Belarusian \n" - "Language: be\n" - "MIME-Version: 1.0\n" -@@ -451,14 +451,16 @@ msgstr "Пераўсталяваць загрузчык GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Не атрымалася прымацаваць /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Не атрымалася прымацаваць CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "" - "Не атрымалася прымацаваць файлавую сістэму proc да пункта /target/proc." - -diff --git a/debian/po/bg.po b/debian/po/bg.po -index dc0e9821..ab00af87 100644 ---- a/debian/po/bg.po -+++ b/debian/po/bg.po -@@ -35,8 +35,8 @@ msgid "" - msgstr "" - "Project-Id-Version: bg\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2022-12-10 18:02+0200\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-04-06 18:54+0300\n" - "Last-Translator: Damyan Ivanov \n" - "Language-Team: Bulgarian \n" - "Language: bg\n" -@@ -474,14 +474,16 @@ msgstr "Повторно инсталиране на програмата за - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Грешка при монтирането на /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Грешка при монтиране на компактдиска" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "" - "Монтирането на файловата система proc в /target/proc завърши неуспешно." - -diff --git a/debian/po/bn.po b/debian/po/bn.po -index f5bd85ec..df9424bd 100644 ---- a/debian/po/bn.po -+++ b/debian/po/bn.po -@@ -32,7 +32,7 @@ msgid "" - msgstr "" - "Project-Id-Version: bn\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-14 17:53+0000\n" - "Last-Translator: Indrani Roy \n" - "Language-Team: Bengali\n" -@@ -464,14 +464,16 @@ msgstr "পুনরায় GRUB বুট লোডার ইনস্টলক - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc মাউন্ট করার যায় নি" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM মাউন্ট করতে ব্যর্থ" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "proc ফাইল সিস্টেমকে /target/proc-এ মাউন্ট করা যায় নি।" - - #. Type: error -diff --git a/debian/po/bo.po b/debian/po/bo.po -index 7a0972a8..64557a7f 100644 ---- a/debian/po/bo.po -+++ b/debian/po/bo.po -@@ -8,7 +8,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2019-08-28 18:09+0000\n" - "Last-Translator: leela <53352@protonmail.com>\n" - "Language-Team: bo \n" -@@ -435,17 +435,16 @@ msgstr "GRUB འགོ་འཛུགས་ཆས་བསྐྱར་དུ་ - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --#, fuzzy --msgid "Failed to mount /target/proc" --msgstr "/target ཐོག་ཏུ་བཀར་ཡོད་པའི་ཡིག་ཆ་མ་ལག་མེད་པ" -+msgid "Failed to mount ${PATH}" -+msgstr "" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 - #, fuzzy --msgid "Mounting the proc file system on /target/proc failed." --msgstr "/target/ ཐོག་ཏུ་རྨང་གཞིའི་སྒྲིག་འཇུག་བྱེད་མ་ཐུབ" -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." -+msgstr "${DEVICE} ཐོག་གི་ཁག་${PARTITION} གི་ཡིག་ཆའི་མ་ལག་${TYPE} འཚོལ་བཤེར་བཞིན་པ་་་" - - #. Type: error - #. Description -diff --git a/debian/po/bs.po b/debian/po/bs.po -index f6e8262e..6e1c8f8a 100644 ---- a/debian/po/bs.po -+++ b/debian/po/bs.po -@@ -26,7 +26,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer_packages_po_sublevel1_bs\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-04-28 20:08+0000\n" - "Last-Translator: Amar Tufo \n" - "Language-Team: Bosnian \n" -@@ -464,14 +464,16 @@ msgstr "Reinstaliraj GRUB boot loader" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Nemogu montirati /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Nemogu montirati CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Montiranje proc datotečnog sistema na /target/proc nije uspjelo." - - #. Type: error -diff --git a/debian/po/ca.po b/debian/po/ca.po -index 980286e3..d002101f 100644 ---- a/debian/po/ca.po -+++ b/debian/po/ca.po -@@ -23,8 +23,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-23 19:09+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-21 06:34+0000\n" - "Last-Translator: d \n" - "Language-Team: Catalan \n" - "Language: ca\n" -@@ -465,14 +465,16 @@ msgstr "Reinstal·la el carregador GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "No s'ha pogut muntar /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "No s'ha pogut muntar el CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Ha fallat el muntatge del sistema de fitxers proc a /target/proc." - - #. Type: error -diff --git a/debian/po/cs.po b/debian/po/cs.po -index ff27c66d..3a901e62 100644 ---- a/debian/po/cs.po -+++ b/debian/po/cs.po -@@ -18,8 +18,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-05-15 14:16+0200\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-06-27 21:49+0200\n" - "Last-Translator: Miroslav Kure \n" - "Language-Team: Czech \n" - "Language: cs\n" -@@ -446,14 +446,16 @@ msgstr "Reinstalovat zavaděč GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Připojení /target/proc selhalo" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Selhalo připojení CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Připojení souborového systému proc pod /target/proc selhalo." - - #. Type: error -diff --git a/debian/po/cy.po b/debian/po/cy.po -index d262bc6e..0e55e884 100644 ---- a/debian/po/cy.po -+++ b/debian/po/cy.po -@@ -20,7 +20,7 @@ msgid "" - msgstr "" - "Project-Id-Version: \n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-03-06 22:56+0000\n" - "Last-Translator: Ceiri Wyn Tudur \n" - "Language-Team: Welsh <>\n" -@@ -462,14 +462,16 @@ msgstr "Ailsefydlu'r llwythwr ymgychwyn GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Methwyd clymu /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Methwyd clymu CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Methwyd clymu'r system ffeiliau proc ar /target/proc." - - #. Type: error -diff --git a/debian/po/da.po b/debian/po/da.po -index f2b6dfa5..e555ff97 100644 ---- a/debian/po/da.po -+++ b/debian/po/da.po -@@ -39,7 +39,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer_packages_po_sublevel1_da\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-10 00:53+0000\n" - "Last-Translator: Tino Didriksen \n" - "Language-Team: \n" -@@ -470,14 +470,16 @@ msgstr "Geninstaller GRUB-opstartsindlæseren" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Kunne ikke montere /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Kunne ikke montere disketten" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Montering af proc-filsystemet på /target/proc mislykkedes." - - #. Type: error -diff --git a/debian/po/de.po b/debian/po/de.po -index dd82683b..47340661 100644 ---- a/debian/po/de.po -+++ b/debian/po/de.po -@@ -41,8 +41,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-22 23:52+0200\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-30 22:32+0200\n" - "Last-Translator: Holger Wansing \n" - "Language-Team: German \n" - "Language: de\n" -@@ -487,14 +487,16 @@ msgstr "Den GRUB-Bootloader neu installieren" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Einbinden von /target/proc fehlgeschlagen" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Einbinden der CD-ROM fehlgeschlagen" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Das proc-Dateisystem konnte nicht als /target/proc eingebunden werden." - - #. Type: error -diff --git a/debian/po/dz.po b/debian/po/dz.po -index 3d4438cb..c58b12c3 100644 ---- a/debian/po/dz.po -+++ b/debian/po/dz.po -@@ -18,7 +18,7 @@ msgid "" - msgstr "" - "Project-Id-Version: dDz.po\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2021-05-21 05:32+0000\n" - "Last-Translator: Jacque Fresco \n" - "Language-Team: Dzongkha \n" -@@ -454,14 +454,16 @@ msgstr "GRUB བུཊི་མངོན་གསལ་པ་ལོག་གཞ - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr " /target/proc སྦྱར་བརྩེགས་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "སི་ཌི་-རོམ་སྦྱར་བཙེགས་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr " /target/proc ལུ་ proc ཡིག་སྣོད་རིམ་ལུགས་སྦྱར་བརྩེགས་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོ" - - #. Type: error -diff --git a/debian/po/el.po b/debian/po/el.po -index 2a1f8a5e..5ca0e845 100644 ---- a/debian/po/el.po -+++ b/debian/po/el.po -@@ -35,7 +35,7 @@ msgid "" - msgstr "" - "Project-Id-Version: el\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-13 02:46+0300\n" - "Last-Translator: galaxico \n" - "Language-Team: Greek \n" -@@ -477,14 +477,16 @@ msgstr "Επανεγκατάσταση του φορτωτή εκκίνησης - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Σφάλμα κατά τη προσάρτηση του /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Σφάλμα κατά την προσάρτηση (mount) του CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "" - "Η προσάρτηση του εικονικού συστήματος αρχείων procfs στο /target/proc " - "απέτυχε." -diff --git a/debian/po/eo.po b/debian/po/eo.po -index 3ae61c11..3bc6e47d 100644 ---- a/debian/po/eo.po -+++ b/debian/po/eo.po -#@@ -22,7 +22,7 @@ msgid "" -# msgstr "" -# "Project-Id-Version: debian-installer\n" -# "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" -#-"POT-Creation-Date: 2023-04-20 20:02+0000\n" -#+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -# "PO-Revision-Date: 2023-07-21 00:03+0000\n" -# "Last-Translator: Felipe Castro \n" -# "Language-Team: Esperanto \n" -@@ -453,14 +453,16 @@ msgstr "Reinstali la ekŝargilon 'GRUB'" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Malsukcesis munti /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Munto de lumdisko malsukcesis" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Muntado de dosiersistemo proc sur /target/proc malsukcesis." - - #. Type: error -diff --git a/debian/po/es.po b/debian/po/es.po -index 4f716c37..72bedde0 100644 ---- a/debian/po/es.po -+++ b/debian/po/es.po -@@ -60,8 +60,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-23 19:09+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-18 17:56+0000\n" - "Last-Translator: gallegonovato \n" - "Language-Team: Debian Spanish \n" - "Language: es\n" -@@ -503,14 +503,16 @@ msgstr "Reinstalar el cargador de arranque GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Fallo al montar «/target/proc»" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Se produjo un fallo al montar el CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Falló el montaje el sistema de ficheros proc en «/target/proc»." - - #. Type: error -diff --git a/debian/po/et.po b/debian/po/et.po -index a638f434..26f09abe 100644 ---- a/debian/po/et.po -+++ b/debian/po/et.po -@@ -31,7 +31,7 @@ msgid "" - msgstr "" - "Project-Id-Version: \n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-04-25 19:42+0000\n" - "Last-Translator: Kristjan Räts \n" - "Language-Team: Estonian <>\n" -@@ -460,14 +460,16 @@ msgstr "GRUB alglaaduri uuesti seadistamine" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc haakimine nurjus" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Laserketast ei õnnestunud haakida" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Failisüsteemi /target/proc ei õnnestunud külge haakida." - - #. Type: error -diff --git a/debian/po/eu.po b/debian/po/eu.po -index eecab2dc..f6166dd1 100644 ---- a/debian/po/eu.po -+++ b/debian/po/eu.po -@@ -27,7 +27,7 @@ msgid "" - msgstr "" - "Project-Id-Version: di-sublevel1_eu\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-06-09 19:45+0000\n" - "Last-Translator: Gontzal Manuel Pujana Onaindia \n" - "Language-Team: Basque \n" -@@ -458,14 +458,16 @@ msgstr "Berriro instalatu GRUB abioko kargatzailea" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Huts egin du /target/proc muntatzean" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Ezin izan da CD-ROMa muntatu" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Huts egin du proc fitxategi-sistema /target/proc-en muntatzean." - - #. Type: error -diff --git a/debian/po/fa.po b/debian/po/fa.po -index 71d635c3..6ef61be0 100644 ---- a/debian/po/fa.po -+++ b/debian/po/fa.po -@@ -25,7 +25,7 @@ msgid "" - msgstr "" - "Project-Id-Version: fa sublevel1\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-06 12:58+0000\n" - "Last-Translator: Danial Behzadi \n" - "Language-Team: Debian-l10n-persian \n" -@@ -456,14 +456,16 @@ msgstr "نصب مجدد راه‌انداز GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "سوار کردن /target/proc شکست خورد" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "مونت CD-ROM با شکست مواجه شد" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "فایل سیستم proc بر روی /target/proc مانت نشده است ." - - #. Type: error -diff --git a/debian/po/fi.po b/debian/po/fi.po -index f489caba..299edc36 100644 ---- a/debian/po/fi.po -+++ b/debian/po/fi.po -@@ -27,9 +27,9 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2022-06-02 19:19+0000\n" --"Last-Translator: Jiri Nakola \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2022-09-16 09:23+0000\n" -+"Last-Translator: Tommi Nieminen \n" - "Language-Team: Finnish \n" - "Language: fi\n" - "MIME-Version: 1.0\n" -@@ -456,14 +456,16 @@ msgstr "Asennetaan GRUB-alkulatausohjelma uudelleen" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Hakemiston /target/proc liittäminen ei onnistunut" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-levyn liittäminen epäonnistui" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "" - "proc-tiedostojärjestelmän liittäminen liitoskohtaan /target/proc ei " - "onnistunut." -diff --git a/debian/po/fr.po b/debian/po/fr.po -index 205fe424..9333b07f 100644 ---- a/debian/po/fr.po -+++ b/debian/po/fr.po -@@ -30,7 +30,7 @@ msgid "" - msgstr "" - "Project-Id-Version: fr\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-14 09:38+0200\n" - "Last-Translator: Baptiste Jammet \n" - "Language-Team: French \n" -@@ -480,14 +480,16 @@ msgstr "Réinstallation du programme de démarrage GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Échec du montage de /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Impossible de monter le CD" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Le montage du système de fichiers « proc » sur /target/proc a échoué." - - #. Type: error -diff --git a/debian/po/ga.po b/debian/po/ga.po -index 8f134764..338d0466 100644 ---- a/debian/po/ga.po -+++ b/debian/po/ga.po -@@ -17,7 +17,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-04-24 19:41-0500\n" - "Last-Translator: Kevin Scannell \n" - "Language-Team: Irish \n" -@@ -451,14 +451,16 @@ msgstr "Athshuiteáil luchtóir tosaithe GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Theip ar /target/proc a fheistiú" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Theip ar CD-ROM a fheistiú" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Níorbh fhéidir an córas comhad proc a fheistiú ar /target/proc." - - #. Type: error -diff --git a/debian/po/gl.po b/debian/po/gl.po -index 9a10d06e..fe262a98 100644 ---- a/debian/po/gl.po -+++ b/debian/po/gl.po -@@ -25,7 +25,7 @@ msgid "" - msgstr "" - "Project-Id-Version: gl\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-04-16 12:50+0000\n" - "Last-Translator: gallegonovato \n" - "Language-Team: Galician \n" -@@ -460,14 +460,16 @@ msgstr "Reinstalar o cargador de arranque GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Non foi posíbel montar /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Non foi posíbel montar o CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Non foi posíbel montar o sistema de ficheiros proc en /target/proc ." - - #. Type: error -diff --git a/debian/po/gu.po b/debian/po/gu.po -index e6325e69..ea12770d 100644 ---- a/debian/po/gu.po -+++ b/debian/po/gu.po -@@ -24,7 +24,7 @@ msgid "" - msgstr "" - "Project-Id-Version: d-i\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2008-08-07 11:42+0530\n" - "Last-Translator: Kartik Mistry \n" - "Language-Team: \n" -@@ -451,14 +451,16 @@ msgstr "GRUB બૂટ લોડર ફરી સ્થાપિત કરો" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc માઉન્ટ કરવામાં નિષ્ફળ" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "સીડી-રોમ માઉન્ટ કરવામાં નિષ્ફળ" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "/target/proc પર proc ફાઇલ સિસ્ટમ માઉન્ટ કરવામાં નિષ્ફળ ગયું" - - #. Type: error -diff --git a/debian/po/he.po b/debian/po/he.po -index 69beaa2d..3dda5b63 100644 ---- a/debian/po/he.po -+++ b/debian/po/he.po -@@ -27,8 +27,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-23 13:41+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-18 17:56+0000\n" - "Last-Translator: Yaron Shahrabani \n" - "Language-Team: Hebrew (https://www.transifex.com/yaron/teams/79473/he/)\n" - "Language: he\n" -@@ -449,14 +449,16 @@ msgstr "התקנה מחדש של מנהל האתחול GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "העיגון של ‎/target/proc נכשל" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "עגינת התקליטור נכשלה" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "עיגון מערכת קבצים מסוג proc ב־‎ /target/proc נכשל." - - #. Type: error -diff --git a/debian/po/hi.po b/debian/po/hi.po -index e90c81ac..c9411908 100644 ---- a/debian/po/hi.po -+++ b/debian/po/hi.po -@@ -27,7 +27,7 @@ - # Kumar Appaiah , 2008, 2011, 2012. - # Sruthi Chandran , 2018. - # Himanshu Awasthi , 2018. --# KushagraKarira , 2020, 2021. -+# KushagraKarira , 2020, 2021, 2022. - # षिखर् , 2020. - # Indrani Roy , 2021. - # -@@ -35,8 +35,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer_packages_po_sublevel1_hi\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2021-12-03 23:44+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2022-12-17 17:48+0000\n" - "Last-Translator: KushagraKarira \n" - "Language-Team: \n" - "Language: hi\n" -@@ -458,14 +458,16 @@ msgstr "ग्रब बूट लोडर पुनः संस्थाप - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc को आरूढ़ करने में विफल" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "सीडी-रोम माउन्ट करने में असफल" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "proc फाइलतंत्र को /target/proc पर माउंट करने में असफल." - - #. Type: error -diff --git a/debian/po/hr.po b/debian/po/hr.po -index 61e08318..d894292e 100644 ---- a/debian/po/hr.po -+++ b/debian/po/hr.po -@@ -24,9 +24,9 @@ msgid "" - msgstr "" - "Project-Id-Version: Debian-installer 1st-stage master file HR\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-05-28 21:04+0200\n" --"Last-Translator: Valentin Vidic \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-06-03 10:49+0000\n" -+"Last-Translator: Milo Ivir \n" - "Language-Team: Croatian \n" - "Language: hr\n" - "MIME-Version: 1.0\n" -@@ -455,14 +455,16 @@ msgstr "Ponovno instalirajte GRUB učitača pokretanja" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Neuspjelo montiranje /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Neuspjelo montiranje CD-ROM-a" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Montiranje proc datotečnog sustava na /target/proc nije uspjelo." - - #. Type: error -diff --git a/debian/po/hu.po b/debian/po/hu.po -index e93be7bf..581c24cf 100644 ---- a/debian/po/hu.po -+++ b/debian/po/hu.po -@@ -28,7 +28,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-04-25 15:56+0000\n" - "Last-Translator: Balázs Máhli \n" - "Language-Team: Debian L10n Hungarian \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-24 22:56+0000\n" -+"Last-Translator: Reza Almanda \n" - "Language-Team: Debian Indonesia Translators \n" - "Language: id\n" -@@ -467,14 +467,16 @@ msgstr "Memasang kembali boot loader GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Gagal mengaitkan /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Gagal mengaitkan CD ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Pengaitan sistem berkas proc pada /target/proc gagal." - - #. Type: error -diff --git a/debian/po/is.po b/debian/po/is.po -index 2a4536f7..ed1a58e2 100644 ---- a/debian/po/is.po -+++ b/debian/po/is.po -#@@ -26,8 +26,8 @@ msgid "" -# msgstr "" -# "Project-Id-Version: Icelandic (Debian Installer)\n" -# "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" -#-"POT-Creation-Date: 2023-04-20 20:02+0000\n" -#-"PO-Revision-Date: 2023-06-05 11:50+0000\n" -#+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -#+"PO-Revision-Date: 2023-07-24 14:07+0000\n" -# "Last-Translator: Sveinn í Felli \n" -# "Language-Team: Icelandic \n" -# "Language: is\n" -@@ -458,14 +458,16 @@ msgstr "Setja GRUB ræsistjórann upp aftur" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Tókst ekki að tengja /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Tókst ekki að tengja geisladisk" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Tókst ekki að tengja proc skráakerfið á /target/proc." - - #. Type: error -diff --git a/debian/po/it.po b/debian/po/it.po -index 534cce70..b30ec2e0 100644 ---- a/debian/po/it.po -+++ b/debian/po/it.po -@@ -40,7 +40,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2020-10-26 09:14+0100\n" - "Last-Translator: Milo Casagrande \n" - "Language-Team: Italian \n" -@@ -477,14 +477,16 @@ msgstr "Re-installare il boot loader GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Montaggio di /target/proc non riuscito" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Montaggio del dischetto non riuscito" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Il montaggio del file system proc su /target/proc non è riuscito." - - #. Type: error -diff --git a/debian/po/ja.po b/debian/po/ja.po -index baef32f4..1a2eba91 100644 ---- a/debian/po/ja.po -+++ b/debian/po/ja.po -@@ -29,7 +29,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-14 17:53+0000\n" - "Last-Translator: YOSHINO Yoshihito \n" - "Language-Team: Debian L10n Japanese \n" -@@ -462,14 +462,16 @@ msgstr "GRUB ブートローダの再インストール" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc のマウントに失敗しました" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM のマウントに失敗しました" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "proc ファイルシステムを /target/proc にマウントするのに失敗しました。" - - #. Type: error -diff --git a/debian/po/ka.po b/debian/po/ka.po -index a4be02c3..b3604785 100644 ---- a/debian/po/ka.po -+++ b/debian/po/ka.po -@@ -24,8 +24,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer.2006071\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-09 20:53+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-05 18:47+0000\n" - "Last-Translator: Temuri Doghonadze \n" - "Language-Team: Georgian\n" - "Language: ka\n" -@@ -459,14 +459,16 @@ msgstr "GRUB სისტემური ჩამტვირთველის - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "შეცდომა დამონტაჟებისას" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "შეცდომა კომპაქტ-დისკის დამონტაჟებისას" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "proc ფაილური სისტემა ვერ დამონტაჟდა პუნქტზე /target/proc." - - #. Type: error -diff --git a/debian/po/kab.po b/debian/po/kab.po -index 1657e781..f3416692 100644 ---- a/debian/po/kab.po -+++ b/debian/po/kab.po -@@ -12,7 +12,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer sublevel1\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-01-28 11:55+0000\n" - "Last-Translator: Selyan Sliman Amiri \n" - "Language-Team: Kabyle \n" -@@ -444,14 +444,16 @@ msgstr "Ales asebded n umsalay n usenker GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Yecceḍ userkeb n /asaḍas/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Ur yeddi ara usali n CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Yecceḍ userkeb n unagraw n yifuyla proc ɣef /usaḍas/proc." - - #. Type: error -diff --git a/debian/po/kk.po b/debian/po/kk.po -index 0406791e..deced522 100644 ---- a/debian/po/kk.po -+++ b/debian/po/kk.po -@@ -22,7 +22,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-12-04 17:19+0600\n" - "Last-Translator: Baurzhan Muftakhidinov \n" - "Language-Team: Kazakh\n" -@@ -448,14 +448,16 @@ msgstr "GRUB жүйелік жүктеушісін қайта орнату" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc тіркеу сәтсіз" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM тіркеу сәтсіз аяқталды" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Базалық жүйені /target/ бумасын орнату сәтсіз аяқталды." - - #. Type: error -diff --git a/debian/po/km.po b/debian/po/km.po -index 1a12670a..4d8b3c69 100644 ---- a/debian/po/km.po -+++ b/debian/po/km.po -@@ -13,7 +13,7 @@ msgid "" - msgstr "" - "Project-Id-Version: km\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2019-08-28 18:10+0000\n" - "Last-Translator: leela <53352@protonmail.com>\n" - "Language-Team: Khmer \n" -@@ -446,14 +446,16 @@ msgstr "ដំឡើង​កម្មវិធី​ចាប់ផ្ដើម - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ម៉ោន /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "បរាជ័យ​ក្នុង​ម៉ោន​ស៊ីឌីរ៉ូម" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "ការ​ម៉ោន​ប្រព័ន្ធ​ឯកសារ proc លើ /target/proc បាន​បរាជ័យ​ហើយ ។" - - #. Type: error -diff --git a/debian/po/kn.po b/debian/po/kn.po -index 08548589..bf2b3f53 100644 ---- a/debian/po/kn.po -+++ b/debian/po/kn.po -@@ -21,7 +21,7 @@ msgid "" - msgstr "" - "Project-Id-Version: kn\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2020-07-21 17:24+0000\n" - "Last-Translator: Yogesh \n" - "Language-Team: Kannada \n" -@@ -458,14 +458,16 @@ msgstr "ಗ್ರಬ್ ಬೂಟ್ ಲೋಡರನ್ನು ಮರುಸ್ಥ - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc ಕಳಶವಾಗಿಸಲು ವಿಫಲವಾಗಿದೆ " -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "ಸಿ ಡಿ ರೊಮ್ ಅನ್ನು ಆರೋಹಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "proc ಕಡತ ವ್ಯವಸ್ಥೆ ಯು /target/proc ಮೇಲೆ ಕಳಶವಾಗಿಸಲು ವಿಫಲವಾಗಿದೆ " - - #. Type: error -diff --git a/debian/po/ko.po b/debian/po/ko.po -index c2fc156e..8704d5f5 100644 ---- a/debian/po/ko.po -+++ b/debian/po/ko.po -@@ -27,8 +27,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-28 22:35+0900\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-09-04 17:30+0530\n" - "Last-Translator: Changwoo Ryu \n" - "Language-Team: Korean \n" - "Language: ko\n" -@@ -449,14 +449,16 @@ msgstr "GRUB 부트로더 다시 설치" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc을 마운트하는데 실패했습니다" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM을 마운트하는데 실패했습니다" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "/target/proc의 proc 파일 시스템을 마운트하는데 실패했습니다." - - #. Type: error -diff --git a/debian/po/ku.po b/debian/po/ku.po -index 535e8c96..34d56d1e 100644 ---- a/debian/po/ku.po -+++ b/debian/po/ku.po -@@ -18,7 +18,7 @@ msgid "" - msgstr "" - "Project-Id-Version: ku\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2021-05-21 05:32+0000\n" - "Last-Translator: Jacque Fresco \n" - "Language-Team: Kurdish Team http://pckurd.net\n" -@@ -450,14 +450,16 @@ msgstr "Boot loader a GRUB ji nû ve saz bike" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Mountkirina /target/proc serneket" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Mountkirina CD-ROM serneket" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Mountkirina pergala pelan proc di /target/proc de serneket." - - #. Type: error -diff --git a/debian/po/lo.po b/debian/po/lo.po -index a32ea04c..10530775 100644 ---- a/debian/po/lo.po -+++ b/debian/po/lo.po -@@ -13,7 +13,7 @@ msgid "" - msgstr "" - "Project-Id-Version: lo\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2012-04-25 09:05+0700\n" - "Last-Translator: Anousak Souphavanh \n" - "Language-Team: Lao \n" -@@ -439,14 +439,16 @@ msgstr "ຕິດຕັ້ງບູດໂຫຼດເດີ GRUB ໃໝ່" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "ລົ້ມແຫຼວທີ່ຈະຍຶດເປົ້າໝາຍ /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "ເມົ້າທ໌ຊີດີລອມບໍ່ສຳເລັດ" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "ເມົ້າທ໌ລະບົບແຟ້ມ proc ເທີງ /target/proc ບໍ່ສຳເລັດ" - - #. Type: error -diff --git a/debian/po/lt.po b/debian/po/lt.po -index 5d1eaf59..e78f758f 100644 ---- a/debian/po/lt.po -+++ b/debian/po/lt.po -#@@ -29,8 +29,8 @@ msgid "" -# msgstr "" -# "Project-Id-Version: debian-installer\n" -# "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" -#-"POT-Creation-Date: 2023-04-20 20:02+0000\n" -#-"PO-Revision-Date: 2023-07-17 07:08+0000\n" -#+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -#+"PO-Revision-Date: 2023-08-30 06:12+0000\n" -# "Last-Translator: Rimas Kudelis \n" -# "Language-Team: Lithuanian \n" -# "Language: lt\n" -@@ -464,14 +464,16 @@ msgstr "Pradinio įkėliklio GRUB įdiegimas naujai" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Nepavyko prijungti „/target/proc“" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Nepavyko prijungti kompaktinio disko" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Nepavyko prijungti „proc“ failų sistemos prie „/target/proc“." - - #. Type: error -diff --git a/debian/po/lv.po b/debian/po/lv.po -index 4100cc03..0674bb3c 100644 ---- a/debian/po/lv.po -+++ b/debian/po/lv.po -@@ -29,7 +29,7 @@ msgid "" - msgstr "" - "Project-Id-Version: lv\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-04-30 21:51+0300\n" - "Last-Translator: Tranzistors \n" - "Language-Team: Latvian \n" -@@ -456,14 +456,16 @@ msgstr "Pārinstalēt GRUB palaidēju" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Neizdevās piemontēt /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Nevarēja piemontēt CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Neizdevās piemontēt proc datņu sistēmu uz /target/proc." - - #. Type: error -diff --git a/debian/po/mk.po b/debian/po/mk.po -index 419793c7..90819be0 100644 ---- a/debian/po/mk.po -+++ b/debian/po/mk.po -@@ -24,7 +24,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer_packages_po_sublevel1_mk\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-20 08:52+0000\n" - "Last-Translator: Kristijan Fremen Velkovski \n" - "Language-Team: Macedonian <>\n" -@@ -463,14 +463,16 @@ msgstr "Преинсталирај го ГРУБ бут вчитувачот" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Не успеав да монтирам /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Не успеав да го монтирам CD-ROM-от" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Монтирањето на proc датотечниот систем на /target/proc не успеа." - - #. Type: error -diff --git a/debian/po/ml.po b/debian/po/ml.po -index 70f57062..30ef3660 100644 ---- a/debian/po/ml.po -+++ b/debian/po/ml.po -@@ -23,7 +23,7 @@ msgid "" - msgstr "" - "Project-Id-Version: Debian Installer Level 1\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-04-10 08:47+0000\n" - "Last-Translator: anomymous\n" - "Language-Team: Swatantra Malayalam Computing \n" -@@ -461,14 +461,16 @@ msgstr "ഗ്രബ് ബൂട്ട് ലോഡര്‍ വീണ്ടു - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc മൌണ്ട് ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "സിഡി-റോം മൌണ്ട് ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "proc ഫയല്‍ സിസ്റ്റം /target/proc ല്‍ മൌണ്ട് ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു." - - #. Type: error -diff --git a/debian/po/mr.po b/debian/po/mr.po -index 4a18c87f..0bbefe54 100644 ---- a/debian/po/mr.po -+++ b/debian/po/mr.po -@@ -19,7 +19,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2020-10-10 17:26+0000\n" - "Last-Translator: Prachi Joshi \n" - "Language-Team: CDAC_DI\n" -@@ -447,14 +447,16 @@ msgstr "ग्रब आरंभ सुचक पुन्हा अधिष - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc आरोहित करता आले नाही" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "सीडी-रॉम आरोहित करणे अयशस्वी" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "पीआरओसी फाईल प्रणाली /target/proc वर आरोहित करता आली नाही." - - #. Type: error -diff --git a/debian/po/nb.po b/debian/po/nb.po -index 63c27d03..8686f3dd 100644 ---- a/debian/po/nb.po -+++ b/debian/po/nb.po -@@ -34,9 +34,9 @@ msgid "" - msgstr "" - "Project-Id-Version: nb\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-05-06 12:58+0000\n" --"Last-Translator: Kjetil Sørlund \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-09-08 12:41+0000\n" -+"Last-Translator: Petter Reinholdtsen \n" - "Language-Team: Norwegian Bokmål \n" - "Language: nb\n" - "MIME-Version: 1.0\n" -@@ -466,14 +466,16 @@ msgstr "Installer oppstartslasteren GRUB på nytt" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Klarte ikke å montere /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Klarte ikke å montere CD-plata" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "klarte ikke å montere proc-filsystemet på /target/proc." - - #. Type: error -diff --git a/debian/po/ne.po b/debian/po/ne.po -index cfc89511..46e70a2a 100644 ---- a/debian/po/ne.po -+++ b/debian/po/ne.po -@@ -23,7 +23,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer_packages_po_sublevel1_ne\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2019-08-28 18:10+0000\n" - "Last-Translator: leela <53352@protonmail.com>\n" - "Language-Team: Nepali \n" -@@ -458,14 +458,16 @@ msgstr "GRUB बुट लोडर पुन:स्थापना गर्न - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc लाई माउन्ट गर्न असफल भयो" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "सी डी रोम माउन्ट गर्न असफल भयो" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "/target/proc मा proc फाइल प्रणाली माउन्ट गर्दै गरेको असफल भयो ।" - - #. Type: error -diff --git a/debian/po/nl.po b/debian/po/nl.po -index af8c79ea..3ca2fcdf 100644 ---- a/debian/po/nl.po -+++ b/debian/po/nl.po -@@ -27,8 +27,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer/sublevel1\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-21 23:04+0200\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-17 22:24+0200\n" - "Last-Translator: Frans Spiesschaert \n" - "Language-Team: Debian Dutch l10n Team \n" - "Language: nl\n" -@@ -471,14 +471,16 @@ msgstr "De GRUB bootloader opnieuw installeren" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Aankoppelen van /target/proc is mislukt" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Aankoppelen van de diskette is mislukt" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Aankoppelen van het proc-bestandssysteem op /target/proc is mislukt." - - #. Type: error -diff --git a/debian/po/nn.po b/debian/po/nn.po -index 8b138400..6266f181 100644 ---- a/debian/po/nn.po -+++ b/debian/po/nn.po -@@ -26,7 +26,7 @@ msgid "" - msgstr "" - "Project-Id-Version: nn\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-17 23:53+0000\n" - "Last-Translator: Yngve Spjeld-Landro \n" - "Language-Team: Norwegian Nynorsk \n" -@@ -457,14 +457,16 @@ msgstr "Installer oppstartssystemet GRUB på nytt" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Klarte ikkje å montera /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Klarte ikkje montera CD-plata" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Klarte ikkje å montera proc-filsystemet på /target/proc." - - #. Type: error -diff --git a/debian/po/oc.po b/debian/po/oc.po -index e45ea9b4..bb62baaf 100644 ---- a/debian/po/oc.po -+++ b/debian/po/oc.po -@@ -15,7 +15,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer sublevel1\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-05-20 08:52+0000\n" - "Last-Translator: Quentin PAGÈS \n" - "Language-Team: Occitan (post 1500) \n" -@@ -458,14 +458,16 @@ msgstr "Tornar installar lo gestionari d'aviada GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Impossible de montar /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Impossible de montar lo CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "" - "Lo montatge del sistèma de fichièrs « proc » sus /target/proc a pas capitat." - -diff --git a/debian/po/pa.po b/debian/po/pa.po -index 7f590f4b..0f465740 100644 ---- a/debian/po/pa.po -+++ b/debian/po/pa.po -#@@ -26,7 +26,7 @@ msgid "" -# msgstr "" -# "Project-Id-Version: pa\n" -# "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" -#-"POT-Creation-Date: 2023-04-20 20:02+0000\n" -#+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -# "PO-Revision-Date: 2023-09-03 10:42+0000\n" -# "Last-Translator: Aman Alam \n" -# "Language-Team: Punjabi \n" -@@ -448,14 +448,16 @@ msgstr "GRUB ਬੂਟ ਲੋਡਰ ਮੁੜ-ਇੰਸਟਾਲ ਹੋ ਰਿ - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc ਨੂੰ ਮਾਊਂਟ ਕਰਨ ਵਿੱਚ ਫੇਲ੍ਹ" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM ਮਾਊਂਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲ" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "/target/proc ਤੇ proc ਫਾਇਲ ਸਿਸਟਮ ਮਾਊਂਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲ।" - - #. Type: error -diff --git a/debian/po/pl.po b/debian/po/pl.po -index ddc6be5f..1ffd10a8 100644 ---- a/debian/po/pl.po -+++ b/debian/po/pl.po -#@@ -36,8 +36,8 @@ msgid "" -# msgstr "" -# "Project-Id-Version: debian-installer\n" -# "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" -#-"POT-Creation-Date: 2023-04-20 20:02+0000\n" -#-"PO-Revision-Date: 2023-06-29 21:52+0000\n" -#+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -#+"PO-Revision-Date: 2023-08-18 17:56+0000\n" -# "Last-Translator: Matthaiks \n" -# "Language-Team: Polish \n" -# "Language: pl\n" -@@ -472,14 +472,16 @@ msgstr "Ponowna instalacja programu rozruchowego GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Montowanie /target/proc nie powiodło się" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Nie udało się zamontować płyty CD" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Zamontowanie systemu plików proc na /target/proc nie powiodło się." - - #. Type: error -diff --git a/debian/po/pt.po b/debian/po/pt.po -index b84557c7..ff54239b 100644 ---- a/debian/po/pt.po -+++ b/debian/po/pt.po -@@ -24,8 +24,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-27 20:57+0100\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-27 16:16+0100\n" - "Last-Translator: Miguel Figueiredo \n" - "Language-Team: Portuguese \n" - "Language: pt\n" -@@ -459,14 +459,16 @@ msgstr "Reinstalar o carregador do sistema GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Falha ao tentar montar /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Não foi possível montar o CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Falha ao montar o sistema de ficheiros proc em /target/proc." - - #. Type: error -diff --git a/debian/po/pt_BR.po b/debian/po/pt_BR.po -index 7ce73bc3..223c4fce 100644 ---- a/debian/po/pt_BR.po -+++ b/debian/po/pt_BR.po -@@ -22,8 +22,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-21 18:30-0300\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-19 08:19-0300\n" - "Last-Translator: Adriano Rafael Gomes \n" - "Language-Team: Brazilian Portuguese \n" -@@ -463,14 +463,16 @@ msgstr "Reinstalar o carregador de inicialização GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Falha ao montar /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Falha ao montar CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "A montagem do sistema de arquivos proc em /target/proc falhou." - - #. Type: error -diff --git a/debian/po/ro.po b/debian/po/ro.po -index 7418062d..7efef826 100644 ---- a/debian/po/ro.po -+++ b/debian/po/ro.po -#@@ -38,8 +38,8 @@ msgid "" -# msgstr "" -# "Project-Id-Version: ro\n" -# "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" -#-"POT-Creation-Date: 2023-04-20 20:02+0000\n" -#-"PO-Revision-Date: 2023-06-19 12:51+0000\n" -#+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -#+"PO-Revision-Date: 2023-07-08 14:50+0000\n" -# "Last-Translator: NicolaeFericitu \n" -# "Language-Team: Romanian \n" -# "Language: ro\n" -@@ -483,14 +483,16 @@ msgstr "Reinstalează încărcătorul de sistem GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Eșec la montarea /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Eșec la montarea CD-ului" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Montarea sistemului de fișiere proc în /target/proc a eșuat." - - #. Type: error -diff --git a/debian/po/ru.po b/debian/po/ru.po -index b6e1e49c..5f81c7e3 100644 ---- a/debian/po/ru.po -+++ b/debian/po/ru.po -@@ -26,7 +26,7 @@ msgid "" - msgstr "" - "Project-Id-Version: ru\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-12-11 12:17+0500\n" - "Last-Translator: Lev Lamberov \n" - "Language-Team: Russian \n" -@@ -458,14 +458,16 @@ msgstr "Переустановка системного загрузчика GRU - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Не удалось смонтировать /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Не удалось смонтировать компакт-диск" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Не удалось смонтировать файловую систему proc в /target/proc." - - #. Type: error -diff --git a/debian/po/se.po b/debian/po/se.po -index 6ae2d232..75cb27f7 100644 ---- a/debian/po/se.po -+++ b/debian/po/se.po -@@ -15,7 +15,7 @@ msgid "" - msgstr "" - "Project-Id-Version: se\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2021-05-21 05:32+0000\n" - "Last-Translator: Jacque Fresco \n" - "Language-Team: Northern Sami \n" -@@ -437,15 +437,18 @@ msgstr "Sajáiduhttimin vuolggáhangieđahalli GRUB" - #. :sl4: - #: ../grub-installer.templates:30001 - #, fuzzy --msgid "Failed to mount /target/proc" --msgstr "Ii oktage fiilavuogádat lea čatnon /target ohcui" -+msgid "Failed to mount ${PATH}" -+msgstr "Hálidatgo geahččalit ođđasit čatnat CD-ROM:a?" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "" -+"Dárkkisteamen ${TYPE}-fiilavuogádaga partišuvdnanr. ${PARTITION}:s ${DEVICE}:" -+"s …" - - #. Type: error - #. Description -diff --git a/debian/po/si.po b/debian/po/si.po -index d101933c..c1ca8e95 100644 ---- a/debian/po/si.po -+++ b/debian/po/si.po -@@ -17,7 +17,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-03-01 15:39+0000\n" - "Last-Translator: HelaBasa Group \n" - "Language-Team: Sinhala \n" -@@ -443,14 +443,16 @@ msgstr "GRUB ආරම්භක පූරකය නැවත ස්ථාපන - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc රැඳවීම අසාර්ථක විය" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM රැඳවීම අසාර්ථකයි" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "proc ගොනු පද්ධතිය /target/proc හි රැඳවීම අසාර්ථක විය." - - #. Type: error -diff --git a/debian/po/sk.po b/debian/po/sk.po -index 7e7804b8..03c2999e 100644 ---- a/debian/po/sk.po -+++ b/debian/po/sk.po -@@ -25,7 +25,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2018-04-16 09:18+0200\n" - "Last-Translator: Ivan Masár \n" - "Language-Team: x\n" -@@ -464,14 +464,16 @@ msgstr "Reinštalácia zavádzača GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Chyba pri pripájaní /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Zlyhalo pripojenie CD" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Zlyhalo pripájanie súborového systému proc do /target/proc." - - #. Type: error -diff --git a/debian/po/sl.po b/debian/po/sl.po -index c19d4c69..3cc2cb1a 100644 ---- a/debian/po/sl.po -+++ b/debian/po/sl.po -@@ -33,7 +33,7 @@ msgid "" - msgstr "" - "Project-Id-Version: sl\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2017-10-13 10:42+0100\n" - "Last-Translator: Vanja Cvelbar \n" - "Language-Team: Slovenian \n" -@@ -475,14 +475,16 @@ msgstr "Ponovno namesti zagonski nalagalnik GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Nisem mogel priklopiti /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Nisem mogel priklopiti CD-ROM-a" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Priklapljanje proc datotečnega sistema na /target/proc ni uspelo." - - #. Type: error -diff --git a/debian/po/sq.po b/debian/po/sq.po -index 7ac41007..f35bd388 100644 ---- a/debian/po/sq.po -+++ b/debian/po/sq.po -@@ -20,7 +20,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2017-09-11 23:13+0300\n" - "Last-Translator: Sotirios Vrachas \n" - "Language-Team: Albanian \n" -@@ -466,14 +466,16 @@ msgstr "Duke reinstaluar ngarkuesin e nisjes GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Montimi i /target/proc dështoi" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Montimi i CD-ROM-it dështoi" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Montimi i filesistemit proc në /target/proc dështoi." - - #. Type: error -diff --git a/debian/po/sr.po b/debian/po/sr.po -index f3ef5e5a..762ca56f 100644 ---- a/debian/po/sr.po -+++ b/debian/po/sr.po -@@ -25,8 +25,8 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-27 16:50+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-28 16:13+0000\n" - "Last-Translator: Filipovic Dragan \n" - "Language-Team: Serbian \n" - "Language: sr\n" -@@ -454,14 +454,16 @@ msgstr "Понови инсталацију GRUB бут лоудера" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Неуспело монтирање /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Неуспело монирање CD-ROM-а" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Монтирање proc фајл система на /target/proc није успело." - - #. Type: error -diff --git a/debian/po/sv.po b/debian/po/sv.po -index 50a50751..3a333c86 100644 ---- a/debian/po/sv.po -+++ b/debian/po/sv.po -@@ -26,9 +26,9 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-24 19:49+0000\n" --"Last-Translator: bittin1ddc447d824349b2 \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-08-19 20:53+0000\n" -+"Last-Translator: Anders Jonsson \n" - "Language-Team: Swedish \n" - "Language: sv\n" - "MIME-Version: 1.0\n" -@@ -459,14 +459,16 @@ msgstr "Installera om starthanteraren GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Misslyckades med att montera /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Misslyckades med att montera cd-skiva" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Monteringen av proc-filsystemet i /target/proc misslyckades." - - #. Type: error -diff --git a/debian/po/ta.po b/debian/po/ta.po -index d173c901..ab578e21 100644 ---- a/debian/po/ta.po -+++ b/debian/po/ta.po -@@ -24,7 +24,7 @@ msgid "" - msgstr "" - "Project-Id-Version: ta\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2022-06-13 18:17+0000\n" - "Last-Translator: Alex \n" - "Language-Team: Tamil <>\n" -@@ -453,14 +453,16 @@ msgstr "க்ரப் துவக்கியை மீண்டும் ந - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc ஐ ஏற்றுதல் தோல்வியுற்றது" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "குறுந் தட்டை ஏற்றுதல் தோல்வியுற்றது" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "/target/proc இல் ப்ராக் கோப்பு அமைப்பை ஏற்றுதல் தோல்வியுற்றது." - - #. Type: error -diff --git a/debian/po/te.po b/debian/po/te.po -index 82848018..a9ea0b71 100644 ---- a/debian/po/te.po -+++ b/debian/po/te.po -@@ -21,7 +21,7 @@ msgid "" - msgstr "" - "Project-Id-Version: te\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2021-11-21 21:49+0000\n" - "Last-Translator: Praveen Illa \n" - "Language-Team: d-i \n" -@@ -446,14 +446,16 @@ msgstr "GRUB బూట్ లోడర్ ని మరల స్థాపనచ - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc సంధానము విఫలమైంది" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM అనుసంధానం విఫలం" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "/target/proc పై proc ఫైల్ వ్యవస్థ సంధానము విఫలమైంది" - - #. Type: error -diff --git a/debian/po/tg.po b/debian/po/tg.po -index c52e3f42..dccedd88 100644 ---- a/debian/po/tg.po -+++ b/debian/po/tg.po -@@ -15,7 +15,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2019-09-10 18:06+0500\n" - "Last-Translator: Victor Ibragimov \n" - "Language-Team: Tajik \n" -@@ -466,14 +466,16 @@ msgstr "Аз нав насб кардани боркунандаи роҳанд - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc васл карда нашуд" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM васл карда нашуд" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Низоми файлии proc дар /target/proc бо нокомӣ дучор шуд." - - #. Type: error -diff --git a/debian/po/th.po b/debian/po/th.po -index 102a4a6d..348362cd 100644 ---- a/debian/po/th.po -+++ b/debian/po/th.po -@@ -22,7 +22,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2021-02-03 16:48+0700\n" - "Last-Translator: Theppitak Karoonboonyanan \n" - "Language-Team: Thai \n" -@@ -439,14 +439,16 @@ msgstr "ติดตั้งบูตโหลดเดอร์ GRUB ใหม - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "ไม่สามารถเมานท์ /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "เมานท์ซีดีรอมไม่สำเร็จ" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "เมานท์ระบบแฟ้ม proc บน /target/proc ไม่สำเร็จ" - - #. Type: error -diff --git a/debian/po/tl.po b/debian/po/tl.po -index 8ed08be6..3295cd60 100644 ---- a/debian/po/tl.po -+++ b/debian/po/tl.po -@@ -20,7 +20,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2021-05-21 05:32+0000\n" - "Last-Translator: Jacque Fresco \n" - "Language-Team: Tagalog \n" -@@ -465,14 +465,16 @@ msgstr "Iluklok muli ang GRUB boot loader" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Bigo ang pag-mount ng /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Bigo ang pag-mount ng CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Bigo ang pag-mount ng proc file system sa /target/proc." - - #. Type: error -diff --git a/debian/po/tr.po b/debian/po/tr.po -index 7a374c17..ff0d48b0 100644 ---- a/debian/po/tr.po -+++ b/debian/po/tr.po -@@ -30,15 +30,15 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-05-10 11:52+0300\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-07-05 19:50+0000\n" - "Last-Translator: Fatih Altun \n" - "Language-Team: Debian L10N Turkish\n" - "Language: tr\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"Plural-Forms: nplurals=2; plural=n != 1;\n" - - #. Type: boolean - #. Description -@@ -465,14 +465,16 @@ msgstr "GRUB önyükleyiciyi tekrar kur" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc bağlanması başarısız" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM bağlanamadı" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "/target/proc üzerine proc dosya sistemi bağlanması başarısız." - - #. Type: error -diff --git a/debian/po/ug.po b/debian/po/ug.po -index 99102282..0ea84e46 100644 ---- a/debian/po/ug.po -+++ b/debian/po/ug.po -@@ -19,7 +19,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2020-07-21 17:24+0000\n" - "Last-Translator: Abdusalam <1810010207@s.upc.edu.cn>\n" - "Language-Team: Uyghur Computer Science Association \n" -@@ -459,14 +459,16 @@ msgstr "GRUB قوزغىتىش يۈكلىگۈچنى قايتا ئورنات" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "/target/proc ئېگەرلەش مەغلۇپ بولدى" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "CD-ROM نى ئېگەرلەش مەغلۇپ بولدى" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "proc ھۆججەت سىستېمىسىنى /target/proc غا ئېگەرلەش مەغلۇپ بولدى." - - #. Type: error -diff --git a/debian/po/uk.po b/debian/po/uk.po -index b5e17dba..086dc53a 100644 ---- a/debian/po/uk.po -+++ b/debian/po/uk.po -#@@ -25,9 +25,9 @@ msgid "" -# msgstr "" -# "Project-Id-Version: uk\n" -# "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" -#-"POT-Creation-Date: 2023-04-20 20:02+0000\n" -#-"PO-Revision-Date: 2023-06-15 17:50+0000\n" -#-"Last-Translator: Tymofii Lytvynenko \n" -#+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -#+"PO-Revision-Date: 2023-07-22 18:08+0000\n" -#+"Last-Translator: Serhii Horichenko \n" -# "Language-Team: Ukrainian \n" -# "Language: uk\n" -# "MIME-Version: 1.0\n" -@@ -455,14 +455,16 @@ msgstr "Перевстановити завантажувач GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Не вдалося змонтувати /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Не вдалося змонтувати CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Не вдалося змонтувати файлову систему proc в /target/proc." - - #. Type: error -diff --git a/debian/po/vi.po b/debian/po/vi.po -index bf35e102..f85d92fe 100644 ---- a/debian/po/vi.po -+++ b/debian/po/vi.po -@@ -18,7 +18,7 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer sublevel1\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" - "PO-Revision-Date: 2023-02-24 10:38+0000\n" - "Last-Translator: tictactoe \n" - "Language-Team: Vietnamese \n" -@@ -451,14 +451,16 @@ msgstr "Cài đặt lại bộ tải khởi động GRUB" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "Gặp lỗi khi gắn kết “/target/proc”" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "Gặp lỗi khi gắn đĩa CD-ROM" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "Gặp lỗi khi gắn kết hệ thống tập tin proc vào “/target/proc” bị lỗi." - - #. Type: error -diff --git a/debian/po/zh_CN.po b/debian/po/zh_CN.po -index 3a365eec..642b2d82 100644 ---- a/debian/po/zh_CN.po -+++ b/debian/po/zh_CN.po -@@ -37,9 +37,9 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2023-04-25 19:42+0000\n" --"Last-Translator: Wenbin Lv \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-09-06 15:06+0000\n" -+"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" - "Language-Team: \n" - "Language: zh_CN\n" - "MIME-Version: 1.0\n" -@@ -453,14 +453,16 @@ msgstr "重新安装 GRUB 启动引导器" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "挂载 /target/proc 失败" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "无法挂载光盘" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "挂载 proc 文件系统到 /target/proc 上失败。" - - #. Type: error -diff --git a/debian/po/zh_TW.po b/debian/po/zh_TW.po -index 78d53fae..414b7ed2 100644 ---- a/debian/po/zh_TW.po -+++ b/debian/po/zh_TW.po -@@ -33,9 +33,9 @@ msgid "" - msgstr "" - "Project-Id-Version: debian-installer\n" - "Report-Msgid-Bugs-To: grub-installer@packages.debian.org\n" --"POT-Creation-Date: 2023-04-20 20:02+0000\n" --"PO-Revision-Date: 2021-02-16 09:50+0000\n" --"Last-Translator: louies0623 \n" -+"POT-Creation-Date: 2023-09-14 20:02+0000\n" -+"PO-Revision-Date: 2023-02-02 11:37+0000\n" -+"Last-Translator: Chang-Chia Tseng \n" - "Language-Team: Debian-user in Chinese [Big5] \n" - "Language: zh_TW\n" -@@ -448,14 +448,16 @@ msgstr "重新安裝 GRUB 開機程式" - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Failed to mount /target/proc" --msgstr "無法掛載 /target/proc" -+#, fuzzy -+msgid "Failed to mount ${PATH}" -+msgstr "無法掛載光碟" - - #. Type: error - #. Description - #. :sl4: - #: ../grub-installer.templates:30001 --msgid "Mounting the proc file system on /target/proc failed." -+#, fuzzy -+msgid "Mounting the ${FSTYPE} file system on ${PATH} failed." - msgstr "在將 proc 檔案系統掛載至 /target/proc 上時失敗了。" - - #. Type: error --- -GitLab - diff --git a/helpers/DATA/grub2-unsigned/0001-Cryptomount-support-LUKS-detached-header.patch b/helpers/DATA/grub2-unsigned/0001-Cryptomount-support-LUKS-detached-header.patch deleted file mode 100644 index 5d6bd23..0000000 --- a/helpers/DATA/grub2-unsigned/0001-Cryptomount-support-LUKS-detached-header.patch +++ /dev/null @@ -1,253 +0,0 @@ -diff --git a/0001-Cryptomount-support-LUKS-detached-header.patch b/0001-Cryptomount-support-LUKS-detached-header.patch -new file mode 100644 -index 00000000000..65943f41b8c ---- /dev/null -+++ b/0001-Cryptomount-support-LUKS-detached-header.patch -@@ -0,0 +1,247 @@ -+From 2008e08c0a511da5d454664363f452a9e26c734f Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Tue, 23 Jun 2015 11:16:30 +0100 -+Subject: [PATCH 1/7] Cryptomount support LUKS detached header -+ -+--- -+ grub-core/disk/cryptodisk.c | 22 ++++++++++++++++++---- -+ grub-core/disk/geli.c | 7 +++++-- -+ grub-core/disk/luks.c | 45 +++++++++++++++++++++++++++++++++++++-------- -+ include/grub/cryptodisk.h | 5 +++-- -+ 4 files changed, 63 insertions(+), 16 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index bd60a66b3..5230a5a9a 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -41,6 +41,7 @@ static const struct grub_arg_option options[] = -+ /* TRANSLATORS: It's still restricted to cryptodisks only. */ -+ {"all", 'a', 0, N_("Mount all."), 0, 0}, -+ {"boot", 'b', 0, N_("Mount all volumes with `boot' flag set."), 0, 0}, -++ {"header", 'H', 0, N_("Read LUKS header from file"), 0, ARG_TYPE_STRING}, -+ {0, 0, 0, 0, 0, 0} -+ }; -+ -+@@ -809,6 +810,7 @@ grub_util_cryptodisk_get_uuid (grub_disk_t disk) -+ -+ static int check_boot, have_it; -+ static char *search_uuid; -++static grub_file_t hdr; -+ -+ static void -+ cryptodisk_close (grub_cryptodisk_t dev) -+@@ -833,13 +835,13 @@ grub_cryptodisk_scan_device_real (const char *name, grub_disk_t source) -+ -+ FOR_CRYPTODISK_DEVS (cr) -+ { -+- dev = cr->scan (source, search_uuid, check_boot); -++ dev = cr->scan (source, search_uuid, check_boot, hdr); -+ if (grub_errno) -+ return grub_errno; -+ if (!dev) -+ continue; -+ -+- err = cr->recover_key (source, dev); -++ err = cr->recover_key (source, dev, hdr); -+ if (err) -+ { -+ cryptodisk_close (dev); -+@@ -880,7 +882,7 @@ grub_cryptodisk_cheat_mount (const char *sourcedev, const char *cheat) -+ -+ FOR_CRYPTODISK_DEVS (cr) -+ { -+- dev = cr->scan (source, search_uuid, check_boot); -++ dev = cr->scan (source, search_uuid, check_boot,0); -+ if (grub_errno) -+ return grub_errno; -+ if (!dev) -+@@ -934,6 +936,18 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ if (argc < 1 && !state[1].set && !state[2].set) -+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required"); -+ -++ if (state[3].set) /* LUKS detached header */ -++ { -++ if (state[0].set) /* Cannot use UUID lookup with detached header */ -++ return GRUB_ERR_BAD_ARGUMENT; -++ -++ hdr = grub_file_open (state[3].arg, GRUB_FILE_TYPE_NONE); -++ if (!hdr) -++ return grub_errno; -++ } -++ else -++ hdr = NULL; -++ -+ have_it = 0; -+ if (state[0].set) -+ { -+@@ -1141,7 +1155,7 @@ GRUB_MOD_INIT (cryptodisk) -+ { -+ grub_disk_dev_register (&grub_cryptodisk_dev); -+ cmd = grub_register_extcmd ("cryptomount", grub_cmd_cryptomount, 0, -+- N_("SOURCE|-u UUID|-a|-b"), -++ N_("SOURCE|-u UUID|-a|-b|-H file"), -+ N_("Mount a crypto device."), options); -+ grub_procfs_register ("luks_script", &luks_script); -+ } -+diff --git a/grub-core/disk/geli.c b/grub-core/disk/geli.c -+index e9d23299a..f4394eb42 100644 -+--- a/grub-core/disk/geli.c -++++ b/grub-core/disk/geli.c -+@@ -52,6 +52,7 @@ -+ #include -+ #include -+ #include -++#include -+ #include -+ #include -+ #include -+@@ -243,7 +244,8 @@ grub_util_get_geli_uuid (const char *dev) -+ -+ static grub_cryptodisk_t -+ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+- int boot_only) -++ int boot_only, -++ grub_file_t hdr __attribute__ ((unused)) ) -+ { -+ grub_cryptodisk_t newdev; -+ struct grub_geli_phdr header; -+@@ -398,7 +400,8 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ } -+ -+ static grub_err_t -+-recover_key (grub_disk_t source, grub_cryptodisk_t dev) -++recover_key (grub_disk_t source, grub_cryptodisk_t dev, -++ grub_file_t hdr __attribute__ ((unused)) ) -+ { -+ grub_size_t keysize; -+ grub_uint8_t digest[GRUB_CRYPTO_MAX_MDLEN]; -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 86c50c612..66e64c0e0 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -23,6 +23,7 @@ -+ #include -+ #include -+ #include -++#include -+ #include -+ #include -+ #include -+@@ -66,7 +67,7 @@ gcry_err_code_t AF_merge (const gcry_md_spec_t * hash, grub_uint8_t * src, -+ -+ static grub_cryptodisk_t -+ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+- int check_boot) -++ int check_boot, grub_file_t hdr) -+ { -+ grub_cryptodisk_t newdev; -+ const char *iptr; -+@@ -86,11 +87,21 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ int benbi_log = 0; -+ grub_err_t err; -+ -++ err = GRUB_ERR_NONE; -++ -+ if (check_boot) -+ return NULL; -+ -+ /* Read the LUKS header. */ -+- err = grub_disk_read (disk, 0, 0, sizeof (header), &header); -++ if (hdr) -++ { -++ grub_file_seek (hdr, 0); -++ if (grub_file_read (hdr, &header, sizeof (header)) != sizeof (header)) -++ err = GRUB_ERR_READ_ERROR; -++ } -++ else -++ err = grub_disk_read (disk, 0, 0, sizeof (header), &header); -++ -+ if (err) -+ { -+ if (err == GRUB_ERR_OUT_OF_RANGE) -+@@ -304,12 +315,14 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid)); -+ newdev->modname = "luks"; -+ COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= sizeof (uuid)); -++ -+ return newdev; -+ } -+ -+ static grub_err_t -+ luks_recover_key (grub_disk_t source, -+- grub_cryptodisk_t dev) -++ grub_cryptodisk_t dev, -++ grub_file_t hdr) -+ { -+ struct grub_luks_phdr header; -+ grub_size_t keysize; -+@@ -321,8 +334,19 @@ luks_recover_key (grub_disk_t source, -+ grub_err_t err; -+ grub_size_t max_stripes = 1; -+ char *tmp; -++ grub_uint32_t sector; -++ -++ err = GRUB_ERR_NONE; -++ -++ if (hdr) -++ { -++ grub_file_seek (hdr, 0); -++ if (grub_file_read (hdr, &header, sizeof (header)) != sizeof (header)) -++ err = GRUB_ERR_READ_ERROR; -++ } -++ else -++ err = grub_disk_read (source, 0, 0, sizeof (header), &header); -+ -+- err = grub_disk_read (source, 0, 0, sizeof (header), &header); -+ if (err) -+ return err; -+ -+@@ -391,13 +415,18 @@ luks_recover_key (grub_disk_t source, -+ return grub_crypto_gcry_error (gcry_err); -+ } -+ -++ sector = grub_be_to_cpu32 (header.keyblock[i].keyMaterialOffset); -+ length = (keysize * grub_be_to_cpu32 (header.keyblock[i].stripes)); -+ -+ /* Read and decrypt the key material from the disk. */ -+- err = grub_disk_read (source, -+- grub_be_to_cpu32 (header.keyblock -+- [i].keyMaterialOffset), 0, -+- length, split_key); -++ if (hdr) -++ { -++ grub_file_seek (hdr, sector * 512); -++ if (grub_file_read (hdr, split_key, length) != (grub_ssize_t)length) -++ err = GRUB_ERR_READ_ERROR; -++ } -++ else -++ err = grub_disk_read (source, sector, 0, length, split_key); -+ if (err) -+ { -+ grub_free (split_key); -+diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h -+index 32f564ae0..4e6e89a93 100644 -+--- a/include/grub/cryptodisk.h -++++ b/include/grub/cryptodisk.h -+@@ -20,6 +20,7 @@ -+ #define GRUB_CRYPTODISK_HEADER 1 -+ -+ #include -++#include -+ #include -+ #include -+ #ifdef GRUB_UTIL -+@@ -107,8 +108,8 @@ struct grub_cryptodisk_dev -+ struct grub_cryptodisk_dev **prev; -+ -+ grub_cryptodisk_t (*scan) (grub_disk_t disk, const char *check_uuid, -+- int boot_only); -+- grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev); -++ int boot_only, grub_file_t hdr); -++ grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev, grub_file_t hdr); -+ }; -+ typedef struct grub_cryptodisk_dev *grub_cryptodisk_dev_t; -+ -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2-unsigned/0002-Cryptomount-support-key-files.patch b/helpers/DATA/grub2-unsigned/0002-Cryptomount-support-key-files.patch deleted file mode 100644 index 3106301..0000000 --- a/helpers/DATA/grub2-unsigned/0002-Cryptomount-support-key-files.patch +++ /dev/null @@ -1,211 +0,0 @@ -diff --git a/0002-Cryptomount-support-key-files.patch b/0002-Cryptomount-support-key-files.patch -new file mode 100644 -index 00000000000..43af5ff3cbf ---- /dev/null -+++ b/0002-Cryptomount-support-key-files.patch -@@ -0,0 +1,205 @@ -+From df3aa34cc68b128c5441ee25ef092e6c2c87392e Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Fri, 26 Jun 2015 13:37:10 +0100 -+Subject: [PATCH 2/7] Cryptomount support key files -+ -+--- -+ grub-core/disk/cryptodisk.c | 46 ++++++++++++++++++++++++++++++++++++++++++++- -+ grub-core/disk/geli.c | 4 +++- -+ grub-core/disk/luks.c | 44 +++++++++++++++++++++++++++++-------------- -+ include/grub/cryptodisk.h | 5 ++++- -+ 4 files changed, 82 insertions(+), 17 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index 5230a5a9a..5261af547 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -42,6 +42,9 @@ static const struct grub_arg_option options[] = -+ {"all", 'a', 0, N_("Mount all."), 0, 0}, -+ {"boot", 'b', 0, N_("Mount all volumes with `boot' flag set."), 0, 0}, -+ {"header", 'H', 0, N_("Read LUKS header from file"), 0, ARG_TYPE_STRING}, -++ {"keyfile", 'k', 0, N_("Key file"), 0, ARG_TYPE_STRING}, -++ {"keyfile-offset", 'O', 0, N_("Key file offset (bytes)"), 0, ARG_TYPE_INT}, -++ {"keyfile-size", 'S', 0, N_("Key file data size (bytes)"), 0, ARG_TYPE_INT}, -+ {0, 0, 0, 0, 0, 0} -+ }; -+ -+@@ -811,6 +814,8 @@ grub_util_cryptodisk_get_uuid (grub_disk_t disk) -+ static int check_boot, have_it; -+ static char *search_uuid; -+ static grub_file_t hdr; -++static grub_uint8_t *key, keyfile_buffer[GRUB_CRYPTODISK_MAX_KEYFILE_SIZE]; -++static grub_size_t keyfile_size; -+ -+ static void -+ cryptodisk_close (grub_cryptodisk_t dev) -+@@ -841,7 +846,7 @@ grub_cryptodisk_scan_device_real (const char *name, grub_disk_t source) -+ if (!dev) -+ continue; -+ -+- err = cr->recover_key (source, dev, hdr); -++ err = cr->recover_key (source, dev, hdr, key, keyfile_size); -+ if (err) -+ { -+ cryptodisk_close (dev); -+@@ -949,6 +954,45 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ hdr = NULL; -+ -+ have_it = 0; -++ key = NULL; -++ -++ if (state[4].set) /* Key file; fails back to passphrase entry */ -++ { -++ grub_file_t keyfile; -++ int keyfile_offset; -++ grub_size_t requested_keyfile_size; -++ -++ requested_keyfile_size = state[6].set ? grub_strtoul(state[6].arg, 0, 0) : 0; -++ -++ if (requested_keyfile_size > GRUB_CRYPTODISK_MAX_KEYFILE_SIZE) -++ grub_printf (N_("Key file size exceeds maximum (%llu)\n"), \ -++ (unsigned long long) GRUB_CRYPTODISK_MAX_KEYFILE_SIZE); -++ else -++ { -++ keyfile_offset = state[5].set ? grub_strtoul (state[5].arg, 0, 0) : 0; -++ keyfile_size = requested_keyfile_size ? requested_keyfile_size : \ -++ GRUB_CRYPTODISK_MAX_KEYFILE_SIZE; -++ -++ keyfile = grub_file_open (state[4].arg, GRUB_FILE_TYPE_NONE); -++ if (!keyfile) -++ grub_printf (N_("Unable to open key file %s\n"), state[4].arg); -++ else if (grub_file_seek (keyfile, keyfile_offset) == (grub_off_t)-1) -++ grub_printf (N_("Unable to seek to offset %d in key file\n"), keyfile_offset); -++ else -++ { -++ keyfile_size = grub_file_read (keyfile, keyfile_buffer, keyfile_size); -++ if (keyfile_size == (grub_size_t)-1) -++ grub_printf (N_("Error reading key file\n")); -++ else if (requested_keyfile_size && (keyfile_size != requested_keyfile_size)) -++ grub_printf (N_("Cannot read %llu bytes for key file (read %llu bytes)\n"), -++ (unsigned long long) requested_keyfile_size, -++ (unsigned long long) keyfile_size); -++ else -++ key = keyfile_buffer; -++ } -++ } -++ } -++ -+ if (state[0].set) -+ { -+ grub_cryptodisk_t dev; -+diff --git a/grub-core/disk/geli.c b/grub-core/disk/geli.c -+index f4394eb42..da6aa6a63 100644 -+--- a/grub-core/disk/geli.c -++++ b/grub-core/disk/geli.c -+@@ -401,7 +401,9 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ -+ static grub_err_t -+ recover_key (grub_disk_t source, grub_cryptodisk_t dev, -+- grub_file_t hdr __attribute__ ((unused)) ) -++ grub_file_t hdr __attribute__ ((unused)), -++ grub_uint8_t *key __attribute__ ((unused)), -++ grub_size_t keyfile_size __attribute__ ((unused)) ) -+ { -+ grub_size_t keysize; -+ grub_uint8_t digest[GRUB_CRYPTO_MAX_MDLEN]; -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 66e64c0e0..588236888 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -322,12 +322,16 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ static grub_err_t -+ luks_recover_key (grub_disk_t source, -+ grub_cryptodisk_t dev, -+- grub_file_t hdr) -++ grub_file_t hdr, -++ grub_uint8_t *keyfile_bytes, -++ grub_size_t keyfile_bytes_size) -+ { -+ struct grub_luks_phdr header; -+ grub_size_t keysize; -+ grub_uint8_t *split_key = NULL; -+- char passphrase[MAX_PASSPHRASE] = ""; -++ char interactive_passphrase[MAX_PASSPHRASE] = ""; -++ grub_uint8_t *passphrase; -++ grub_size_t passphrase_length; -+ grub_uint8_t candidate_digest[sizeof (header.mkDigest)]; -+ unsigned i; -+ grub_size_t length; -+@@ -364,18 +368,30 @@ luks_recover_key (grub_disk_t source, -+ if (!split_key) -+ return grub_errno; -+ -+- /* Get the passphrase from the user. */ -+- tmp = NULL; -+- if (source->partition) -+- tmp = grub_partition_get_name (source->partition); -+- grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -+- source->partition ? "," : "", tmp ? : "", -+- dev->uuid); -+- grub_free (tmp); -+- if (!grub_password_get (passphrase, MAX_PASSPHRASE)) -++ if (keyfile_bytes) -+ { -+- grub_free (split_key); -+- return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -++ /* Use bytestring from key file as passphrase */ -++ passphrase = keyfile_bytes; -++ passphrase_length = keyfile_bytes_size; -++ } -++ else -++ { -++ /* Get the passphrase from the user. */ -++ tmp = NULL; -++ if (source->partition) -++ tmp = grub_partition_get_name (source->partition); -++ grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -++ source->partition ? "," : "", tmp ? : "", dev->uuid); -++ grub_free (tmp); -++ if (!grub_password_get (interactive_passphrase, MAX_PASSPHRASE)) -++ { -++ grub_free (split_key); -++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -++ } -++ -++ passphrase = (grub_uint8_t *)interactive_passphrase; -++ passphrase_length = grub_strlen (interactive_passphrase); -++ -+ } -+ -+ /* Try to recover master key from each active keyslot. */ -+@@ -393,7 +409,7 @@ luks_recover_key (grub_disk_t source, -+ -+ /* Calculate the PBKDF2 of the user supplied passphrase. */ -+ gcry_err = grub_crypto_pbkdf2 (dev->hash, (grub_uint8_t *) passphrase, -+- grub_strlen (passphrase), -++ passphrase_length, -+ header.keyblock[i].passwordSalt, -+ sizeof (header.keyblock[i].passwordSalt), -+ grub_be_to_cpu32 (header.keyblock[i]. -+diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h -+index 4e6e89a93..67f6b0b59 100644 -+--- a/include/grub/cryptodisk.h -++++ b/include/grub/cryptodisk.h -+@@ -55,6 +55,8 @@ typedef enum -+ #define GRUB_CRYPTODISK_GF_BYTES (1U << GRUB_CRYPTODISK_GF_LOG_BYTES) -+ #define GRUB_CRYPTODISK_MAX_KEYLEN 128 -+ -++#define GRUB_CRYPTODISK_MAX_KEYFILE_SIZE 8192 -++ -+ struct grub_cryptodisk; -+ -+ typedef gcry_err_code_t -+@@ -109,7 +111,8 @@ struct grub_cryptodisk_dev -+ -+ grub_cryptodisk_t (*scan) (grub_disk_t disk, const char *check_uuid, -+ int boot_only, grub_file_t hdr); -+- grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev, grub_file_t hdr); -++ grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev, -++ grub_file_t hdr, grub_uint8_t *key, grub_size_t keyfile_size); -+ }; -+ typedef struct grub_cryptodisk_dev *grub_cryptodisk_dev_t; -+ -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2-unsigned/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch b/helpers/DATA/grub2-unsigned/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch deleted file mode 100644 index f6df274..0000000 --- a/helpers/DATA/grub2-unsigned/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch +++ /dev/null @@ -1,335 +0,0 @@ -diff --git a/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch b/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch -new file mode 100644 -index 00000000000..19ffed89ca8 ---- /dev/null -+++ b/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch -@@ -0,0 +1,329 @@ -+From d055c1e314fa37957f169e08bea9d19c4417ed21 Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Fri, 26 Jun 2015 13:49:58 +0100 -+Subject: [PATCH 3/7] cryptomount luks allow multiple passphrase attempts -+ -+--- -+ grub-core/disk/luks.c | 278 ++++++++++++++++++++++++++------------------------ -+ 1 file changed, 143 insertions(+), 135 deletions(-) -+ -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 588236888..11e437edb 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -321,10 +321,10 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ -+ static grub_err_t -+ luks_recover_key (grub_disk_t source, -+- grub_cryptodisk_t dev, -+- grub_file_t hdr, -+- grub_uint8_t *keyfile_bytes, -+- grub_size_t keyfile_bytes_size) -++ grub_cryptodisk_t dev, -++ grub_file_t hdr, -++ grub_uint8_t *keyfile_bytes, -++ grub_size_t keyfile_bytes_size) -+ { -+ struct grub_luks_phdr header; -+ grub_size_t keysize; -+@@ -339,6 +339,7 @@ luks_recover_key (grub_disk_t source, -+ grub_size_t max_stripes = 1; -+ char *tmp; -+ grub_uint32_t sector; -++ unsigned attempts = 2; -+ -+ err = GRUB_ERR_NONE; -+ -+@@ -361,151 +362,158 @@ luks_recover_key (grub_disk_t source, -+ -+ for (i = 0; i < ARRAY_SIZE (header.keyblock); i++) -+ if (grub_be_to_cpu32 (header.keyblock[i].active) == LUKS_KEY_ENABLED -+- && grub_be_to_cpu32 (header.keyblock[i].stripes) > max_stripes) -++ && grub_be_to_cpu32 (header.keyblock[i].stripes) > max_stripes) -+ max_stripes = grub_be_to_cpu32 (header.keyblock[i].stripes); -+ -+ split_key = grub_malloc (keysize * max_stripes); -+ if (!split_key) -+ return grub_errno; -+ -+- if (keyfile_bytes) -++ while (attempts) -+ { -+- /* Use bytestring from key file as passphrase */ -+- passphrase = keyfile_bytes; -+- passphrase_length = keyfile_bytes_size; -+- } -+- else -+- { -+- /* Get the passphrase from the user. */ -+- tmp = NULL; -+- if (source->partition) -+- tmp = grub_partition_get_name (source->partition); -+- grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -+- source->partition ? "," : "", tmp ? : "", dev->uuid); -+- grub_free (tmp); -+- if (!grub_password_get (interactive_passphrase, MAX_PASSPHRASE)) -++ if (keyfile_bytes) -+ { -+- grub_free (split_key); -+- return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -+- } -+- -+- passphrase = (grub_uint8_t *)interactive_passphrase; -+- passphrase_length = grub_strlen (interactive_passphrase); -+- -+- } -+- -+- /* Try to recover master key from each active keyslot. */ -+- for (i = 0; i < ARRAY_SIZE (header.keyblock); i++) -+- { -+- gcry_err_code_t gcry_err; -+- grub_uint8_t candidate_key[GRUB_CRYPTODISK_MAX_KEYLEN]; -+- grub_uint8_t digest[GRUB_CRYPTODISK_MAX_KEYLEN]; -+- -+- /* Check if keyslot is enabled. */ -+- if (grub_be_to_cpu32 (header.keyblock[i].active) != LUKS_KEY_ENABLED) -+- continue; -+- -+- grub_dprintf ("luks", "Trying keyslot %d\n", i); -+- -+- /* Calculate the PBKDF2 of the user supplied passphrase. */ -+- gcry_err = grub_crypto_pbkdf2 (dev->hash, (grub_uint8_t *) passphrase, -+- passphrase_length, -+- header.keyblock[i].passwordSalt, -+- sizeof (header.keyblock[i].passwordSalt), -+- grub_be_to_cpu32 (header.keyblock[i]. -+- passwordIterations), -+- digest, keysize); -+- -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- grub_dprintf ("luks", "PBKDF2 done\n"); -+- -+- gcry_err = grub_cryptodisk_setkey (dev, digest, keysize); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- sector = grub_be_to_cpu32 (header.keyblock[i].keyMaterialOffset); -+- length = (keysize * grub_be_to_cpu32 (header.keyblock[i].stripes)); -+- -+- /* Read and decrypt the key material from the disk. */ -+- if (hdr) -+- { -+- grub_file_seek (hdr, sector * 512); -+- if (grub_file_read (hdr, split_key, length) != (grub_ssize_t)length) -+- err = GRUB_ERR_READ_ERROR; -++ /* Use bytestring from key file as passphrase */ -++ passphrase = keyfile_bytes; -++ passphrase_length = keyfile_bytes_size; -++ keyfile_bytes = NULL; /* use it only once */ -+ } -+ else -+- err = grub_disk_read (source, sector, 0, length, split_key); -+- if (err) -+- { -+- grub_free (split_key); -+- return err; -+- } -+- -+- gcry_err = grub_cryptodisk_decrypt (dev, split_key, length, 0); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- /* Merge the decrypted key material to get the candidate master key. */ -+- gcry_err = AF_merge (dev->hash, split_key, candidate_key, keysize, -+- grub_be_to_cpu32 (header.keyblock[i].stripes)); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- grub_dprintf ("luks", "candidate key recovered\n"); -+- -+- /* Calculate the PBKDF2 of the candidate master key. */ -+- gcry_err = grub_crypto_pbkdf2 (dev->hash, candidate_key, -+- grub_be_to_cpu32 (header.keyBytes), -+- header.mkDigestSalt, -+- sizeof (header.mkDigestSalt), -+- grub_be_to_cpu32 -+- (header.mkDigestIterations), -+- candidate_digest, -+- sizeof (candidate_digest)); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- /* Compare the calculated PBKDF2 to the digest stored -+- in the header to see if it's correct. */ -+- if (grub_memcmp (candidate_digest, header.mkDigest, -+- sizeof (header.mkDigest)) != 0) -+- { -+- grub_dprintf ("luks", "bad digest\n"); -+- continue; -+- } -++ { -++ /* Get the passphrase from the user. */ -++ tmp = NULL; -++ if (source->partition) -++ tmp = grub_partition_get_name (source->partition); -++ grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -++ source->partition ? "," : "", tmp ? : "", dev->uuid); -++ grub_free (tmp); -++ if (!grub_password_get (interactive_passphrase, MAX_PASSPHRASE)) -++ { -++ grub_free (split_key); -++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -++ } -++ -++ passphrase = (grub_uint8_t *)interactive_passphrase; -++ passphrase_length = grub_strlen (interactive_passphrase); -+ -+- /* TRANSLATORS: It's a cryptographic key slot: one element of an array -+- where each element is either empty or holds a key. */ -+- grub_printf_ (N_("Slot %d opened\n"), i); -++ } -+ -+- /* Set the master key. */ -+- gcry_err = grub_cryptodisk_setkey (dev, candidate_key, keysize); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -++ /* Try to recover master key from each active keyslot. */ -++ for (i = 0; i < ARRAY_SIZE (header.keyblock); i++) -++ { -++ gcry_err_code_t gcry_err; -++ grub_uint8_t candidate_key[GRUB_CRYPTODISK_MAX_KEYLEN]; -++ grub_uint8_t digest[GRUB_CRYPTODISK_MAX_KEYLEN]; -++ -++ /* Check if keyslot is enabled. */ -++ if (grub_be_to_cpu32 (header.keyblock[i].active) != LUKS_KEY_ENABLED) -++ continue; -++ -++ grub_dprintf ("luks", "Trying keyslot %d\n", i); -++ -++ /* Calculate the PBKDF2 of the user supplied passphrase. */ -++ gcry_err = grub_crypto_pbkdf2 (dev->hash, (grub_uint8_t *) passphrase, -++ passphrase_length, -++ header.keyblock[i].passwordSalt, -++ sizeof (header.keyblock[i].passwordSalt), -++ grub_be_to_cpu32 (header.keyblock[i]. -++ passwordIterations), -++ digest, keysize); -++ -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ grub_dprintf ("luks", "PBKDF2 done\n"); -++ -++ gcry_err = grub_cryptodisk_setkey (dev, digest, keysize); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ sector = grub_be_to_cpu32 (header.keyblock[i].keyMaterialOffset); -++ length = (keysize * grub_be_to_cpu32 (header.keyblock[i].stripes)); -++ -++ /* Read and decrypt the key material from the disk. */ -++ if (hdr) -++ { -++ grub_file_seek (hdr, sector * 512); -++ if (grub_file_read (hdr, split_key, length) != (grub_ssize_t)length) -++ err = GRUB_ERR_READ_ERROR; -++ } -++ else -++ err = grub_disk_read (source, sector, 0, length, split_key); -++ if (err) -++ { -++ grub_free (split_key); -++ return err; -++ } -++ -++ gcry_err = grub_cryptodisk_decrypt (dev, split_key, length, 0); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ /* Merge the decrypted key material to get the candidate master key. */ -++ gcry_err = AF_merge (dev->hash, split_key, candidate_key, keysize, -++ grub_be_to_cpu32 (header.keyblock[i].stripes)); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ grub_dprintf ("luks", "candidate key recovered\n"); -++ -++ /* Calculate the PBKDF2 of the candidate master key. */ -++ gcry_err = grub_crypto_pbkdf2 (dev->hash, candidate_key, -++ grub_be_to_cpu32 (header.keyBytes), -++ header.mkDigestSalt, -++ sizeof (header.mkDigestSalt), -++ grub_be_to_cpu32 -++ (header.mkDigestIterations), -++ candidate_digest, -++ sizeof (candidate_digest)); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ /* Compare the calculated PBKDF2 to the digest stored -++ in the header to see if it's correct. */ -++ if (grub_memcmp (candidate_digest, header.mkDigest, -++ sizeof (header.mkDigest)) != 0) -++ { -++ grub_dprintf ("luks", "bad digest\n"); -++ continue; -++ } -++ -++ /* TRANSLATORS: It's a cryptographic key slot: one element of an array -++ where each element is either empty or holds a key. */ -++ grub_printf_ (N_("Slot %d opened\n"), i); -++ -++ /* Set the master key. */ -++ gcry_err = grub_cryptodisk_setkey (dev, candidate_key, keysize); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -+ -+- grub_free (split_key); -++ grub_free (split_key); -+ -+- return GRUB_ERR_NONE; -++ return GRUB_ERR_NONE; -++ } -++ grub_printf_ (N_("Failed to decrypt master key.\n")); -++ if (--attempts) grub_printf_ (N_("%u attempt%s remaining.\n"), attempts, -++ (attempts==1) ? "" : "s"); -+ } -+ -+ grub_free (split_key); -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2-unsigned/0004-Cryptomount-support-plain-dm-crypt.patch b/helpers/DATA/grub2-unsigned/0004-Cryptomount-support-plain-dm-crypt.patch deleted file mode 100644 index 325186e..0000000 --- a/helpers/DATA/grub2-unsigned/0004-Cryptomount-support-plain-dm-crypt.patch +++ /dev/null @@ -1,650 +0,0 @@ -diff --git a/0004-Cryptomount-support-plain-dm-crypt.patch b/0004-Cryptomount-support-plain-dm-crypt.patch -new file mode 100644 -index 00000000000..34c10d7216b ---- /dev/null -+++ b/0004-Cryptomount-support-plain-dm-crypt.patch -@@ -0,0 +1,644 @@ -+From a8f9e3dcece89c179e89414abe89985c7ab1e03f Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Fri, 26 Jun 2015 22:09:52 +0100 -+Subject: [PATCH 4/7] Cryptomount support plain dm-crypt -+ -+Patch modified to take into account a change to context -+brought about by c93d3e694713b8230fa2cf88414fabe005b56782 -+ -+grub-core/disk/cryptodisk.c -+142c142 -+< if (disklast) -+--- -+> -+--- -+ grub-core/disk/cryptodisk.c | 298 +++++++++++++++++++++++++++++++++++++++++++- -+ grub-core/disk/luks.c | 195 +---------------------------- -+ include/grub/cryptodisk.h | 8 ++ -+ 3 files changed, 310 insertions(+), 191 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index 5261af547..7f656f75c 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -45,6 +45,12 @@ static const struct grub_arg_option options[] = -+ {"keyfile", 'k', 0, N_("Key file"), 0, ARG_TYPE_STRING}, -+ {"keyfile-offset", 'O', 0, N_("Key file offset (bytes)"), 0, ARG_TYPE_INT}, -+ {"keyfile-size", 'S', 0, N_("Key file data size (bytes)"), 0, ARG_TYPE_INT}, -++ {"plain", 'p', 0, N_("Plain (no LUKS header)"), 0, ARG_TYPE_NONE}, -++ {"cipher", 'c', 0, N_("Plain mode cipher"), 0, ARG_TYPE_STRING}, -++ {"digest", 'd', 0, N_("Plain mode passphrase digest (hash)"), 0, ARG_TYPE_STRING}, -++ {"offset", 'o', 0, N_("Plain mode data sector offset"), 0, ARG_TYPE_INT}, -++ {"size", 's', 0, N_("Size of raw device (sectors, defaults to whole device)"), 0, ARG_TYPE_INT}, -++ {"key-size", 'K', 0, N_("Set key size (bits)"), 0, ARG_TYPE_INT}, -+ {0, 0, 0, 0, 0, 0} -+ }; -+ -+@@ -933,6 +939,48 @@ grub_cryptodisk_scan_device (const char *name, -+ return have_it && search_uuid ? 1 : 0; -+ } -+ -++/* Hashes a passphrase into a key and stores it with cipher. */ -++static gcry_err_code_t -++set_passphrase (grub_cryptodisk_t dev, grub_size_t keysize, const char *passphrase) -++{ -++ grub_uint8_t derived_hash[GRUB_CRYPTODISK_MAX_KEYLEN * 2], *dh = derived_hash; -++ char *p; -++ unsigned int round, i; -++ unsigned int len, size; -++ -++ /* Need no passphrase if there's no key */ -++ if (keysize == 0) -++ return GPG_ERR_INV_KEYLEN; -++ -++ /* Hack to support the "none" hash */ -++ if (dev->hash) -++ len = dev->hash->mdlen; -++ else -++ len = grub_strlen (passphrase); -++ -++ if (keysize > GRUB_CRYPTODISK_MAX_KEYLEN || len > GRUB_CRYPTODISK_MAX_KEYLEN) -++ return GPG_ERR_INV_KEYLEN; -++ -++ p = grub_malloc (grub_strlen (passphrase) + 2 + keysize / len); -++ if (!p) -++ return grub_errno; -++ -++ for (round = 0, size = keysize; size; round++, dh += len, size -= len) -++ { -++ for (i = 0; i < round; i++) -++ p[i] = 'A'; -++ -++ grub_strcpy (p + i, passphrase); -++ -++ if (len > size) -++ len = size; -++ -++ grub_crypto_hash (dev->hash, dh, p, grub_strlen (p)); -++ } -++ -++ return grub_cryptodisk_setkey (dev, derived_hash, keysize); -++} -++ -+ static grub_err_t -+ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ { -+@@ -1060,7 +1108,63 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ return GRUB_ERR_NONE; -+ } -+ -+- err = grub_cryptodisk_scan_device_real (diskname, disk); -++ if (state[7].set) /* Plain mode */ -++ { -++ char *cipher; -++ char *mode; -++ char *digest; -++ int offset, size, key_size; -++ -++ cipher = grub_strdup (state[8].set ? state[8].arg : GRUB_CRYPTODISK_PLAIN_CIPHER); -++ digest = grub_strdup (state[9].set ? state[9].arg : GRUB_CRYPTODISK_PLAIN_DIGEST); -++ offset = state[10].set ? grub_strtoul (state[10].arg, 0, 0) : 0; -++ size = state[11].set ? grub_strtoul (state[11].arg, 0, 0) : 0; -++ key_size = ( state[12].set ? grub_strtoul (state[12].arg, 0, 0) \ -++ : GRUB_CRYPTODISK_PLAIN_KEYSIZE ) / 8; -++ -++ /* no strtok, do it manually */ -++ mode = grub_strchr(cipher,'-'); -++ if (!mode) -++ return GRUB_ERR_BAD_ARGUMENT; -++ else -++ *mode++ = 0; -++ -++ dev = grub_cryptodisk_create (disk, NULL, cipher, mode, digest); -++ -++ dev->offset = offset; -++ if (size) dev->total_length = size; -++ -++ if (key) -++ { -++ err = grub_cryptodisk_setkey (dev, key, key_size); -++ if (err) -++ return err; -++ } -++ else -++ { -++ char passphrase[GRUB_CRYPTODISK_MAX_PASSPHRASE] = ""; -++ -++ grub_printf_ (N_("Enter passphrase for %s: "), diskname); -++ if (!grub_password_get (passphrase, GRUB_CRYPTODISK_MAX_PASSPHRASE)) -++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -++ -++ err = set_passphrase (dev, key_size, passphrase); -++ if (err) -++ { -++ grub_crypto_cipher_close (dev->cipher); -++ return err; -++ } -++ } -++ -++ grub_cryptodisk_insert (dev, diskname, disk); -++ -++ grub_free (cipher); -++ grub_free (digest); -++ -++ err = GRUB_ERR_NONE; -++ } -++ else -++ err = grub_cryptodisk_scan_device_real (diskname, disk); -+ -+ grub_disk_close (disk); -+ if (disklast) -+@@ -1193,13 +1297,203 @@ struct grub_procfs_entry luks_script = -+ .get_contents = luks_script_get -+ }; -+ -++grub_cryptodisk_t -++grub_cryptodisk_create (grub_disk_t disk, char *uuid, -++ char *ciphername, char *ciphermode, char *hashspec) -++{ -++ grub_cryptodisk_t newdev; -++ char *cipheriv = NULL; -++ grub_crypto_cipher_handle_t cipher = NULL, secondary_cipher = NULL; -++ grub_crypto_cipher_handle_t essiv_cipher = NULL; -++ const gcry_md_spec_t *hash = NULL, *essiv_hash = NULL; -++ const struct gcry_cipher_spec *ciph; -++ grub_cryptodisk_mode_t mode; -++ grub_cryptodisk_mode_iv_t mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; -++ int benbi_log = 0; -++ -++ if (!uuid) -++ uuid = (char*)"00000000000000000000000000000000"; -++ -++ ciph = grub_crypto_lookup_cipher_by_name (ciphername); -++ if (!ciph) -++ { -++ grub_error (GRUB_ERR_FILE_NOT_FOUND, "Cipher %s isn't available", -++ ciphername); -++ return NULL; -++ } -++ -++ /* Configure the cipher used for the bulk data. */ -++ cipher = grub_crypto_cipher_open (ciph); -++ if (!cipher) -++ return NULL; -++ -++ /* Configure the cipher mode. */ -++ if (grub_strcmp (ciphermode, "ecb") == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_ECB; -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -++ cipheriv = NULL; -++ } -++ else if (grub_strcmp (ciphermode, "plain") == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_CBC; -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -++ cipheriv = NULL; -++ } -++ else if (grub_memcmp (ciphermode, "cbc-", sizeof ("cbc-") - 1) == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_CBC; -++ cipheriv = ciphermode + sizeof ("cbc-") - 1; -++ } -++ else if (grub_memcmp (ciphermode, "pcbc-", sizeof ("pcbc-") - 1) == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_PCBC; -++ cipheriv = ciphermode + sizeof ("pcbc-") - 1; -++ } -++ else if (grub_memcmp (ciphermode, "xts-", sizeof ("xts-") - 1) == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_XTS; -++ cipheriv = ciphermode + sizeof ("xts-") - 1; -++ secondary_cipher = grub_crypto_cipher_open (ciph); -++ if (!secondary_cipher) -++ { -++ grub_crypto_cipher_close (cipher); -++ return NULL; -++ } -++ if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -++ { -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", -++ cipher->cipher->blocksize); -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ return NULL; -++ } -++ if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", -++ secondary_cipher->cipher->blocksize); -++ grub_crypto_cipher_close (secondary_cipher); -++ return NULL; -++ } -++ } -++ else if (grub_memcmp (ciphermode, "lrw-", sizeof ("lrw-") - 1) == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_LRW; -++ cipheriv = ciphermode + sizeof ("lrw-") - 1; -++ if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -++ { -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d", -++ cipher->cipher->blocksize); -++ grub_crypto_cipher_close (cipher); -++ return NULL; -++ } -++ } -++ else -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown cipher mode: %s", -++ ciphermode); -++ return NULL; -++ } -++ -++ if (cipheriv == NULL); -++ else if (grub_memcmp (cipheriv, "plain", sizeof ("plain") - 1) == 0) -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -++ else if (grub_memcmp (cipheriv, "plain64", sizeof ("plain64") - 1) == 0) -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; -++ else if (grub_memcmp (cipheriv, "benbi", sizeof ("benbi") - 1) == 0) -++ { -++ if (cipher->cipher->blocksize & (cipher->cipher->blocksize - 1) -++ || cipher->cipher->blocksize == 0) -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d", -++ cipher->cipher->blocksize); -++ /* FIXME should we return an error here? */ -++ for (benbi_log = 0; -++ (cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE; -++ benbi_log++); -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_BENBI; -++ } -++ else if (grub_memcmp (cipheriv, "null", sizeof ("null") - 1) == 0) -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_NULL; -++ else if (grub_memcmp (cipheriv, "essiv:", sizeof ("essiv:") - 1) == 0) -++ { -++ char *hash_str = cipheriv + 6; -++ -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_ESSIV; -++ -++ /* Configure the hash and cipher used for ESSIV. */ -++ essiv_hash = grub_crypto_lookup_md_by_name (hash_str); -++ if (!essiv_hash) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ grub_error (GRUB_ERR_FILE_NOT_FOUND, -++ "Couldn't load %s hash", hash_str); -++ return NULL; -++ } -++ essiv_cipher = grub_crypto_cipher_open (ciph); -++ if (!essiv_cipher) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ return NULL; -++ } -++ } -++ else -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s", -++ cipheriv); -++ return NULL; -++ } -++ -++ /* Configure the passphrase hash (LUKS also uses AF splitter and HMAC). */ -++ hash = grub_crypto_lookup_md_by_name (hashspec); -++ if (!hash) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (essiv_cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ grub_error (GRUB_ERR_FILE_NOT_FOUND, "Couldn't load %s hash", -++ hashspec); -++ return NULL; -++ } -++ -++ newdev = grub_zalloc (sizeof (struct grub_cryptodisk)); -++ if (!newdev) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (essiv_cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ return NULL; -++ } -++ newdev->cipher = cipher; -++ newdev->offset = 0; -++ newdev->source_disk = NULL; -++ newdev->benbi_log = benbi_log; -++ newdev->mode = mode; -++ newdev->mode_iv = mode_iv; -++ newdev->secondary_cipher = secondary_cipher; -++ newdev->essiv_cipher = essiv_cipher; -++ newdev->essiv_hash = essiv_hash; -++ newdev->hash = hash; -++ newdev->log_sector_size = 9; -++ newdev->total_length = grub_disk_get_size (disk) - newdev->offset; -++ grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid)); -++ COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= sizeof (uuid)); -++ -++ return newdev; -++} -++ -+ static grub_extcmd_t cmd; -+ -+ GRUB_MOD_INIT (cryptodisk) -+ { -+ grub_disk_dev_register (&grub_cryptodisk_dev); -+ cmd = grub_register_extcmd ("cryptomount", grub_cmd_cryptomount, 0, -+- N_("SOURCE|-u UUID|-a|-b|-H file"), -++ N_("SOURCE|-u UUID|-a|-b|-H file|-p -c cipher -d digest"), -+ N_("Mount a crypto device."), options); -+ grub_procfs_register ("luks_script", &luks_script); -+ } -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 11e437edb..4ebe21b4e 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -30,8 +30,6 @@ -+ -+ GRUB_MOD_LICENSE ("GPLv3+"); -+ -+-#define MAX_PASSPHRASE 256 -+- -+ #define LUKS_KEY_ENABLED 0x00AC71F3 -+ -+ /* On disk LUKS header */ -+@@ -76,15 +74,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ char uuid[sizeof (header.uuid) + 1]; -+ char ciphername[sizeof (header.cipherName) + 1]; -+ char ciphermode[sizeof (header.cipherMode) + 1]; -+- char *cipheriv = NULL; -+ char hashspec[sizeof (header.hashSpec) + 1]; -+- grub_crypto_cipher_handle_t cipher = NULL, secondary_cipher = NULL; -+- grub_crypto_cipher_handle_t essiv_cipher = NULL; -+- const gcry_md_spec_t *hash = NULL, *essiv_hash = NULL; -+- const struct gcry_cipher_spec *ciph; -+- grub_cryptodisk_mode_t mode; -+- grub_cryptodisk_mode_iv_t mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; -+- int benbi_log = 0; -+ grub_err_t err; -+ -+ err = GRUB_ERR_NONE; -+@@ -119,7 +109,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ iptr++) -+ { -+ if (*iptr != '-') -+- *optr++ = *iptr; -++ *optr++ = *iptr; -+ } -+ *optr = 0; -+ -+@@ -129,6 +119,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ return NULL; -+ } -+ -++ -+ /* Make sure that strings are null terminated. */ -+ grub_memcpy (ciphername, header.cipherName, sizeof (header.cipherName)); -+ ciphername[sizeof (header.cipherName)] = 0; -+@@ -137,184 +128,10 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ grub_memcpy (hashspec, header.hashSpec, sizeof (header.hashSpec)); -+ hashspec[sizeof (header.hashSpec)] = 0; -+ -+- ciph = grub_crypto_lookup_cipher_by_name (ciphername); -+- if (!ciph) -+- { -+- grub_error (GRUB_ERR_FILE_NOT_FOUND, "Cipher %s isn't available", -+- ciphername); -+- return NULL; -+- } -+- -+- /* Configure the cipher used for the bulk data. */ -+- cipher = grub_crypto_cipher_open (ciph); -+- if (!cipher) -+- return NULL; -+- -+- if (grub_be_to_cpu32 (header.keyBytes) > 1024) -+- { -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d", -+- grub_be_to_cpu32 (header.keyBytes)); -+- grub_crypto_cipher_close (cipher); -+- return NULL; -+- } -+- -+- /* Configure the cipher mode. */ -+- if (grub_strcmp (ciphermode, "ecb") == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_ECB; -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -+- cipheriv = NULL; -+- } -+- else if (grub_strcmp (ciphermode, "plain") == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_CBC; -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -+- cipheriv = NULL; -+- } -+- else if (grub_memcmp (ciphermode, "cbc-", sizeof ("cbc-") - 1) == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_CBC; -+- cipheriv = ciphermode + sizeof ("cbc-") - 1; -+- } -+- else if (grub_memcmp (ciphermode, "pcbc-", sizeof ("pcbc-") - 1) == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_PCBC; -+- cipheriv = ciphermode + sizeof ("pcbc-") - 1; -+- } -+- else if (grub_memcmp (ciphermode, "xts-", sizeof ("xts-") - 1) == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_XTS; -+- cipheriv = ciphermode + sizeof ("xts-") - 1; -+- secondary_cipher = grub_crypto_cipher_open (ciph); -+- if (!secondary_cipher) -+- { -+- grub_crypto_cipher_close (cipher); -+- return NULL; -+- } -+- if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -+- { -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", -+- cipher->cipher->blocksize); -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- return NULL; -+- } -+- if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", -+- secondary_cipher->cipher->blocksize); -+- grub_crypto_cipher_close (secondary_cipher); -+- return NULL; -+- } -+- } -+- else if (grub_memcmp (ciphermode, "lrw-", sizeof ("lrw-") - 1) == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_LRW; -+- cipheriv = ciphermode + sizeof ("lrw-") - 1; -+- if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -+- { -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d", -+- cipher->cipher->blocksize); -+- grub_crypto_cipher_close (cipher); -+- return NULL; -+- } -+- } -+- else -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown cipher mode: %s", -+- ciphermode); -+- return NULL; -+- } -+- -+- if (cipheriv == NULL); -+- else if (grub_memcmp (cipheriv, "plain", sizeof ("plain") - 1) == 0) -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -+- else if (grub_memcmp (cipheriv, "plain64", sizeof ("plain64") - 1) == 0) -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; -+- else if (grub_memcmp (cipheriv, "benbi", sizeof ("benbi") - 1) == 0) -+- { -+- if (cipher->cipher->blocksize & (cipher->cipher->blocksize - 1) -+- || cipher->cipher->blocksize == 0) -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d", -+- cipher->cipher->blocksize); -+- /* FIXME should we return an error here? */ -+- for (benbi_log = 0; -+- (cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE; -+- benbi_log++); -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_BENBI; -+- } -+- else if (grub_memcmp (cipheriv, "null", sizeof ("null") - 1) == 0) -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_NULL; -+- else if (grub_memcmp (cipheriv, "essiv:", sizeof ("essiv:") - 1) == 0) -+- { -+- char *hash_str = cipheriv + 6; -+- -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_ESSIV; -+- -+- /* Configure the hash and cipher used for ESSIV. */ -+- essiv_hash = grub_crypto_lookup_md_by_name (hash_str); -+- if (!essiv_hash) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- grub_error (GRUB_ERR_FILE_NOT_FOUND, -+- "Couldn't load %s hash", hash_str); -+- return NULL; -+- } -+- essiv_cipher = grub_crypto_cipher_open (ciph); -+- if (!essiv_cipher) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- return NULL; -+- } -+- } -+- else -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s", -+- cipheriv); -+- return NULL; -+- } -+- -+- /* Configure the hash used for the AF splitter and HMAC. */ -+- hash = grub_crypto_lookup_md_by_name (hashspec); -+- if (!hash) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (essiv_cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- grub_error (GRUB_ERR_FILE_NOT_FOUND, "Couldn't load %s hash", -+- hashspec); -+- return NULL; -+- } -++ newdev = grub_cryptodisk_create (disk, uuid, ciphername, ciphermode, hashspec); -+ -+- newdev = grub_zalloc (sizeof (struct grub_cryptodisk)); -+- if (!newdev) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (essiv_cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- return NULL; -+- } -+- newdev->cipher = cipher; -+ newdev->offset = grub_be_to_cpu32 (header.payloadOffset); -+- newdev->source_disk = NULL; -+- newdev->benbi_log = benbi_log; -+- newdev->mode = mode; -+- newdev->mode_iv = mode_iv; -+- newdev->secondary_cipher = secondary_cipher; -+- newdev->essiv_cipher = essiv_cipher; -+- newdev->essiv_hash = essiv_hash; -+- newdev->hash = hash; -+- newdev->log_sector_size = 9; -+- newdev->total_length = grub_disk_get_size (disk) - newdev->offset; -+- grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid)); -+ newdev->modname = "luks"; -+- COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= sizeof (uuid)); -+ -+ return newdev; -+ } -+@@ -329,7 +146,7 @@ luks_recover_key (grub_disk_t source, -+ struct grub_luks_phdr header; -+ grub_size_t keysize; -+ grub_uint8_t *split_key = NULL; -+- char interactive_passphrase[MAX_PASSPHRASE] = ""; -++ char interactive_passphrase[GRUB_CRYPTODISK_MAX_PASSPHRASE] = ""; -+ grub_uint8_t *passphrase; -+ grub_size_t passphrase_length; -+ grub_uint8_t candidate_digest[sizeof (header.mkDigest)]; -+@@ -376,7 +193,7 @@ luks_recover_key (grub_disk_t source, -+ /* Use bytestring from key file as passphrase */ -+ passphrase = keyfile_bytes; -+ passphrase_length = keyfile_bytes_size; -+- keyfile_bytes = NULL; /* use it only once */ -++ keyfile_bytes = NULL; /* use it only once */ -+ } -+ else -+ { -+@@ -387,7 +204,7 @@ luks_recover_key (grub_disk_t source, -+ grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -+ source->partition ? "," : "", tmp ? : "", dev->uuid); -+ grub_free (tmp); -+- if (!grub_password_get (interactive_passphrase, MAX_PASSPHRASE)) -++ if (!grub_password_get (interactive_passphrase, GRUB_CRYPTODISK_MAX_PASSPHRASE)) -+ { -+ grub_free (split_key); -+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -+diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h -+index 67f6b0b59..bb25ab730 100644 -+--- a/include/grub/cryptodisk.h -++++ b/include/grub/cryptodisk.h -+@@ -54,9 +54,14 @@ typedef enum -+ #define GRUB_CRYPTODISK_GF_LOG_BYTES (GRUB_CRYPTODISK_GF_LOG_SIZE - 3) -+ #define GRUB_CRYPTODISK_GF_BYTES (1U << GRUB_CRYPTODISK_GF_LOG_BYTES) -+ #define GRUB_CRYPTODISK_MAX_KEYLEN 128 -++#define GRUB_CRYPTODISK_MAX_PASSPHRASE 256 -+ -+ #define GRUB_CRYPTODISK_MAX_KEYFILE_SIZE 8192 -+ -++#define GRUB_CRYPTODISK_PLAIN_CIPHER "aes-cbc-essiv:sha256" -++#define GRUB_CRYPTODISK_PLAIN_DIGEST "ripemd160" -++#define GRUB_CRYPTODISK_PLAIN_KEYSIZE 256 -++ -+ struct grub_cryptodisk; -+ -+ typedef gcry_err_code_t -+@@ -160,4 +165,7 @@ grub_util_get_geli_uuid (const char *dev); -+ grub_cryptodisk_t grub_cryptodisk_get_by_uuid (const char *uuid); -+ grub_cryptodisk_t grub_cryptodisk_get_by_source_disk (grub_disk_t disk); -+ -++grub_cryptodisk_t grub_cryptodisk_create (grub_disk_t disk, char *uuid, -++ char *ciphername, char *ciphermode, char *digest); -++ -+ #endif -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2-unsigned/0005-Cryptomount-support-for-hyphens-in-UUID.patch b/helpers/DATA/grub2-unsigned/0005-Cryptomount-support-for-hyphens-in-UUID.patch deleted file mode 100644 index a70086f..0000000 --- a/helpers/DATA/grub2-unsigned/0005-Cryptomount-support-for-hyphens-in-UUID.patch +++ /dev/null @@ -1,128 +0,0 @@ -diff --git a/0005-Cryptomount-support-for-hyphens-in-UUID.patch b/0005-Cryptomount-support-for-hyphens-in-UUID.patch -new file mode 100644 -index 00000000000..f6ed18a66d7 ---- /dev/null -+++ b/0005-Cryptomount-support-for-hyphens-in-UUID.patch -@@ -0,0 +1,122 @@ -+From 0939fef502c4b97d1facc7972a54d5dfeba4ab71 Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Fri, 26 Jun 2015 22:48:03 +0100 -+Subject: [PATCH 5/7] Cryptomount support for hyphens in UUID -+ -+--- -+ grub-core/disk/cryptodisk.c | 20 +++++++++++++++++--- -+ grub-core/disk/luks.c | 26 ++++++++------------------ -+ include/grub/cryptodisk.h | 2 ++ -+ 3 files changed, 27 insertions(+), 21 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index 7f656f75c..c442d3a34 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -114,6 +114,20 @@ gf_mul_be (grub_uint8_t *o, const grub_uint8_t *a, const grub_uint8_t *b) -+ } -+ } -+ -++int -++grub_cryptodisk_uuidcmp(char *uuid_a, char *uuid_b) -++{ -++ while ((*uuid_a != '\0') && (*uuid_b != '\0')) -++ { -++ while (*uuid_a == '-') uuid_a++; -++ while (*uuid_b == '-') uuid_b++; -++ if (grub_toupper(*uuid_a) != grub_toupper(*uuid_b)) break; -++ uuid_a++; -++ uuid_b++; -++ } -++ return (*uuid_a == '\0') && (*uuid_b == '\0'); -++} -++ -+ static gcry_err_code_t -+ grub_crypto_pcbc_decrypt (grub_crypto_cipher_handle_t cipher, -+ void *out, void *in, grub_size_t size, -+@@ -509,8 +523,8 @@ grub_cryptodisk_open (const char *name, grub_disk_t disk) -+ if (grub_memcmp (name, "cryptouuid/", sizeof ("cryptouuid/") - 1) == 0) -+ { -+ for (dev = cryptodisk_list; dev != NULL; dev = dev->next) -+- if (grub_strcasecmp (name + sizeof ("cryptouuid/") - 1, dev->uuid) == 0) -+- break; -++ if (grub_cryptodisk_uuidcmp(name + sizeof ("cryptouuid/") - 1, dev->uuid)) -++ break; -+ } -+ else -+ { -+@@ -742,7 +756,7 @@ grub_cryptodisk_get_by_uuid (const char *uuid) -+ { -+ grub_cryptodisk_t dev; -+ for (dev = cryptodisk_list; dev != NULL; dev = dev->next) -+- if (grub_strcasecmp (dev->uuid, uuid) == 0) -++ if (grub_cryptodisk_uuidcmp(dev->uuid, uuid)) -+ return dev; -+ return NULL; -+ } -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 4ebe21b4e..80a760670 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -68,9 +68,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ int check_boot, grub_file_t hdr) -+ { -+ grub_cryptodisk_t newdev; -+- const char *iptr; -+ struct grub_luks_phdr header; -+- char *optr; -+ char uuid[sizeof (header.uuid) + 1]; -+ char ciphername[sizeof (header.cipherName) + 1]; -+ char ciphermode[sizeof (header.cipherMode) + 1]; -+@@ -104,22 +102,6 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ || grub_be_to_cpu16 (header.version) != 1) -+ return NULL; -+ -+- optr = uuid; -+- for (iptr = header.uuid; iptr < &header.uuid[ARRAY_SIZE (header.uuid)]; -+- iptr++) -+- { -+- if (*iptr != '-') -+- *optr++ = *iptr; -+- } -+- *optr = 0; -+- -+- if (check_uuid && grub_strcasecmp (check_uuid, uuid) != 0) -+- { -+- grub_dprintf ("luks", "%s != %s\n", uuid, check_uuid); -+- return NULL; -+- } -+- -+- -+ /* Make sure that strings are null terminated. */ -+ grub_memcpy (ciphername, header.cipherName, sizeof (header.cipherName)); -+ ciphername[sizeof (header.cipherName)] = 0; -+@@ -127,6 +109,14 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ ciphermode[sizeof (header.cipherMode)] = 0; -+ grub_memcpy (hashspec, header.hashSpec, sizeof (header.hashSpec)); -+ hashspec[sizeof (header.hashSpec)] = 0; -++ grub_memcpy (uuid, header.uuid, sizeof (header.uuid)); -++ uuid[sizeof (header.uuid)] = 0; -++ -++ if ( check_uuid && ! grub_cryptodisk_uuidcmp(check_uuid, uuid)) -++ { -++ grub_dprintf ("luks", "%s != %s\n", uuid, check_uuid); -++ return NULL; -++ } -+ -+ newdev = grub_cryptodisk_create (disk, uuid, ciphername, ciphermode, hashspec); -+ -+diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h -+index bb25ab730..01c02696e 100644 -+--- a/include/grub/cryptodisk.h -++++ b/include/grub/cryptodisk.h -+@@ -168,4 +168,6 @@ grub_cryptodisk_t grub_cryptodisk_get_by_source_disk (grub_disk_t disk); -+ grub_cryptodisk_t grub_cryptodisk_create (grub_disk_t disk, char *uuid, -+ char *ciphername, char *ciphermode, char *digest); -+ -++int -++grub_cryptodisk_uuidcmp(char *uuid_a, char *uuid_b); -+ #endif -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2-unsigned/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch b/helpers/DATA/grub2-unsigned/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch deleted file mode 100644 index 09f876d..0000000 --- a/helpers/DATA/grub2-unsigned/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch +++ /dev/null @@ -1,114 +0,0 @@ -diff --git a/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch b/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch -new file mode 100644 -index 00000000000..49750f84aca ---- /dev/null -+++ b/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch -@@ -0,0 +1,108 @@ -+From 908f4282cc934422923ff59836a835e63d6a7117 Mon Sep 17 00:00:00 2001 -+From: Paul Gideon Dann -+Date: Tue, 19 Jul 2016 12:36:37 +0100 -+Subject: [PATCH] Add support for using a whole device as a keyfile -+ -+--- -+ grub-core/disk/cryptodisk.c | 86 +++++++++++++++++++++++++++++-------- -+ 1 file changed, 68 insertions(+), 18 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index d0388c6d1..c5d8021ba 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -1031,26 +1031,76 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ else -+ { -+ keyfile_offset = state[5].set ? grub_strtoul (state[5].arg, 0, 0) : 0; -+- keyfile_size = requested_keyfile_size ? requested_keyfile_size : \ -+- GRUB_CRYPTODISK_MAX_KEYFILE_SIZE; -+- -+- keyfile = grub_file_open (state[4].arg, GRUB_FILE_TYPE_NONE); -+- if (!keyfile) -+- grub_printf (N_("Unable to open key file %s\n"), state[4].arg); -+- else if (grub_file_seek (keyfile, keyfile_offset) == (grub_off_t)-1) -+- grub_printf (N_("Unable to seek to offset %d in key file\n"), keyfile_offset); -+- else -++ -++ if (grub_strchr (state[4].arg, '/')) -+ { -+- keyfile_size = grub_file_read (keyfile, keyfile_buffer, keyfile_size); -+- if (keyfile_size == (grub_size_t)-1) -+- grub_printf (N_("Error reading key file\n")); -+- else if (requested_keyfile_size && (keyfile_size != requested_keyfile_size)) -+- grub_printf (N_("Cannot read %llu bytes for key file (read %llu bytes)\n"), -+- (unsigned long long) requested_keyfile_size, -+- (unsigned long long) keyfile_size); -++ keyfile_size = requested_keyfile_size ? requested_keyfile_size : \ -++ GRUB_CRYPTODISK_MAX_KEYFILE_SIZE; -++ keyfile = grub_file_open (state[4].arg, GRUB_FILE_TYPE_NONE); -++ if (!keyfile) -++ grub_printf (N_("Unable to open key file %s\n"), state[4].arg); -++ else if (grub_file_seek (keyfile, keyfile_offset) == (grub_off_t)-1) -++ grub_printf (N_("Unable to seek to offset %d in key file\n"), keyfile_offset); -+ else -+- key = keyfile_buffer; -+- } -++ { -++ keyfile_size = grub_file_read (keyfile, keyfile_buffer, keyfile_size); -++ if (keyfile_size == (grub_size_t)-1) -++ grub_printf (N_("Error reading key file\n")); -++ else if (requested_keyfile_size && (keyfile_size != requested_keyfile_size)) -++ grub_printf (N_("Cannot read %llu bytes for key file (read %llu bytes)\n"), -++ (unsigned long long) requested_keyfile_size, -++ (unsigned long long) keyfile_size); -++ else -++ key = keyfile_buffer; -++ } -++ } -++ else -++ { -++ grub_disk_t keydisk; -++ char* keydisk_name; -++ grub_err_t err; -++ grub_uint64_t total_sectors; -++ -++ keydisk_name = grub_file_get_device_name(state[4].arg); -++ keydisk = grub_disk_open (keydisk_name); -++ if (!keydisk) -++ { -++ grub_printf (N_("Unable to open disk %s\n"), keydisk_name); -++ goto cleanup_keydisk_name; -++ } -++ -++ total_sectors = grub_disk_get_size (keydisk); -++ if (total_sectors == GRUB_DISK_SIZE_UNKNOWN) -++ { -++ grub_printf (N_("Unable to determine size of disk %s\n"), keydisk_name); -++ goto cleanup_keydisk; -++ } -++ -++ keyfile_size = (total_sectors << GRUB_DISK_SECTOR_BITS); -++ if (requested_keyfile_size > 0 && requested_keyfile_size < keyfile_size) -++ keyfile_size = requested_keyfile_size; -++ if (keyfile_size > GRUB_CRYPTODISK_MAX_KEYFILE_SIZE) -++ { -++ grub_printf (N_("Key file size exceeds maximum (%llu)\n"), \ -++ (unsigned long long) GRUB_CRYPTODISK_MAX_KEYFILE_SIZE); -++ goto cleanup_keydisk; -++ } -++ -++ err = grub_disk_read (keydisk, 0, keyfile_offset, keyfile_size, keyfile_buffer); -++ if (err != GRUB_ERR_NONE) -++ { -++ grub_printf (N_("Failed to read from disk %s\n"), keydisk_name); -++ keyfile_size = 0; -++ goto cleanup_keydisk; -++ } -++ -++ key = keyfile_buffer; -++ -++ cleanup_keydisk: -++ grub_disk_close (keydisk); -++ cleanup_keydisk_name: -++ grub_free (keydisk_name); -++ } -+ } -+ } -+ diff --git a/helpers/DATA/grub2-unsigned/0007-prevent-duplicated-gnu-linux-with-trisquel-full-name.patch b/helpers/DATA/grub2-unsigned/patch_changes/007-prevent-duplicated-gnu-linux-with-trisquel-full-name.patch similarity index 100% rename from helpers/DATA/grub2-unsigned/0007-prevent-duplicated-gnu-linux-with-trisquel-full-name.patch rename to helpers/DATA/grub2-unsigned/patch_changes/007-prevent-duplicated-gnu-linux-with-trisquel-full-name.patch diff --git a/helpers/DATA/grub2/0001-Cryptomount-support-LUKS-detached-header.patch b/helpers/DATA/grub2/0001-Cryptomount-support-LUKS-detached-header.patch deleted file mode 100644 index 5d6bd23..0000000 --- a/helpers/DATA/grub2/0001-Cryptomount-support-LUKS-detached-header.patch +++ /dev/null @@ -1,253 +0,0 @@ -diff --git a/0001-Cryptomount-support-LUKS-detached-header.patch b/0001-Cryptomount-support-LUKS-detached-header.patch -new file mode 100644 -index 00000000000..65943f41b8c ---- /dev/null -+++ b/0001-Cryptomount-support-LUKS-detached-header.patch -@@ -0,0 +1,247 @@ -+From 2008e08c0a511da5d454664363f452a9e26c734f Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Tue, 23 Jun 2015 11:16:30 +0100 -+Subject: [PATCH 1/7] Cryptomount support LUKS detached header -+ -+--- -+ grub-core/disk/cryptodisk.c | 22 ++++++++++++++++++---- -+ grub-core/disk/geli.c | 7 +++++-- -+ grub-core/disk/luks.c | 45 +++++++++++++++++++++++++++++++++++++-------- -+ include/grub/cryptodisk.h | 5 +++-- -+ 4 files changed, 63 insertions(+), 16 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index bd60a66b3..5230a5a9a 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -41,6 +41,7 @@ static const struct grub_arg_option options[] = -+ /* TRANSLATORS: It's still restricted to cryptodisks only. */ -+ {"all", 'a', 0, N_("Mount all."), 0, 0}, -+ {"boot", 'b', 0, N_("Mount all volumes with `boot' flag set."), 0, 0}, -++ {"header", 'H', 0, N_("Read LUKS header from file"), 0, ARG_TYPE_STRING}, -+ {0, 0, 0, 0, 0, 0} -+ }; -+ -+@@ -809,6 +810,7 @@ grub_util_cryptodisk_get_uuid (grub_disk_t disk) -+ -+ static int check_boot, have_it; -+ static char *search_uuid; -++static grub_file_t hdr; -+ -+ static void -+ cryptodisk_close (grub_cryptodisk_t dev) -+@@ -833,13 +835,13 @@ grub_cryptodisk_scan_device_real (const char *name, grub_disk_t source) -+ -+ FOR_CRYPTODISK_DEVS (cr) -+ { -+- dev = cr->scan (source, search_uuid, check_boot); -++ dev = cr->scan (source, search_uuid, check_boot, hdr); -+ if (grub_errno) -+ return grub_errno; -+ if (!dev) -+ continue; -+ -+- err = cr->recover_key (source, dev); -++ err = cr->recover_key (source, dev, hdr); -+ if (err) -+ { -+ cryptodisk_close (dev); -+@@ -880,7 +882,7 @@ grub_cryptodisk_cheat_mount (const char *sourcedev, const char *cheat) -+ -+ FOR_CRYPTODISK_DEVS (cr) -+ { -+- dev = cr->scan (source, search_uuid, check_boot); -++ dev = cr->scan (source, search_uuid, check_boot,0); -+ if (grub_errno) -+ return grub_errno; -+ if (!dev) -+@@ -934,6 +936,18 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ if (argc < 1 && !state[1].set && !state[2].set) -+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required"); -+ -++ if (state[3].set) /* LUKS detached header */ -++ { -++ if (state[0].set) /* Cannot use UUID lookup with detached header */ -++ return GRUB_ERR_BAD_ARGUMENT; -++ -++ hdr = grub_file_open (state[3].arg, GRUB_FILE_TYPE_NONE); -++ if (!hdr) -++ return grub_errno; -++ } -++ else -++ hdr = NULL; -++ -+ have_it = 0; -+ if (state[0].set) -+ { -+@@ -1141,7 +1155,7 @@ GRUB_MOD_INIT (cryptodisk) -+ { -+ grub_disk_dev_register (&grub_cryptodisk_dev); -+ cmd = grub_register_extcmd ("cryptomount", grub_cmd_cryptomount, 0, -+- N_("SOURCE|-u UUID|-a|-b"), -++ N_("SOURCE|-u UUID|-a|-b|-H file"), -+ N_("Mount a crypto device."), options); -+ grub_procfs_register ("luks_script", &luks_script); -+ } -+diff --git a/grub-core/disk/geli.c b/grub-core/disk/geli.c -+index e9d23299a..f4394eb42 100644 -+--- a/grub-core/disk/geli.c -++++ b/grub-core/disk/geli.c -+@@ -52,6 +52,7 @@ -+ #include -+ #include -+ #include -++#include -+ #include -+ #include -+ #include -+@@ -243,7 +244,8 @@ grub_util_get_geli_uuid (const char *dev) -+ -+ static grub_cryptodisk_t -+ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+- int boot_only) -++ int boot_only, -++ grub_file_t hdr __attribute__ ((unused)) ) -+ { -+ grub_cryptodisk_t newdev; -+ struct grub_geli_phdr header; -+@@ -398,7 +400,8 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ } -+ -+ static grub_err_t -+-recover_key (grub_disk_t source, grub_cryptodisk_t dev) -++recover_key (grub_disk_t source, grub_cryptodisk_t dev, -++ grub_file_t hdr __attribute__ ((unused)) ) -+ { -+ grub_size_t keysize; -+ grub_uint8_t digest[GRUB_CRYPTO_MAX_MDLEN]; -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 86c50c612..66e64c0e0 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -23,6 +23,7 @@ -+ #include -+ #include -+ #include -++#include -+ #include -+ #include -+ #include -+@@ -66,7 +67,7 @@ gcry_err_code_t AF_merge (const gcry_md_spec_t * hash, grub_uint8_t * src, -+ -+ static grub_cryptodisk_t -+ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+- int check_boot) -++ int check_boot, grub_file_t hdr) -+ { -+ grub_cryptodisk_t newdev; -+ const char *iptr; -+@@ -86,11 +87,21 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ int benbi_log = 0; -+ grub_err_t err; -+ -++ err = GRUB_ERR_NONE; -++ -+ if (check_boot) -+ return NULL; -+ -+ /* Read the LUKS header. */ -+- err = grub_disk_read (disk, 0, 0, sizeof (header), &header); -++ if (hdr) -++ { -++ grub_file_seek (hdr, 0); -++ if (grub_file_read (hdr, &header, sizeof (header)) != sizeof (header)) -++ err = GRUB_ERR_READ_ERROR; -++ } -++ else -++ err = grub_disk_read (disk, 0, 0, sizeof (header), &header); -++ -+ if (err) -+ { -+ if (err == GRUB_ERR_OUT_OF_RANGE) -+@@ -304,12 +315,14 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid)); -+ newdev->modname = "luks"; -+ COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= sizeof (uuid)); -++ -+ return newdev; -+ } -+ -+ static grub_err_t -+ luks_recover_key (grub_disk_t source, -+- grub_cryptodisk_t dev) -++ grub_cryptodisk_t dev, -++ grub_file_t hdr) -+ { -+ struct grub_luks_phdr header; -+ grub_size_t keysize; -+@@ -321,8 +334,19 @@ luks_recover_key (grub_disk_t source, -+ grub_err_t err; -+ grub_size_t max_stripes = 1; -+ char *tmp; -++ grub_uint32_t sector; -++ -++ err = GRUB_ERR_NONE; -++ -++ if (hdr) -++ { -++ grub_file_seek (hdr, 0); -++ if (grub_file_read (hdr, &header, sizeof (header)) != sizeof (header)) -++ err = GRUB_ERR_READ_ERROR; -++ } -++ else -++ err = grub_disk_read (source, 0, 0, sizeof (header), &header); -+ -+- err = grub_disk_read (source, 0, 0, sizeof (header), &header); -+ if (err) -+ return err; -+ -+@@ -391,13 +415,18 @@ luks_recover_key (grub_disk_t source, -+ return grub_crypto_gcry_error (gcry_err); -+ } -+ -++ sector = grub_be_to_cpu32 (header.keyblock[i].keyMaterialOffset); -+ length = (keysize * grub_be_to_cpu32 (header.keyblock[i].stripes)); -+ -+ /* Read and decrypt the key material from the disk. */ -+- err = grub_disk_read (source, -+- grub_be_to_cpu32 (header.keyblock -+- [i].keyMaterialOffset), 0, -+- length, split_key); -++ if (hdr) -++ { -++ grub_file_seek (hdr, sector * 512); -++ if (grub_file_read (hdr, split_key, length) != (grub_ssize_t)length) -++ err = GRUB_ERR_READ_ERROR; -++ } -++ else -++ err = grub_disk_read (source, sector, 0, length, split_key); -+ if (err) -+ { -+ grub_free (split_key); -+diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h -+index 32f564ae0..4e6e89a93 100644 -+--- a/include/grub/cryptodisk.h -++++ b/include/grub/cryptodisk.h -+@@ -20,6 +20,7 @@ -+ #define GRUB_CRYPTODISK_HEADER 1 -+ -+ #include -++#include -+ #include -+ #include -+ #ifdef GRUB_UTIL -+@@ -107,8 +108,8 @@ struct grub_cryptodisk_dev -+ struct grub_cryptodisk_dev **prev; -+ -+ grub_cryptodisk_t (*scan) (grub_disk_t disk, const char *check_uuid, -+- int boot_only); -+- grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev); -++ int boot_only, grub_file_t hdr); -++ grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev, grub_file_t hdr); -+ }; -+ typedef struct grub_cryptodisk_dev *grub_cryptodisk_dev_t; -+ -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2/0002-Cryptomount-support-key-files.patch b/helpers/DATA/grub2/0002-Cryptomount-support-key-files.patch deleted file mode 100644 index 3106301..0000000 --- a/helpers/DATA/grub2/0002-Cryptomount-support-key-files.patch +++ /dev/null @@ -1,211 +0,0 @@ -diff --git a/0002-Cryptomount-support-key-files.patch b/0002-Cryptomount-support-key-files.patch -new file mode 100644 -index 00000000000..43af5ff3cbf ---- /dev/null -+++ b/0002-Cryptomount-support-key-files.patch -@@ -0,0 +1,205 @@ -+From df3aa34cc68b128c5441ee25ef092e6c2c87392e Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Fri, 26 Jun 2015 13:37:10 +0100 -+Subject: [PATCH 2/7] Cryptomount support key files -+ -+--- -+ grub-core/disk/cryptodisk.c | 46 ++++++++++++++++++++++++++++++++++++++++++++- -+ grub-core/disk/geli.c | 4 +++- -+ grub-core/disk/luks.c | 44 +++++++++++++++++++++++++++++-------------- -+ include/grub/cryptodisk.h | 5 ++++- -+ 4 files changed, 82 insertions(+), 17 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index 5230a5a9a..5261af547 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -42,6 +42,9 @@ static const struct grub_arg_option options[] = -+ {"all", 'a', 0, N_("Mount all."), 0, 0}, -+ {"boot", 'b', 0, N_("Mount all volumes with `boot' flag set."), 0, 0}, -+ {"header", 'H', 0, N_("Read LUKS header from file"), 0, ARG_TYPE_STRING}, -++ {"keyfile", 'k', 0, N_("Key file"), 0, ARG_TYPE_STRING}, -++ {"keyfile-offset", 'O', 0, N_("Key file offset (bytes)"), 0, ARG_TYPE_INT}, -++ {"keyfile-size", 'S', 0, N_("Key file data size (bytes)"), 0, ARG_TYPE_INT}, -+ {0, 0, 0, 0, 0, 0} -+ }; -+ -+@@ -811,6 +814,8 @@ grub_util_cryptodisk_get_uuid (grub_disk_t disk) -+ static int check_boot, have_it; -+ static char *search_uuid; -+ static grub_file_t hdr; -++static grub_uint8_t *key, keyfile_buffer[GRUB_CRYPTODISK_MAX_KEYFILE_SIZE]; -++static grub_size_t keyfile_size; -+ -+ static void -+ cryptodisk_close (grub_cryptodisk_t dev) -+@@ -841,7 +846,7 @@ grub_cryptodisk_scan_device_real (const char *name, grub_disk_t source) -+ if (!dev) -+ continue; -+ -+- err = cr->recover_key (source, dev, hdr); -++ err = cr->recover_key (source, dev, hdr, key, keyfile_size); -+ if (err) -+ { -+ cryptodisk_close (dev); -+@@ -949,6 +954,45 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ hdr = NULL; -+ -+ have_it = 0; -++ key = NULL; -++ -++ if (state[4].set) /* Key file; fails back to passphrase entry */ -++ { -++ grub_file_t keyfile; -++ int keyfile_offset; -++ grub_size_t requested_keyfile_size; -++ -++ requested_keyfile_size = state[6].set ? grub_strtoul(state[6].arg, 0, 0) : 0; -++ -++ if (requested_keyfile_size > GRUB_CRYPTODISK_MAX_KEYFILE_SIZE) -++ grub_printf (N_("Key file size exceeds maximum (%llu)\n"), \ -++ (unsigned long long) GRUB_CRYPTODISK_MAX_KEYFILE_SIZE); -++ else -++ { -++ keyfile_offset = state[5].set ? grub_strtoul (state[5].arg, 0, 0) : 0; -++ keyfile_size = requested_keyfile_size ? requested_keyfile_size : \ -++ GRUB_CRYPTODISK_MAX_KEYFILE_SIZE; -++ -++ keyfile = grub_file_open (state[4].arg, GRUB_FILE_TYPE_NONE); -++ if (!keyfile) -++ grub_printf (N_("Unable to open key file %s\n"), state[4].arg); -++ else if (grub_file_seek (keyfile, keyfile_offset) == (grub_off_t)-1) -++ grub_printf (N_("Unable to seek to offset %d in key file\n"), keyfile_offset); -++ else -++ { -++ keyfile_size = grub_file_read (keyfile, keyfile_buffer, keyfile_size); -++ if (keyfile_size == (grub_size_t)-1) -++ grub_printf (N_("Error reading key file\n")); -++ else if (requested_keyfile_size && (keyfile_size != requested_keyfile_size)) -++ grub_printf (N_("Cannot read %llu bytes for key file (read %llu bytes)\n"), -++ (unsigned long long) requested_keyfile_size, -++ (unsigned long long) keyfile_size); -++ else -++ key = keyfile_buffer; -++ } -++ } -++ } -++ -+ if (state[0].set) -+ { -+ grub_cryptodisk_t dev; -+diff --git a/grub-core/disk/geli.c b/grub-core/disk/geli.c -+index f4394eb42..da6aa6a63 100644 -+--- a/grub-core/disk/geli.c -++++ b/grub-core/disk/geli.c -+@@ -401,7 +401,9 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ -+ static grub_err_t -+ recover_key (grub_disk_t source, grub_cryptodisk_t dev, -+- grub_file_t hdr __attribute__ ((unused)) ) -++ grub_file_t hdr __attribute__ ((unused)), -++ grub_uint8_t *key __attribute__ ((unused)), -++ grub_size_t keyfile_size __attribute__ ((unused)) ) -+ { -+ grub_size_t keysize; -+ grub_uint8_t digest[GRUB_CRYPTO_MAX_MDLEN]; -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 66e64c0e0..588236888 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -322,12 +322,16 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ static grub_err_t -+ luks_recover_key (grub_disk_t source, -+ grub_cryptodisk_t dev, -+- grub_file_t hdr) -++ grub_file_t hdr, -++ grub_uint8_t *keyfile_bytes, -++ grub_size_t keyfile_bytes_size) -+ { -+ struct grub_luks_phdr header; -+ grub_size_t keysize; -+ grub_uint8_t *split_key = NULL; -+- char passphrase[MAX_PASSPHRASE] = ""; -++ char interactive_passphrase[MAX_PASSPHRASE] = ""; -++ grub_uint8_t *passphrase; -++ grub_size_t passphrase_length; -+ grub_uint8_t candidate_digest[sizeof (header.mkDigest)]; -+ unsigned i; -+ grub_size_t length; -+@@ -364,18 +368,30 @@ luks_recover_key (grub_disk_t source, -+ if (!split_key) -+ return grub_errno; -+ -+- /* Get the passphrase from the user. */ -+- tmp = NULL; -+- if (source->partition) -+- tmp = grub_partition_get_name (source->partition); -+- grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -+- source->partition ? "," : "", tmp ? : "", -+- dev->uuid); -+- grub_free (tmp); -+- if (!grub_password_get (passphrase, MAX_PASSPHRASE)) -++ if (keyfile_bytes) -+ { -+- grub_free (split_key); -+- return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -++ /* Use bytestring from key file as passphrase */ -++ passphrase = keyfile_bytes; -++ passphrase_length = keyfile_bytes_size; -++ } -++ else -++ { -++ /* Get the passphrase from the user. */ -++ tmp = NULL; -++ if (source->partition) -++ tmp = grub_partition_get_name (source->partition); -++ grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -++ source->partition ? "," : "", tmp ? : "", dev->uuid); -++ grub_free (tmp); -++ if (!grub_password_get (interactive_passphrase, MAX_PASSPHRASE)) -++ { -++ grub_free (split_key); -++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -++ } -++ -++ passphrase = (grub_uint8_t *)interactive_passphrase; -++ passphrase_length = grub_strlen (interactive_passphrase); -++ -+ } -+ -+ /* Try to recover master key from each active keyslot. */ -+@@ -393,7 +409,7 @@ luks_recover_key (grub_disk_t source, -+ -+ /* Calculate the PBKDF2 of the user supplied passphrase. */ -+ gcry_err = grub_crypto_pbkdf2 (dev->hash, (grub_uint8_t *) passphrase, -+- grub_strlen (passphrase), -++ passphrase_length, -+ header.keyblock[i].passwordSalt, -+ sizeof (header.keyblock[i].passwordSalt), -+ grub_be_to_cpu32 (header.keyblock[i]. -+diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h -+index 4e6e89a93..67f6b0b59 100644 -+--- a/include/grub/cryptodisk.h -++++ b/include/grub/cryptodisk.h -+@@ -55,6 +55,8 @@ typedef enum -+ #define GRUB_CRYPTODISK_GF_BYTES (1U << GRUB_CRYPTODISK_GF_LOG_BYTES) -+ #define GRUB_CRYPTODISK_MAX_KEYLEN 128 -+ -++#define GRUB_CRYPTODISK_MAX_KEYFILE_SIZE 8192 -++ -+ struct grub_cryptodisk; -+ -+ typedef gcry_err_code_t -+@@ -109,7 +111,8 @@ struct grub_cryptodisk_dev -+ -+ grub_cryptodisk_t (*scan) (grub_disk_t disk, const char *check_uuid, -+ int boot_only, grub_file_t hdr); -+- grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev, grub_file_t hdr); -++ grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev, -++ grub_file_t hdr, grub_uint8_t *key, grub_size_t keyfile_size); -+ }; -+ typedef struct grub_cryptodisk_dev *grub_cryptodisk_dev_t; -+ -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch b/helpers/DATA/grub2/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch deleted file mode 100644 index f6df274..0000000 --- a/helpers/DATA/grub2/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch +++ /dev/null @@ -1,335 +0,0 @@ -diff --git a/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch b/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch -new file mode 100644 -index 00000000000..19ffed89ca8 ---- /dev/null -+++ b/0003-Cryptomount-luks-allow-multiple-passphrase-attempts.patch -@@ -0,0 +1,329 @@ -+From d055c1e314fa37957f169e08bea9d19c4417ed21 Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Fri, 26 Jun 2015 13:49:58 +0100 -+Subject: [PATCH 3/7] cryptomount luks allow multiple passphrase attempts -+ -+--- -+ grub-core/disk/luks.c | 278 ++++++++++++++++++++++++++------------------------ -+ 1 file changed, 143 insertions(+), 135 deletions(-) -+ -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 588236888..11e437edb 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -321,10 +321,10 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ -+ static grub_err_t -+ luks_recover_key (grub_disk_t source, -+- grub_cryptodisk_t dev, -+- grub_file_t hdr, -+- grub_uint8_t *keyfile_bytes, -+- grub_size_t keyfile_bytes_size) -++ grub_cryptodisk_t dev, -++ grub_file_t hdr, -++ grub_uint8_t *keyfile_bytes, -++ grub_size_t keyfile_bytes_size) -+ { -+ struct grub_luks_phdr header; -+ grub_size_t keysize; -+@@ -339,6 +339,7 @@ luks_recover_key (grub_disk_t source, -+ grub_size_t max_stripes = 1; -+ char *tmp; -+ grub_uint32_t sector; -++ unsigned attempts = 2; -+ -+ err = GRUB_ERR_NONE; -+ -+@@ -361,151 +362,158 @@ luks_recover_key (grub_disk_t source, -+ -+ for (i = 0; i < ARRAY_SIZE (header.keyblock); i++) -+ if (grub_be_to_cpu32 (header.keyblock[i].active) == LUKS_KEY_ENABLED -+- && grub_be_to_cpu32 (header.keyblock[i].stripes) > max_stripes) -++ && grub_be_to_cpu32 (header.keyblock[i].stripes) > max_stripes) -+ max_stripes = grub_be_to_cpu32 (header.keyblock[i].stripes); -+ -+ split_key = grub_malloc (keysize * max_stripes); -+ if (!split_key) -+ return grub_errno; -+ -+- if (keyfile_bytes) -++ while (attempts) -+ { -+- /* Use bytestring from key file as passphrase */ -+- passphrase = keyfile_bytes; -+- passphrase_length = keyfile_bytes_size; -+- } -+- else -+- { -+- /* Get the passphrase from the user. */ -+- tmp = NULL; -+- if (source->partition) -+- tmp = grub_partition_get_name (source->partition); -+- grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -+- source->partition ? "," : "", tmp ? : "", dev->uuid); -+- grub_free (tmp); -+- if (!grub_password_get (interactive_passphrase, MAX_PASSPHRASE)) -++ if (keyfile_bytes) -+ { -+- grub_free (split_key); -+- return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -+- } -+- -+- passphrase = (grub_uint8_t *)interactive_passphrase; -+- passphrase_length = grub_strlen (interactive_passphrase); -+- -+- } -+- -+- /* Try to recover master key from each active keyslot. */ -+- for (i = 0; i < ARRAY_SIZE (header.keyblock); i++) -+- { -+- gcry_err_code_t gcry_err; -+- grub_uint8_t candidate_key[GRUB_CRYPTODISK_MAX_KEYLEN]; -+- grub_uint8_t digest[GRUB_CRYPTODISK_MAX_KEYLEN]; -+- -+- /* Check if keyslot is enabled. */ -+- if (grub_be_to_cpu32 (header.keyblock[i].active) != LUKS_KEY_ENABLED) -+- continue; -+- -+- grub_dprintf ("luks", "Trying keyslot %d\n", i); -+- -+- /* Calculate the PBKDF2 of the user supplied passphrase. */ -+- gcry_err = grub_crypto_pbkdf2 (dev->hash, (grub_uint8_t *) passphrase, -+- passphrase_length, -+- header.keyblock[i].passwordSalt, -+- sizeof (header.keyblock[i].passwordSalt), -+- grub_be_to_cpu32 (header.keyblock[i]. -+- passwordIterations), -+- digest, keysize); -+- -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- grub_dprintf ("luks", "PBKDF2 done\n"); -+- -+- gcry_err = grub_cryptodisk_setkey (dev, digest, keysize); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- sector = grub_be_to_cpu32 (header.keyblock[i].keyMaterialOffset); -+- length = (keysize * grub_be_to_cpu32 (header.keyblock[i].stripes)); -+- -+- /* Read and decrypt the key material from the disk. */ -+- if (hdr) -+- { -+- grub_file_seek (hdr, sector * 512); -+- if (grub_file_read (hdr, split_key, length) != (grub_ssize_t)length) -+- err = GRUB_ERR_READ_ERROR; -++ /* Use bytestring from key file as passphrase */ -++ passphrase = keyfile_bytes; -++ passphrase_length = keyfile_bytes_size; -++ keyfile_bytes = NULL; /* use it only once */ -+ } -+ else -+- err = grub_disk_read (source, sector, 0, length, split_key); -+- if (err) -+- { -+- grub_free (split_key); -+- return err; -+- } -+- -+- gcry_err = grub_cryptodisk_decrypt (dev, split_key, length, 0); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- /* Merge the decrypted key material to get the candidate master key. */ -+- gcry_err = AF_merge (dev->hash, split_key, candidate_key, keysize, -+- grub_be_to_cpu32 (header.keyblock[i].stripes)); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- grub_dprintf ("luks", "candidate key recovered\n"); -+- -+- /* Calculate the PBKDF2 of the candidate master key. */ -+- gcry_err = grub_crypto_pbkdf2 (dev->hash, candidate_key, -+- grub_be_to_cpu32 (header.keyBytes), -+- header.mkDigestSalt, -+- sizeof (header.mkDigestSalt), -+- grub_be_to_cpu32 -+- (header.mkDigestIterations), -+- candidate_digest, -+- sizeof (candidate_digest)); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -+- -+- /* Compare the calculated PBKDF2 to the digest stored -+- in the header to see if it's correct. */ -+- if (grub_memcmp (candidate_digest, header.mkDigest, -+- sizeof (header.mkDigest)) != 0) -+- { -+- grub_dprintf ("luks", "bad digest\n"); -+- continue; -+- } -++ { -++ /* Get the passphrase from the user. */ -++ tmp = NULL; -++ if (source->partition) -++ tmp = grub_partition_get_name (source->partition); -++ grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -++ source->partition ? "," : "", tmp ? : "", dev->uuid); -++ grub_free (tmp); -++ if (!grub_password_get (interactive_passphrase, MAX_PASSPHRASE)) -++ { -++ grub_free (split_key); -++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -++ } -++ -++ passphrase = (grub_uint8_t *)interactive_passphrase; -++ passphrase_length = grub_strlen (interactive_passphrase); -+ -+- /* TRANSLATORS: It's a cryptographic key slot: one element of an array -+- where each element is either empty or holds a key. */ -+- grub_printf_ (N_("Slot %d opened\n"), i); -++ } -+ -+- /* Set the master key. */ -+- gcry_err = grub_cryptodisk_setkey (dev, candidate_key, keysize); -+- if (gcry_err) -+- { -+- grub_free (split_key); -+- return grub_crypto_gcry_error (gcry_err); -+- } -++ /* Try to recover master key from each active keyslot. */ -++ for (i = 0; i < ARRAY_SIZE (header.keyblock); i++) -++ { -++ gcry_err_code_t gcry_err; -++ grub_uint8_t candidate_key[GRUB_CRYPTODISK_MAX_KEYLEN]; -++ grub_uint8_t digest[GRUB_CRYPTODISK_MAX_KEYLEN]; -++ -++ /* Check if keyslot is enabled. */ -++ if (grub_be_to_cpu32 (header.keyblock[i].active) != LUKS_KEY_ENABLED) -++ continue; -++ -++ grub_dprintf ("luks", "Trying keyslot %d\n", i); -++ -++ /* Calculate the PBKDF2 of the user supplied passphrase. */ -++ gcry_err = grub_crypto_pbkdf2 (dev->hash, (grub_uint8_t *) passphrase, -++ passphrase_length, -++ header.keyblock[i].passwordSalt, -++ sizeof (header.keyblock[i].passwordSalt), -++ grub_be_to_cpu32 (header.keyblock[i]. -++ passwordIterations), -++ digest, keysize); -++ -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ grub_dprintf ("luks", "PBKDF2 done\n"); -++ -++ gcry_err = grub_cryptodisk_setkey (dev, digest, keysize); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ sector = grub_be_to_cpu32 (header.keyblock[i].keyMaterialOffset); -++ length = (keysize * grub_be_to_cpu32 (header.keyblock[i].stripes)); -++ -++ /* Read and decrypt the key material from the disk. */ -++ if (hdr) -++ { -++ grub_file_seek (hdr, sector * 512); -++ if (grub_file_read (hdr, split_key, length) != (grub_ssize_t)length) -++ err = GRUB_ERR_READ_ERROR; -++ } -++ else -++ err = grub_disk_read (source, sector, 0, length, split_key); -++ if (err) -++ { -++ grub_free (split_key); -++ return err; -++ } -++ -++ gcry_err = grub_cryptodisk_decrypt (dev, split_key, length, 0); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ /* Merge the decrypted key material to get the candidate master key. */ -++ gcry_err = AF_merge (dev->hash, split_key, candidate_key, keysize, -++ grub_be_to_cpu32 (header.keyblock[i].stripes)); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ grub_dprintf ("luks", "candidate key recovered\n"); -++ -++ /* Calculate the PBKDF2 of the candidate master key. */ -++ gcry_err = grub_crypto_pbkdf2 (dev->hash, candidate_key, -++ grub_be_to_cpu32 (header.keyBytes), -++ header.mkDigestSalt, -++ sizeof (header.mkDigestSalt), -++ grub_be_to_cpu32 -++ (header.mkDigestIterations), -++ candidate_digest, -++ sizeof (candidate_digest)); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -++ -++ /* Compare the calculated PBKDF2 to the digest stored -++ in the header to see if it's correct. */ -++ if (grub_memcmp (candidate_digest, header.mkDigest, -++ sizeof (header.mkDigest)) != 0) -++ { -++ grub_dprintf ("luks", "bad digest\n"); -++ continue; -++ } -++ -++ /* TRANSLATORS: It's a cryptographic key slot: one element of an array -++ where each element is either empty or holds a key. */ -++ grub_printf_ (N_("Slot %d opened\n"), i); -++ -++ /* Set the master key. */ -++ gcry_err = grub_cryptodisk_setkey (dev, candidate_key, keysize); -++ if (gcry_err) -++ { -++ grub_free (split_key); -++ return grub_crypto_gcry_error (gcry_err); -++ } -+ -+- grub_free (split_key); -++ grub_free (split_key); -+ -+- return GRUB_ERR_NONE; -++ return GRUB_ERR_NONE; -++ } -++ grub_printf_ (N_("Failed to decrypt master key.\n")); -++ if (--attempts) grub_printf_ (N_("%u attempt%s remaining.\n"), attempts, -++ (attempts==1) ? "" : "s"); -+ } -+ -+ grub_free (split_key); -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2/0004-Cryptomount-support-plain-dm-crypt.patch b/helpers/DATA/grub2/0004-Cryptomount-support-plain-dm-crypt.patch deleted file mode 100644 index 325186e..0000000 --- a/helpers/DATA/grub2/0004-Cryptomount-support-plain-dm-crypt.patch +++ /dev/null @@ -1,650 +0,0 @@ -diff --git a/0004-Cryptomount-support-plain-dm-crypt.patch b/0004-Cryptomount-support-plain-dm-crypt.patch -new file mode 100644 -index 00000000000..34c10d7216b ---- /dev/null -+++ b/0004-Cryptomount-support-plain-dm-crypt.patch -@@ -0,0 +1,644 @@ -+From a8f9e3dcece89c179e89414abe89985c7ab1e03f Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Fri, 26 Jun 2015 22:09:52 +0100 -+Subject: [PATCH 4/7] Cryptomount support plain dm-crypt -+ -+Patch modified to take into account a change to context -+brought about by c93d3e694713b8230fa2cf88414fabe005b56782 -+ -+grub-core/disk/cryptodisk.c -+142c142 -+< if (disklast) -+--- -+> -+--- -+ grub-core/disk/cryptodisk.c | 298 +++++++++++++++++++++++++++++++++++++++++++- -+ grub-core/disk/luks.c | 195 +---------------------------- -+ include/grub/cryptodisk.h | 8 ++ -+ 3 files changed, 310 insertions(+), 191 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index 5261af547..7f656f75c 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -45,6 +45,12 @@ static const struct grub_arg_option options[] = -+ {"keyfile", 'k', 0, N_("Key file"), 0, ARG_TYPE_STRING}, -+ {"keyfile-offset", 'O', 0, N_("Key file offset (bytes)"), 0, ARG_TYPE_INT}, -+ {"keyfile-size", 'S', 0, N_("Key file data size (bytes)"), 0, ARG_TYPE_INT}, -++ {"plain", 'p', 0, N_("Plain (no LUKS header)"), 0, ARG_TYPE_NONE}, -++ {"cipher", 'c', 0, N_("Plain mode cipher"), 0, ARG_TYPE_STRING}, -++ {"digest", 'd', 0, N_("Plain mode passphrase digest (hash)"), 0, ARG_TYPE_STRING}, -++ {"offset", 'o', 0, N_("Plain mode data sector offset"), 0, ARG_TYPE_INT}, -++ {"size", 's', 0, N_("Size of raw device (sectors, defaults to whole device)"), 0, ARG_TYPE_INT}, -++ {"key-size", 'K', 0, N_("Set key size (bits)"), 0, ARG_TYPE_INT}, -+ {0, 0, 0, 0, 0, 0} -+ }; -+ -+@@ -933,6 +939,48 @@ grub_cryptodisk_scan_device (const char *name, -+ return have_it && search_uuid ? 1 : 0; -+ } -+ -++/* Hashes a passphrase into a key and stores it with cipher. */ -++static gcry_err_code_t -++set_passphrase (grub_cryptodisk_t dev, grub_size_t keysize, const char *passphrase) -++{ -++ grub_uint8_t derived_hash[GRUB_CRYPTODISK_MAX_KEYLEN * 2], *dh = derived_hash; -++ char *p; -++ unsigned int round, i; -++ unsigned int len, size; -++ -++ /* Need no passphrase if there's no key */ -++ if (keysize == 0) -++ return GPG_ERR_INV_KEYLEN; -++ -++ /* Hack to support the "none" hash */ -++ if (dev->hash) -++ len = dev->hash->mdlen; -++ else -++ len = grub_strlen (passphrase); -++ -++ if (keysize > GRUB_CRYPTODISK_MAX_KEYLEN || len > GRUB_CRYPTODISK_MAX_KEYLEN) -++ return GPG_ERR_INV_KEYLEN; -++ -++ p = grub_malloc (grub_strlen (passphrase) + 2 + keysize / len); -++ if (!p) -++ return grub_errno; -++ -++ for (round = 0, size = keysize; size; round++, dh += len, size -= len) -++ { -++ for (i = 0; i < round; i++) -++ p[i] = 'A'; -++ -++ grub_strcpy (p + i, passphrase); -++ -++ if (len > size) -++ len = size; -++ -++ grub_crypto_hash (dev->hash, dh, p, grub_strlen (p)); -++ } -++ -++ return grub_cryptodisk_setkey (dev, derived_hash, keysize); -++} -++ -+ static grub_err_t -+ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ { -+@@ -1060,7 +1108,63 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ return GRUB_ERR_NONE; -+ } -+ -+- err = grub_cryptodisk_scan_device_real (diskname, disk); -++ if (state[7].set) /* Plain mode */ -++ { -++ char *cipher; -++ char *mode; -++ char *digest; -++ int offset, size, key_size; -++ -++ cipher = grub_strdup (state[8].set ? state[8].arg : GRUB_CRYPTODISK_PLAIN_CIPHER); -++ digest = grub_strdup (state[9].set ? state[9].arg : GRUB_CRYPTODISK_PLAIN_DIGEST); -++ offset = state[10].set ? grub_strtoul (state[10].arg, 0, 0) : 0; -++ size = state[11].set ? grub_strtoul (state[11].arg, 0, 0) : 0; -++ key_size = ( state[12].set ? grub_strtoul (state[12].arg, 0, 0) \ -++ : GRUB_CRYPTODISK_PLAIN_KEYSIZE ) / 8; -++ -++ /* no strtok, do it manually */ -++ mode = grub_strchr(cipher,'-'); -++ if (!mode) -++ return GRUB_ERR_BAD_ARGUMENT; -++ else -++ *mode++ = 0; -++ -++ dev = grub_cryptodisk_create (disk, NULL, cipher, mode, digest); -++ -++ dev->offset = offset; -++ if (size) dev->total_length = size; -++ -++ if (key) -++ { -++ err = grub_cryptodisk_setkey (dev, key, key_size); -++ if (err) -++ return err; -++ } -++ else -++ { -++ char passphrase[GRUB_CRYPTODISK_MAX_PASSPHRASE] = ""; -++ -++ grub_printf_ (N_("Enter passphrase for %s: "), diskname); -++ if (!grub_password_get (passphrase, GRUB_CRYPTODISK_MAX_PASSPHRASE)) -++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -++ -++ err = set_passphrase (dev, key_size, passphrase); -++ if (err) -++ { -++ grub_crypto_cipher_close (dev->cipher); -++ return err; -++ } -++ } -++ -++ grub_cryptodisk_insert (dev, diskname, disk); -++ -++ grub_free (cipher); -++ grub_free (digest); -++ -++ err = GRUB_ERR_NONE; -++ } -++ else -++ err = grub_cryptodisk_scan_device_real (diskname, disk); -+ -+ grub_disk_close (disk); -+ if (disklast) -+@@ -1193,13 +1297,203 @@ struct grub_procfs_entry luks_script = -+ .get_contents = luks_script_get -+ }; -+ -++grub_cryptodisk_t -++grub_cryptodisk_create (grub_disk_t disk, char *uuid, -++ char *ciphername, char *ciphermode, char *hashspec) -++{ -++ grub_cryptodisk_t newdev; -++ char *cipheriv = NULL; -++ grub_crypto_cipher_handle_t cipher = NULL, secondary_cipher = NULL; -++ grub_crypto_cipher_handle_t essiv_cipher = NULL; -++ const gcry_md_spec_t *hash = NULL, *essiv_hash = NULL; -++ const struct gcry_cipher_spec *ciph; -++ grub_cryptodisk_mode_t mode; -++ grub_cryptodisk_mode_iv_t mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; -++ int benbi_log = 0; -++ -++ if (!uuid) -++ uuid = (char*)"00000000000000000000000000000000"; -++ -++ ciph = grub_crypto_lookup_cipher_by_name (ciphername); -++ if (!ciph) -++ { -++ grub_error (GRUB_ERR_FILE_NOT_FOUND, "Cipher %s isn't available", -++ ciphername); -++ return NULL; -++ } -++ -++ /* Configure the cipher used for the bulk data. */ -++ cipher = grub_crypto_cipher_open (ciph); -++ if (!cipher) -++ return NULL; -++ -++ /* Configure the cipher mode. */ -++ if (grub_strcmp (ciphermode, "ecb") == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_ECB; -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -++ cipheriv = NULL; -++ } -++ else if (grub_strcmp (ciphermode, "plain") == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_CBC; -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -++ cipheriv = NULL; -++ } -++ else if (grub_memcmp (ciphermode, "cbc-", sizeof ("cbc-") - 1) == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_CBC; -++ cipheriv = ciphermode + sizeof ("cbc-") - 1; -++ } -++ else if (grub_memcmp (ciphermode, "pcbc-", sizeof ("pcbc-") - 1) == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_PCBC; -++ cipheriv = ciphermode + sizeof ("pcbc-") - 1; -++ } -++ else if (grub_memcmp (ciphermode, "xts-", sizeof ("xts-") - 1) == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_XTS; -++ cipheriv = ciphermode + sizeof ("xts-") - 1; -++ secondary_cipher = grub_crypto_cipher_open (ciph); -++ if (!secondary_cipher) -++ { -++ grub_crypto_cipher_close (cipher); -++ return NULL; -++ } -++ if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -++ { -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", -++ cipher->cipher->blocksize); -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ return NULL; -++ } -++ if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", -++ secondary_cipher->cipher->blocksize); -++ grub_crypto_cipher_close (secondary_cipher); -++ return NULL; -++ } -++ } -++ else if (grub_memcmp (ciphermode, "lrw-", sizeof ("lrw-") - 1) == 0) -++ { -++ mode = GRUB_CRYPTODISK_MODE_LRW; -++ cipheriv = ciphermode + sizeof ("lrw-") - 1; -++ if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -++ { -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d", -++ cipher->cipher->blocksize); -++ grub_crypto_cipher_close (cipher); -++ return NULL; -++ } -++ } -++ else -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown cipher mode: %s", -++ ciphermode); -++ return NULL; -++ } -++ -++ if (cipheriv == NULL); -++ else if (grub_memcmp (cipheriv, "plain", sizeof ("plain") - 1) == 0) -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -++ else if (grub_memcmp (cipheriv, "plain64", sizeof ("plain64") - 1) == 0) -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; -++ else if (grub_memcmp (cipheriv, "benbi", sizeof ("benbi") - 1) == 0) -++ { -++ if (cipher->cipher->blocksize & (cipher->cipher->blocksize - 1) -++ || cipher->cipher->blocksize == 0) -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d", -++ cipher->cipher->blocksize); -++ /* FIXME should we return an error here? */ -++ for (benbi_log = 0; -++ (cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE; -++ benbi_log++); -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_BENBI; -++ } -++ else if (grub_memcmp (cipheriv, "null", sizeof ("null") - 1) == 0) -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_NULL; -++ else if (grub_memcmp (cipheriv, "essiv:", sizeof ("essiv:") - 1) == 0) -++ { -++ char *hash_str = cipheriv + 6; -++ -++ mode_iv = GRUB_CRYPTODISK_MODE_IV_ESSIV; -++ -++ /* Configure the hash and cipher used for ESSIV. */ -++ essiv_hash = grub_crypto_lookup_md_by_name (hash_str); -++ if (!essiv_hash) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ grub_error (GRUB_ERR_FILE_NOT_FOUND, -++ "Couldn't load %s hash", hash_str); -++ return NULL; -++ } -++ essiv_cipher = grub_crypto_cipher_open (ciph); -++ if (!essiv_cipher) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ return NULL; -++ } -++ } -++ else -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s", -++ cipheriv); -++ return NULL; -++ } -++ -++ /* Configure the passphrase hash (LUKS also uses AF splitter and HMAC). */ -++ hash = grub_crypto_lookup_md_by_name (hashspec); -++ if (!hash) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (essiv_cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ grub_error (GRUB_ERR_FILE_NOT_FOUND, "Couldn't load %s hash", -++ hashspec); -++ return NULL; -++ } -++ -++ newdev = grub_zalloc (sizeof (struct grub_cryptodisk)); -++ if (!newdev) -++ { -++ grub_crypto_cipher_close (cipher); -++ grub_crypto_cipher_close (essiv_cipher); -++ grub_crypto_cipher_close (secondary_cipher); -++ return NULL; -++ } -++ newdev->cipher = cipher; -++ newdev->offset = 0; -++ newdev->source_disk = NULL; -++ newdev->benbi_log = benbi_log; -++ newdev->mode = mode; -++ newdev->mode_iv = mode_iv; -++ newdev->secondary_cipher = secondary_cipher; -++ newdev->essiv_cipher = essiv_cipher; -++ newdev->essiv_hash = essiv_hash; -++ newdev->hash = hash; -++ newdev->log_sector_size = 9; -++ newdev->total_length = grub_disk_get_size (disk) - newdev->offset; -++ grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid)); -++ COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= sizeof (uuid)); -++ -++ return newdev; -++} -++ -+ static grub_extcmd_t cmd; -+ -+ GRUB_MOD_INIT (cryptodisk) -+ { -+ grub_disk_dev_register (&grub_cryptodisk_dev); -+ cmd = grub_register_extcmd ("cryptomount", grub_cmd_cryptomount, 0, -+- N_("SOURCE|-u UUID|-a|-b|-H file"), -++ N_("SOURCE|-u UUID|-a|-b|-H file|-p -c cipher -d digest"), -+ N_("Mount a crypto device."), options); -+ grub_procfs_register ("luks_script", &luks_script); -+ } -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 11e437edb..4ebe21b4e 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -30,8 +30,6 @@ -+ -+ GRUB_MOD_LICENSE ("GPLv3+"); -+ -+-#define MAX_PASSPHRASE 256 -+- -+ #define LUKS_KEY_ENABLED 0x00AC71F3 -+ -+ /* On disk LUKS header */ -+@@ -76,15 +74,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ char uuid[sizeof (header.uuid) + 1]; -+ char ciphername[sizeof (header.cipherName) + 1]; -+ char ciphermode[sizeof (header.cipherMode) + 1]; -+- char *cipheriv = NULL; -+ char hashspec[sizeof (header.hashSpec) + 1]; -+- grub_crypto_cipher_handle_t cipher = NULL, secondary_cipher = NULL; -+- grub_crypto_cipher_handle_t essiv_cipher = NULL; -+- const gcry_md_spec_t *hash = NULL, *essiv_hash = NULL; -+- const struct gcry_cipher_spec *ciph; -+- grub_cryptodisk_mode_t mode; -+- grub_cryptodisk_mode_iv_t mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; -+- int benbi_log = 0; -+ grub_err_t err; -+ -+ err = GRUB_ERR_NONE; -+@@ -119,7 +109,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ iptr++) -+ { -+ if (*iptr != '-') -+- *optr++ = *iptr; -++ *optr++ = *iptr; -+ } -+ *optr = 0; -+ -+@@ -129,6 +119,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ return NULL; -+ } -+ -++ -+ /* Make sure that strings are null terminated. */ -+ grub_memcpy (ciphername, header.cipherName, sizeof (header.cipherName)); -+ ciphername[sizeof (header.cipherName)] = 0; -+@@ -137,184 +128,10 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ grub_memcpy (hashspec, header.hashSpec, sizeof (header.hashSpec)); -+ hashspec[sizeof (header.hashSpec)] = 0; -+ -+- ciph = grub_crypto_lookup_cipher_by_name (ciphername); -+- if (!ciph) -+- { -+- grub_error (GRUB_ERR_FILE_NOT_FOUND, "Cipher %s isn't available", -+- ciphername); -+- return NULL; -+- } -+- -+- /* Configure the cipher used for the bulk data. */ -+- cipher = grub_crypto_cipher_open (ciph); -+- if (!cipher) -+- return NULL; -+- -+- if (grub_be_to_cpu32 (header.keyBytes) > 1024) -+- { -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d", -+- grub_be_to_cpu32 (header.keyBytes)); -+- grub_crypto_cipher_close (cipher); -+- return NULL; -+- } -+- -+- /* Configure the cipher mode. */ -+- if (grub_strcmp (ciphermode, "ecb") == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_ECB; -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -+- cipheriv = NULL; -+- } -+- else if (grub_strcmp (ciphermode, "plain") == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_CBC; -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -+- cipheriv = NULL; -+- } -+- else if (grub_memcmp (ciphermode, "cbc-", sizeof ("cbc-") - 1) == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_CBC; -+- cipheriv = ciphermode + sizeof ("cbc-") - 1; -+- } -+- else if (grub_memcmp (ciphermode, "pcbc-", sizeof ("pcbc-") - 1) == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_PCBC; -+- cipheriv = ciphermode + sizeof ("pcbc-") - 1; -+- } -+- else if (grub_memcmp (ciphermode, "xts-", sizeof ("xts-") - 1) == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_XTS; -+- cipheriv = ciphermode + sizeof ("xts-") - 1; -+- secondary_cipher = grub_crypto_cipher_open (ciph); -+- if (!secondary_cipher) -+- { -+- grub_crypto_cipher_close (cipher); -+- return NULL; -+- } -+- if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -+- { -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", -+- cipher->cipher->blocksize); -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- return NULL; -+- } -+- if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", -+- secondary_cipher->cipher->blocksize); -+- grub_crypto_cipher_close (secondary_cipher); -+- return NULL; -+- } -+- } -+- else if (grub_memcmp (ciphermode, "lrw-", sizeof ("lrw-") - 1) == 0) -+- { -+- mode = GRUB_CRYPTODISK_MODE_LRW; -+- cipheriv = ciphermode + sizeof ("lrw-") - 1; -+- if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) -+- { -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d", -+- cipher->cipher->blocksize); -+- grub_crypto_cipher_close (cipher); -+- return NULL; -+- } -+- } -+- else -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown cipher mode: %s", -+- ciphermode); -+- return NULL; -+- } -+- -+- if (cipheriv == NULL); -+- else if (grub_memcmp (cipheriv, "plain", sizeof ("plain") - 1) == 0) -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; -+- else if (grub_memcmp (cipheriv, "plain64", sizeof ("plain64") - 1) == 0) -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; -+- else if (grub_memcmp (cipheriv, "benbi", sizeof ("benbi") - 1) == 0) -+- { -+- if (cipher->cipher->blocksize & (cipher->cipher->blocksize - 1) -+- || cipher->cipher->blocksize == 0) -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d", -+- cipher->cipher->blocksize); -+- /* FIXME should we return an error here? */ -+- for (benbi_log = 0; -+- (cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE; -+- benbi_log++); -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_BENBI; -+- } -+- else if (grub_memcmp (cipheriv, "null", sizeof ("null") - 1) == 0) -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_NULL; -+- else if (grub_memcmp (cipheriv, "essiv:", sizeof ("essiv:") - 1) == 0) -+- { -+- char *hash_str = cipheriv + 6; -+- -+- mode_iv = GRUB_CRYPTODISK_MODE_IV_ESSIV; -+- -+- /* Configure the hash and cipher used for ESSIV. */ -+- essiv_hash = grub_crypto_lookup_md_by_name (hash_str); -+- if (!essiv_hash) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- grub_error (GRUB_ERR_FILE_NOT_FOUND, -+- "Couldn't load %s hash", hash_str); -+- return NULL; -+- } -+- essiv_cipher = grub_crypto_cipher_open (ciph); -+- if (!essiv_cipher) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- return NULL; -+- } -+- } -+- else -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s", -+- cipheriv); -+- return NULL; -+- } -+- -+- /* Configure the hash used for the AF splitter and HMAC. */ -+- hash = grub_crypto_lookup_md_by_name (hashspec); -+- if (!hash) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (essiv_cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- grub_error (GRUB_ERR_FILE_NOT_FOUND, "Couldn't load %s hash", -+- hashspec); -+- return NULL; -+- } -++ newdev = grub_cryptodisk_create (disk, uuid, ciphername, ciphermode, hashspec); -+ -+- newdev = grub_zalloc (sizeof (struct grub_cryptodisk)); -+- if (!newdev) -+- { -+- grub_crypto_cipher_close (cipher); -+- grub_crypto_cipher_close (essiv_cipher); -+- grub_crypto_cipher_close (secondary_cipher); -+- return NULL; -+- } -+- newdev->cipher = cipher; -+ newdev->offset = grub_be_to_cpu32 (header.payloadOffset); -+- newdev->source_disk = NULL; -+- newdev->benbi_log = benbi_log; -+- newdev->mode = mode; -+- newdev->mode_iv = mode_iv; -+- newdev->secondary_cipher = secondary_cipher; -+- newdev->essiv_cipher = essiv_cipher; -+- newdev->essiv_hash = essiv_hash; -+- newdev->hash = hash; -+- newdev->log_sector_size = 9; -+- newdev->total_length = grub_disk_get_size (disk) - newdev->offset; -+- grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid)); -+ newdev->modname = "luks"; -+- COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= sizeof (uuid)); -+ -+ return newdev; -+ } -+@@ -329,7 +146,7 @@ luks_recover_key (grub_disk_t source, -+ struct grub_luks_phdr header; -+ grub_size_t keysize; -+ grub_uint8_t *split_key = NULL; -+- char interactive_passphrase[MAX_PASSPHRASE] = ""; -++ char interactive_passphrase[GRUB_CRYPTODISK_MAX_PASSPHRASE] = ""; -+ grub_uint8_t *passphrase; -+ grub_size_t passphrase_length; -+ grub_uint8_t candidate_digest[sizeof (header.mkDigest)]; -+@@ -376,7 +193,7 @@ luks_recover_key (grub_disk_t source, -+ /* Use bytestring from key file as passphrase */ -+ passphrase = keyfile_bytes; -+ passphrase_length = keyfile_bytes_size; -+- keyfile_bytes = NULL; /* use it only once */ -++ keyfile_bytes = NULL; /* use it only once */ -+ } -+ else -+ { -+@@ -387,7 +204,7 @@ luks_recover_key (grub_disk_t source, -+ grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, -+ source->partition ? "," : "", tmp ? : "", dev->uuid); -+ grub_free (tmp); -+- if (!grub_password_get (interactive_passphrase, MAX_PASSPHRASE)) -++ if (!grub_password_get (interactive_passphrase, GRUB_CRYPTODISK_MAX_PASSPHRASE)) -+ { -+ grub_free (split_key); -+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); -+diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h -+index 67f6b0b59..bb25ab730 100644 -+--- a/include/grub/cryptodisk.h -++++ b/include/grub/cryptodisk.h -+@@ -54,9 +54,14 @@ typedef enum -+ #define GRUB_CRYPTODISK_GF_LOG_BYTES (GRUB_CRYPTODISK_GF_LOG_SIZE - 3) -+ #define GRUB_CRYPTODISK_GF_BYTES (1U << GRUB_CRYPTODISK_GF_LOG_BYTES) -+ #define GRUB_CRYPTODISK_MAX_KEYLEN 128 -++#define GRUB_CRYPTODISK_MAX_PASSPHRASE 256 -+ -+ #define GRUB_CRYPTODISK_MAX_KEYFILE_SIZE 8192 -+ -++#define GRUB_CRYPTODISK_PLAIN_CIPHER "aes-cbc-essiv:sha256" -++#define GRUB_CRYPTODISK_PLAIN_DIGEST "ripemd160" -++#define GRUB_CRYPTODISK_PLAIN_KEYSIZE 256 -++ -+ struct grub_cryptodisk; -+ -+ typedef gcry_err_code_t -+@@ -160,4 +165,7 @@ grub_util_get_geli_uuid (const char *dev); -+ grub_cryptodisk_t grub_cryptodisk_get_by_uuid (const char *uuid); -+ grub_cryptodisk_t grub_cryptodisk_get_by_source_disk (grub_disk_t disk); -+ -++grub_cryptodisk_t grub_cryptodisk_create (grub_disk_t disk, char *uuid, -++ char *ciphername, char *ciphermode, char *digest); -++ -+ #endif -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2/0005-Cryptomount-support-for-hyphens-in-UUID.patch b/helpers/DATA/grub2/0005-Cryptomount-support-for-hyphens-in-UUID.patch deleted file mode 100644 index a70086f..0000000 --- a/helpers/DATA/grub2/0005-Cryptomount-support-for-hyphens-in-UUID.patch +++ /dev/null @@ -1,128 +0,0 @@ -diff --git a/0005-Cryptomount-support-for-hyphens-in-UUID.patch b/0005-Cryptomount-support-for-hyphens-in-UUID.patch -new file mode 100644 -index 00000000000..f6ed18a66d7 ---- /dev/null -+++ b/0005-Cryptomount-support-for-hyphens-in-UUID.patch -@@ -0,0 +1,122 @@ -+From 0939fef502c4b97d1facc7972a54d5dfeba4ab71 Mon Sep 17 00:00:00 2001 -+From: John Lane -+Date: Fri, 26 Jun 2015 22:48:03 +0100 -+Subject: [PATCH 5/7] Cryptomount support for hyphens in UUID -+ -+--- -+ grub-core/disk/cryptodisk.c | 20 +++++++++++++++++--- -+ grub-core/disk/luks.c | 26 ++++++++------------------ -+ include/grub/cryptodisk.h | 2 ++ -+ 3 files changed, 27 insertions(+), 21 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index 7f656f75c..c442d3a34 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -114,6 +114,20 @@ gf_mul_be (grub_uint8_t *o, const grub_uint8_t *a, const grub_uint8_t *b) -+ } -+ } -+ -++int -++grub_cryptodisk_uuidcmp(char *uuid_a, char *uuid_b) -++{ -++ while ((*uuid_a != '\0') && (*uuid_b != '\0')) -++ { -++ while (*uuid_a == '-') uuid_a++; -++ while (*uuid_b == '-') uuid_b++; -++ if (grub_toupper(*uuid_a) != grub_toupper(*uuid_b)) break; -++ uuid_a++; -++ uuid_b++; -++ } -++ return (*uuid_a == '\0') && (*uuid_b == '\0'); -++} -++ -+ static gcry_err_code_t -+ grub_crypto_pcbc_decrypt (grub_crypto_cipher_handle_t cipher, -+ void *out, void *in, grub_size_t size, -+@@ -509,8 +523,8 @@ grub_cryptodisk_open (const char *name, grub_disk_t disk) -+ if (grub_memcmp (name, "cryptouuid/", sizeof ("cryptouuid/") - 1) == 0) -+ { -+ for (dev = cryptodisk_list; dev != NULL; dev = dev->next) -+- if (grub_strcasecmp (name + sizeof ("cryptouuid/") - 1, dev->uuid) == 0) -+- break; -++ if (grub_cryptodisk_uuidcmp(name + sizeof ("cryptouuid/") - 1, dev->uuid)) -++ break; -+ } -+ else -+ { -+@@ -742,7 +756,7 @@ grub_cryptodisk_get_by_uuid (const char *uuid) -+ { -+ grub_cryptodisk_t dev; -+ for (dev = cryptodisk_list; dev != NULL; dev = dev->next) -+- if (grub_strcasecmp (dev->uuid, uuid) == 0) -++ if (grub_cryptodisk_uuidcmp(dev->uuid, uuid)) -+ return dev; -+ return NULL; -+ } -+diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -+index 4ebe21b4e..80a760670 100644 -+--- a/grub-core/disk/luks.c -++++ b/grub-core/disk/luks.c -+@@ -68,9 +68,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ int check_boot, grub_file_t hdr) -+ { -+ grub_cryptodisk_t newdev; -+- const char *iptr; -+ struct grub_luks_phdr header; -+- char *optr; -+ char uuid[sizeof (header.uuid) + 1]; -+ char ciphername[sizeof (header.cipherName) + 1]; -+ char ciphermode[sizeof (header.cipherMode) + 1]; -+@@ -104,22 +102,6 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ || grub_be_to_cpu16 (header.version) != 1) -+ return NULL; -+ -+- optr = uuid; -+- for (iptr = header.uuid; iptr < &header.uuid[ARRAY_SIZE (header.uuid)]; -+- iptr++) -+- { -+- if (*iptr != '-') -+- *optr++ = *iptr; -+- } -+- *optr = 0; -+- -+- if (check_uuid && grub_strcasecmp (check_uuid, uuid) != 0) -+- { -+- grub_dprintf ("luks", "%s != %s\n", uuid, check_uuid); -+- return NULL; -+- } -+- -+- -+ /* Make sure that strings are null terminated. */ -+ grub_memcpy (ciphername, header.cipherName, sizeof (header.cipherName)); -+ ciphername[sizeof (header.cipherName)] = 0; -+@@ -127,6 +109,14 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid, -+ ciphermode[sizeof (header.cipherMode)] = 0; -+ grub_memcpy (hashspec, header.hashSpec, sizeof (header.hashSpec)); -+ hashspec[sizeof (header.hashSpec)] = 0; -++ grub_memcpy (uuid, header.uuid, sizeof (header.uuid)); -++ uuid[sizeof (header.uuid)] = 0; -++ -++ if ( check_uuid && ! grub_cryptodisk_uuidcmp(check_uuid, uuid)) -++ { -++ grub_dprintf ("luks", "%s != %s\n", uuid, check_uuid); -++ return NULL; -++ } -+ -+ newdev = grub_cryptodisk_create (disk, uuid, ciphername, ciphermode, hashspec); -+ -+diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h -+index bb25ab730..01c02696e 100644 -+--- a/include/grub/cryptodisk.h -++++ b/include/grub/cryptodisk.h -+@@ -168,4 +168,6 @@ grub_cryptodisk_t grub_cryptodisk_get_by_source_disk (grub_disk_t disk); -+ grub_cryptodisk_t grub_cryptodisk_create (grub_disk_t disk, char *uuid, -+ char *ciphername, char *ciphermode, char *digest); -+ -++int -++grub_cryptodisk_uuidcmp(char *uuid_a, char *uuid_b); -+ #endif -+-- -+2.16.2 -+ diff --git a/helpers/DATA/grub2/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch b/helpers/DATA/grub2/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch deleted file mode 100644 index 09f876d..0000000 --- a/helpers/DATA/grub2/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch +++ /dev/null @@ -1,114 +0,0 @@ -diff --git a/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch b/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch -new file mode 100644 -index 00000000000..49750f84aca ---- /dev/null -+++ b/0006-Cryptomount-support-for-using-whole-device-as-keyfile.patch -@@ -0,0 +1,108 @@ -+From 908f4282cc934422923ff59836a835e63d6a7117 Mon Sep 17 00:00:00 2001 -+From: Paul Gideon Dann -+Date: Tue, 19 Jul 2016 12:36:37 +0100 -+Subject: [PATCH] Add support for using a whole device as a keyfile -+ -+--- -+ grub-core/disk/cryptodisk.c | 86 +++++++++++++++++++++++++++++-------- -+ 1 file changed, 68 insertions(+), 18 deletions(-) -+ -+diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c -+index d0388c6d1..c5d8021ba 100644 -+--- a/grub-core/disk/cryptodisk.c -++++ b/grub-core/disk/cryptodisk.c -+@@ -1031,26 +1031,76 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) -+ else -+ { -+ keyfile_offset = state[5].set ? grub_strtoul (state[5].arg, 0, 0) : 0; -+- keyfile_size = requested_keyfile_size ? requested_keyfile_size : \ -+- GRUB_CRYPTODISK_MAX_KEYFILE_SIZE; -+- -+- keyfile = grub_file_open (state[4].arg, GRUB_FILE_TYPE_NONE); -+- if (!keyfile) -+- grub_printf (N_("Unable to open key file %s\n"), state[4].arg); -+- else if (grub_file_seek (keyfile, keyfile_offset) == (grub_off_t)-1) -+- grub_printf (N_("Unable to seek to offset %d in key file\n"), keyfile_offset); -+- else -++ -++ if (grub_strchr (state[4].arg, '/')) -+ { -+- keyfile_size = grub_file_read (keyfile, keyfile_buffer, keyfile_size); -+- if (keyfile_size == (grub_size_t)-1) -+- grub_printf (N_("Error reading key file\n")); -+- else if (requested_keyfile_size && (keyfile_size != requested_keyfile_size)) -+- grub_printf (N_("Cannot read %llu bytes for key file (read %llu bytes)\n"), -+- (unsigned long long) requested_keyfile_size, -+- (unsigned long long) keyfile_size); -++ keyfile_size = requested_keyfile_size ? requested_keyfile_size : \ -++ GRUB_CRYPTODISK_MAX_KEYFILE_SIZE; -++ keyfile = grub_file_open (state[4].arg, GRUB_FILE_TYPE_NONE); -++ if (!keyfile) -++ grub_printf (N_("Unable to open key file %s\n"), state[4].arg); -++ else if (grub_file_seek (keyfile, keyfile_offset) == (grub_off_t)-1) -++ grub_printf (N_("Unable to seek to offset %d in key file\n"), keyfile_offset); -+ else -+- key = keyfile_buffer; -+- } -++ { -++ keyfile_size = grub_file_read (keyfile, keyfile_buffer, keyfile_size); -++ if (keyfile_size == (grub_size_t)-1) -++ grub_printf (N_("Error reading key file\n")); -++ else if (requested_keyfile_size && (keyfile_size != requested_keyfile_size)) -++ grub_printf (N_("Cannot read %llu bytes for key file (read %llu bytes)\n"), -++ (unsigned long long) requested_keyfile_size, -++ (unsigned long long) keyfile_size); -++ else -++ key = keyfile_buffer; -++ } -++ } -++ else -++ { -++ grub_disk_t keydisk; -++ char* keydisk_name; -++ grub_err_t err; -++ grub_uint64_t total_sectors; -++ -++ keydisk_name = grub_file_get_device_name(state[4].arg); -++ keydisk = grub_disk_open (keydisk_name); -++ if (!keydisk) -++ { -++ grub_printf (N_("Unable to open disk %s\n"), keydisk_name); -++ goto cleanup_keydisk_name; -++ } -++ -++ total_sectors = grub_disk_get_size (keydisk); -++ if (total_sectors == GRUB_DISK_SIZE_UNKNOWN) -++ { -++ grub_printf (N_("Unable to determine size of disk %s\n"), keydisk_name); -++ goto cleanup_keydisk; -++ } -++ -++ keyfile_size = (total_sectors << GRUB_DISK_SECTOR_BITS); -++ if (requested_keyfile_size > 0 && requested_keyfile_size < keyfile_size) -++ keyfile_size = requested_keyfile_size; -++ if (keyfile_size > GRUB_CRYPTODISK_MAX_KEYFILE_SIZE) -++ { -++ grub_printf (N_("Key file size exceeds maximum (%llu)\n"), \ -++ (unsigned long long) GRUB_CRYPTODISK_MAX_KEYFILE_SIZE); -++ goto cleanup_keydisk; -++ } -++ -++ err = grub_disk_read (keydisk, 0, keyfile_offset, keyfile_size, keyfile_buffer); -++ if (err != GRUB_ERR_NONE) -++ { -++ grub_printf (N_("Failed to read from disk %s\n"), keydisk_name); -++ keyfile_size = 0; -++ goto cleanup_keydisk; -++ } -++ -++ key = keyfile_buffer; -++ -++ cleanup_keydisk: -++ grub_disk_close (keydisk); -++ cleanup_keydisk_name: -++ grub_free (keydisk_name); -++ } -+ } -+ } -+ diff --git a/helpers/DATA/grub2/0007-prevent-duplicated-gnu-linux-with-trisquel-full-name.patch b/helpers/DATA/grub2/patch_changes/007-prevent-duplicated-gnu-linux-with-trisquel-full-name.patch similarity index 100% rename from helpers/DATA/grub2/0007-prevent-duplicated-gnu-linux-with-trisquel-full-name.patch rename to helpers/DATA/grub2/patch_changes/007-prevent-duplicated-gnu-linux-with-trisquel-full-name.patch diff --git a/helpers/DATA/gtk+3.0/patch_changes/000-fix_tooltip_gtk+3.0_lxde.patch b/helpers/DATA/gtk+3.0/patch_changes/000-fix_tooltip_gtk+3.0_lxde.patch new file mode 100644 index 0000000..fb4ff47 --- /dev/null +++ b/helpers/DATA/gtk+3.0/patch_changes/000-fix_tooltip_gtk+3.0_lxde.patch @@ -0,0 +1,36 @@ +From baa351f7e2d8cb92e94ce122bf8b96cfe88f9a5a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ingo=20Br=C3=BCckl?= +Date: Mon, 17 Feb 2025 18:04:20 +0100 +Subject: [PATCH] Fix position of child tooltips in custom windows + +Unlike a GTK_TOPLEVEL_WINDOW, a custom toplevel window derived from +GtkWindow can have non-zero x/y allocations (like a panel at the bottom +of the screen). + +Since the allocation of such a toplevel window is relative to the screen +origin, the position of the child must also be relative to the screen +origin so that we get the correct coordinates relative to each other. + +diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c +index 1bf72f19..3d6a99f1 100644 +--- a/gtk/gtktooltip.c ++++ b/gtk/gtktooltip.c +@@ -875,6 +875,7 @@ gtk_tooltip_position (GtkTooltip *tooltip, + GdkWindow *widget_window; + GdkWindow *effective_toplevel; + GtkWidget *toplevel; ++ GtkAllocation toplevel_allocation; + int rect_anchor_dx = 0; + int cursor_size; + int anchor_rect_padding; +@@ -886,8 +887,9 @@ gtk_tooltip_position (GtkTooltip *tooltip, + tooltip->tooltip_widget = new_tooltip_widget; + + toplevel = _gtk_widget_get_toplevel (new_tooltip_widget); ++ _gtk_widget_get_allocation (toplevel, &toplevel_allocation); + gtk_widget_translate_coordinates (new_tooltip_widget, toplevel, +- 0, 0, ++ toplevel_allocation.x, toplevel_allocation.y, + &anchor_rect.x, &anchor_rect.y); + + anchor_rect.width = gtk_widget_get_allocated_width (new_tooltip_widget); diff --git a/helpers/DATA/gtk+3.0/patch_changes/001-fix_FTBFS_on_armhf_ecne.patch b/helpers/DATA/gtk+3.0/patch_changes/001-fix_FTBFS_on_armhf_ecne.patch new file mode 100644 index 0000000..35b0578 --- /dev/null +++ b/helpers/DATA/gtk+3.0/patch_changes/001-fix_FTBFS_on_armhf_ecne.patch @@ -0,0 +1,12 @@ +diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c +index d6db84fa..bfcef2b5 100644 +--- a/gtk/gtkwindow.c ++++ b/gtk/gtkwindow.c +@@ -71,6 +71,7 @@ + + #ifdef GDK_WINDOWING_X11 + #include "x11/gdkx.h" ++#include + #endif + + #ifdef GDK_WINDOWING_WIN32 diff --git a/helpers/DATA/hplip/patch_changes/000-add_trisquel_distro_definition_distros_password.patch b/helpers/DATA/hplip/patch_changes/000-add_trisquel_distro_definition_distros_password.patch new file mode 100644 index 0000000..cfc7c7b --- /dev/null +++ b/helpers/DATA/hplip/patch_changes/000-add_trisquel_distro_definition_distros_password.patch @@ -0,0 +1,301 @@ +diff --git a/installer/distros.dat b/installer/distros.dat +index 80588920..66bb81a1 100644 +--- a/installer/distros.dat ++++ b/installer/distros.dat +@@ -94,7 +94,7 @@ + # **************************************** + + [distros] +-distros=unknown,mepis,debian,suse,mandriva,fedora,redhat,rhel,slackware,gentoo,redflag,ubuntu,xandros,freebsd,linspire,ark,pclinuxos,centos,igos,linuxmint,linpus,gos,boss,lfs,manjarolinux,zorin,mxlinux,elementary ++distros=unknown,mepis,debian,suse,mandriva,fedora,redhat,rhel,slackware,gentoo,redflag,ubuntu,xandros,freebsd,linspire,ark,pclinuxos,centos,igos,linuxmint,linpus,gos,boss,lfs,manjarolinux,zorin,mxlinux,elementary,trisquel + + # **************************************** + +@@ -18946,3 +18946,287 @@ packages=automake1.11 + packages=epm + + # **************************************** ++ ++[trisquel] ++index=99 ++versions=11.0.1,12.0 ++display_name=Trisquel GNU/Linux ++alt_names=trisquel,Trisquel GNU/Linux ++display=1 ++notes= ++package_mgrs=dpkg,apt-get,synaptic,update-manager,adept,aptitude,adept-updater ++package_mgr_cmd=sudo apt-get install --assume-yes $packages_to_install ++pre_depend_cmd=sudo dpkg --configure -a,sudo apt-get install --yes --force-yes -f,sudo apt-get update ++post_depend_cmd= ++hp_libs_remove_cmd= sudo apt-get remove libhpmud0 libsane-hpaio printer-driver-postscript-hp ++hplip_remove_cmd=sudo aptitude remove --assume-yes hplip hpijs ++su_sudo=sudo ++ppd_install=ppd ++udev_mode_fix=1 ++ppd_dir= ++fix_ppd_symlink=0 ++drv_dir=/usr/share/cups/drv/HP ++ ++# **************************************** ++ ++[trisquel:11.0.1] ++code_name=aramo ++supported=1 ++scan_supported=1 ++fax_supported=1 ++pcard_supported=1 ++network_supported=1 ++parallel_supported=1 ++usb_supported=1 ++packaged_version=3.21.12 ++release_date=01/01/2022 ++notes= ++ppd_install=drv ++udev_mode_fix=1 ++ppd_dir=/usr/share/ppd/HP ++fix_ppd_symlink=0 ++drv_dir=/usr/share/cups/drv/HP ++ui_toolkit=qt5 ++native_cups=1 ++acl_rules=1 ++ ++libdir_path=/usr/lib ++ ++[trisquel:11.0.1:cups] ++packages=libcups2 ++ ++[trisquel:11.0.1:cups-devel] ++packages=libcups2-dev,cups-bsd,cups-client ++ ++[trisquel:11.0.1:gcc] ++packages=build-essential ++ ++[trisquel:11.0.1:gs] ++packages=ghostscript ++ ++[trisquel:11.0.1:libcrypto] ++packages=openssl ++ ++[trisquel:11.0.1:libjpeg] ++packages=libjpeg-dev ++ ++[trisquel:11.0.1:libatk-adaptor] ++packages=libatk-adaptor ++ ++[trisquel:11.0.1:libgail-common] ++packages=libgail-common ++ ++[trisquel:11.0.1:libnetsnmp-devel] ++packages=libsnmp-dev ++ ++[trisquel:11.0.1:libpthread] ++packages=build-essential ++ ++[trisquel:11.0.1:libtool] ++packages=libtool,libtool-bin ++ ++[trisquel:11.0.1:libusb] ++packages=libusb-1.0-0-dev,libusb-0.1-4 ++ ++[trisquel:11.0.1:make] ++packages=build-essential ++ ++[trisquel:11.0.1:ppdev] ++packages= ++commands=sudo modprobe ppdev,sudo cp -f /etc/modules /etc/modules.hplip,echo ppdev | sudo tee -a /etc/modules ++ ++[trisquel:11.0.1:sane] ++packages=libsane ++ ++[trisquel:11.0.1:sane-devel] ++packages=libsane-dev ++ ++[trisquel:11.0.1:scanimage] ++packages=sane-utils ++ ++[trisquel:11.0.1:xsane] ++packages=gtk2-engines-pixbuf,xsane ++ ++[trisquel:11.0.1:dbus] ++packages=libdbus-1-dev ++ ++[trisquel:11.0.1:cups-image] ++packages=libcupsimage2-dev ++ ++[trisquel:11.0.1:cups-ddk] ++packages=cups ++ ++[trisquel:11.0.1:policykit] ++packages=policykit-1,policykit-1-gnome ++ ++[trisquel:11.0.1:network] ++packages=wget ++ ++[trisquel:11.0.1:avahi-utils] ++packages=avahi-utils ++ ++[trisquel:11.0.1:libavahi-dev] ++packages=libavahi-client-dev,libavahi-core-dev,libavahi-common-dev ++ ++[trisquel:11.0.1:python3-notify2] ++packages=python3-notify2 ++ ++[trisquel:11.0.1:python3-pyqt5-dbus] ++packages=python3-dbus.mainloop.pyqt5 ++ ++[trisquel:11.0.1:python3-pyqt5] ++packages=python3-pyqt5,gtk2-engines-pixbuf ++ ++[trisquel:11.0.1:python3-dbus] ++packages=python3-dbus,python3-gi ++ ++[trisquel:11.0.1:python3-xml] ++packages=python3-lxml ++ ++[trisquel:11.0.1:python3-devel] ++packages=python3-dev ++ ++[trisquel:11.0.1:python3-pil] ++packages=python3-pil ++ ++[trisquel:11.0.1:python3-reportlab] ++packages=python3-reportlab ++ ++[trisquel:11.0.1:automake] ++packages=automake1.11 ++ ++[trisquel:11.0.1:epm] ++packages=epm ++ ++# **************************************** ++ ++[trisquel:12.0] ++code_name=ecne ++supported=1 ++scan_supported=1 ++fax_supported=1 ++pcard_supported=1 ++network_supported=1 ++parallel_supported=1 ++usb_supported=1 ++packaged_version=3.23.12 ++release_date=01/01/2022 ++notes= ++ppd_install=drv ++udev_mode_fix=1 ++ppd_dir=/usr/share/ppd/HP ++fix_ppd_symlink=0 ++drv_dir=/usr/share/cups/drv/HP ++ui_toolkit=qt5 ++native_cups=1 ++acl_rules=1 ++ ++libdir_path=/usr/lib ++ ++[trisquel:12.0:cups] ++packages=libcups2t64 ++ ++[trisquel:12.0:cups-devel] ++packages=libcups2-dev,cups-bsd,cups-client ++ ++[trisquel:12.0:gcc] ++packages=build-essential ++ ++[trisquel:12.0:gs] ++packages=ghostscript ++ ++[trisquel:12.0:libcrypto] ++packages=openssl ++ ++[trisquel:12.0:libjpeg] ++packages=libjpeg-dev ++ ++[trisquel:12.0:libatk-adaptor] ++packages=libatk-adaptor ++ ++[trisquel:12.0:libgail-common] ++packages=libgail-common ++ ++[trisquel:12.0:libnetsnmp-devel] ++packages=libsnmp-dev ++ ++[trisquel:12.0:libpthread] ++packages=build-essential ++ ++[trisquel:12.0:libtool] ++packages=libtool,libtool-bin ++ ++[trisquel:12.0:libusb] ++packages=libusb-1.0-0-dev,libusb-0.1-4 ++ ++[trisquel:12.0:make] ++packages=build-essential ++ ++[trisquel:12.0:ppdev] ++packages= ++commands=sudo modprobe ppdev,sudo cp -f /etc/modules /etc/modules.hplip,echo ppdev | sudo tee -a /etc/modules ++ ++[trisquel:12.0:sane] ++packages=libsane1 ++ ++[trisquel:12.0:sane-devel] ++packages=libsane-dev ++ ++[trisquel:12.0:scanimage] ++packages=sane-utils ++ ++[trisquel:12.0:xsane] ++packages=gtk2-engines-pixbuf,xsane ++ ++[trisquel:12.0:dbus] ++packages=libdbus-1-dev ++ ++[trisquel:12.0:cups-image] ++packages=libcupsimage2-dev ++ ++[trisquel:12.0:cups-ddk] ++packages=cups ++ ++[trisquel:12.0:policykit] ++packages=policykit-1,policykit-1-gnome ++ ++[trisquel:12.0:network] ++packages=wget ++ ++[trisquel:12.0:avahi-utils] ++packages=avahi-utils ++ ++[trisquel:12.0:libavahi-dev] ++packages=libavahi-client-dev,libavahi-core-dev,libavahi-common-dev ++ ++[trisquel:12.0:python3-notify2] ++packages=python3-notify2 ++ ++[trisquel:12.0:python3-pyqt5-dbus] ++packages=python3-dbus.mainloop.pyqt5 ++ ++[trisquel:12.0:python3-pyqt5] ++packages=python3-pyqt5,gtk2-engines-pixbuf ++ ++[trisquel:12.0:python3-dbus] ++packages=python3-dbus,python3-gi ++ ++[trisquel:12.0:python3-xml] ++packages=python3-lxml ++ ++[trisquel:12.0:python3-devel] ++packages=python3-dev ++ ++[trisquel:12.0:python3-pil] ++packages=python3-pil ++ ++[trisquel:12.0:python3-reportlab] ++packages=python3-reportlab ++ ++[trisquel:12.0:automake] ++packages=automake1.11 ++ ++[trisquel:12.0:epm] ++packages=epm ++ ++# **************************************** diff --git a/helpers/DATA/hplip/patch_changes/001-enable_distro_name_dectection.patch b/helpers/DATA/hplip/patch_changes/001-enable_distro_name_dectection.patch new file mode 100644 index 0000000..3b41da1 --- /dev/null +++ b/helpers/DATA/hplip/patch_changes/001-enable_distro_name_dectection.patch @@ -0,0 +1,16 @@ +diff --git a/installer/core_install.py b/installer/core_install.py +index 1c8af23e..9595b2c7 100644 +--- a/installer/core_install.py ++++ b/installer/core_install.py +@@ -644,6 +644,11 @@ class CoreInstall(object): + ld = distro.linux_distribution(full_distribution_name=False) + name = ld[0] + ver = ld[1] ++ # Ensure variable exists (used below for MX detection) ++ try: ++ distro_release_name = distro.name(pretty=True) or "" ++ except Exception: ++ distro_release_name = "" + + found = True + diff --git a/helpers/DATA/keyring.gpg b/helpers/DATA/keyring.gpg index c2c2169..2ab38e5 100644 Binary files a/helpers/DATA/keyring.gpg and b/helpers/DATA/keyring.gpg differ diff --git a/helpers/DATA/kubuntu-settings/patch_changes/000-tune-distro-welcome-to-trisquels-vision.patch b/helpers/DATA/kubuntu-settings/patch_changes/000-tune-distro-welcome-to-trisquels-vision.patch new file mode 100644 index 0000000..577565c --- /dev/null +++ b/helpers/DATA/kubuntu-settings/patch_changes/000-tune-distro-welcome-to-trisquels-vision.patch @@ -0,0 +1,41 @@ +diff --git a/desktop/plasma/plasma-welcome-extra-pages/01-Kubuntu.qml b/desktop/plasma/plasma-welcome-extra-pages/01-Kubuntu.qml_ +index ecb6354a..fcede269 100644 +--- a/desktop/plasma/plasma-welcome-extra-pages/01-Kubuntu.qml ++++ b/desktop/plasma/plasma-welcome-extra-pages/01-Kubuntu.qml_ +@@ -1,6 +1,7 @@ + /* + * SPDX-FileCopyrightText: 2021 Felipe Kinoshita + * SPDX-FileCopyrightText: 2022 Nate Graham ++ * SPDX-FileCopyrightText: 2025 Luis Guzmán + * + * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL + */ +@@ -17,22 +18,21 @@ import org.kde.plasma.welcome 1.0 + GenericPage { + heading: i18nc("@info:window", "Welcome to Triskel | Friendly Computing") + description: i18nc("@info:usagetip", +- '

You are using the Triskel® Linux distribution, an official Ubuntu® flavor. +- It is used by millions around the world who value:

++ '

You are using the Triskel GNU/Linux distribution, an official Trisquel flavor. ++ It is used by users around the world who value:

+ +
    +
  • The beautiful and intuitive KDE Plasma desktop and KDE apps
  • +-
  • The breadth and compatibility of the full Ubuntu +- archive
  • ++
  • The breadth and compatibility of the full Trisquel archive
  • +
  • Frequent security updates
  • +
  • Current, reliable core apps for productivity, office, email, + graphics, and music
  • +-
  • The availability of Triskel-optimized hardware and commercial support
  • ++
  • Software Freedom along with the availability of Trisquel-community support
  • +
+ +-

Triskel is free software developed by members of the global Ubuntu® ++

Triskel is free software developed by members of the global + community. Please donate today to support its continued development. All +- proceeds fund the Triskel Developer Team!

++ proceeds fund the continuity of the developement of Trisquel!

+ '); + + RowLayout { diff --git a/helpers/DATA/kubuntu-settings/usr-share/README.md b/helpers/DATA/kubuntu-settings/usr-share/README.md new file mode 100644 index 0000000..b6c0f62 --- /dev/null +++ b/helpers/DATA/kubuntu-settings/usr-share/README.md @@ -0,0 +1,11 @@ +## Logotype note + +The logo `triskel_tour.svg` has been modified for visual effects. + +Please, do NOT reuse as "original" Trisquel logo. + +Get a original copy from other source this image shouldn't be used on other places. + +Regards. + +-- Ark74 \ No newline at end of file diff --git a/helpers/DATA/kubuntu-settings/usr-share/triskel_donate.svg b/helpers/DATA/kubuntu-settings/usr-share/triskel_donate.svg new file mode 100644 index 0000000..9784834 --- /dev/null +++ b/helpers/DATA/kubuntu-settings/usr-share/triskel_donate.svg @@ -0,0 +1,102 @@ + +Donate diff --git a/helpers/DATA/kubuntu-settings/usr-share/triskel_tour.svg b/helpers/DATA/kubuntu-settings/usr-share/triskel_tour.svg new file mode 100644 index 0000000..0a620b0 --- /dev/null +++ b/helpers/DATA/kubuntu-settings/usr-share/triskel_tour.svg @@ -0,0 +1,482 @@ + +View the Feature Tour diff --git a/helpers/DATA/language-selector/patch_changes/000-add_language-selector_support_browsers.patch b/helpers/DATA/language-selector/patch_changes/000-add_language-selector_support_browsers.patch new file mode 100644 index 0000000..611d7f8 --- /dev/null +++ b/helpers/DATA/language-selector/patch_changes/000-add_language-selector_support_browsers.patch @@ -0,0 +1,24 @@ +Add icedove and abrowser, and other browsers to the supported language-selector apps. + +diff --git a/data/pkg_depends b/data/pkg_depends +index 73d0d019..f38d68a6 100644 +--- a/data/pkg_depends ++++ b/data/pkg_depends +@@ -11,13 +11,15 @@ tr::gvfs:language-pack-gnome- + # Format: %LCODE% or %LCODE%-%CCODE% + tr::libreoffice-common:libreoffice-l10n- + tr::libreoffice-common:libreoffice-help- +-tr::thunderbird:thunderbird-locale- ++tr::icedove:icedove-locale- ++tr::abrowser:abrowser-locale- ++tr::icecat:icecat-locale- + tr::lightning-extension:lightning-extension-locale- + tr::sunbird:sunbird-locale- + tr::sword-text-gerlut1545:sword-language-pack- + tr::gimp:gimp-help- + tr::evolution:evolution-documentation- +-tr::chromium-browser:chromium-browser-l10n ++tr::ungoogled-chromium:ungoogled-chromium-l10n + tr::sylpheed:sylpheed-i18n + tr::amarok:amarok-help- + tr::gnome-user-docs:gnome-user-docs- diff --git a/helpers/DATA/libmateweather/patch_changes/001-weather_server_uri_update_138.patch b/helpers/DATA/libmateweather/patch_changes/001-weather_server_uri_update_138.patch new file mode 100644 index 0000000..f23ec31 --- /dev/null +++ b/helpers/DATA/libmateweather/patch_changes/001-weather_server_uri_update_138.patch @@ -0,0 +1,38 @@ +From 4e54f44dab4efa8c216b26ea7188b99c94882ba4 Mon Sep 17 00:00:00 2001 +From: Victor Kareh +Date: Thu, 18 Sep 2025 11:40:55 -0400 +Subject: [PATCH] metar: Update AviationWeather URL + +According to their website: "The AviationWeather Data API has been +redeveloped in 2025." + +Also they put 'METAR' (or 'SPECI') onto the beginning of data to make it +ICAO compliant, so we add code to parse that. + +Fixes #135 +--- + libmateweather/weather-metar.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libmateweather/weather-metar.c b/libmateweather/weather-metar.c +index 7bc24fc9..4698a077 100644 +--- a/libmateweather/weather-metar.c ++++ b/libmateweather/weather-metar.c +@@ -510,7 +510,7 @@ metar_finish (SoupSession *session, SoupMessage *msg, gpointer data) + + loc = info->location; + +- searchkey = g_strdup_printf ("%s", loc->code); ++ searchkey = g_strdup_printf ("METAR %s", loc->code); + p = strstr (msg->response_body->data, searchkey); + g_free (searchkey); + if (p) { +@@ -550,7 +550,7 @@ metar_start_open (WeatherInfo *info) + } + + msg = soup_form_request_new ( +- "GET", "https://aviationweather.gov/cgi-bin/data/dataserver.php", ++ "GET", "https://aviationweather.gov/api/data/dataserver", + "dataSource", "metars", + "requestType", "retrieve", + "format", "xml", diff --git a/helpers/DATA/lxde-metapackages/patch_changes/000-set_customs_browsers_for_lxde-metapackages.patch b/helpers/DATA/lxde-metapackages/patch_changes/000-set_customs_browsers_for_lxde-metapackages.patch new file mode 100644 index 0000000..8b4c875 --- /dev/null +++ b/helpers/DATA/lxde-metapackages/patch_changes/000-set_customs_browsers_for_lxde-metapackages.patch @@ -0,0 +1,22 @@ +diff --git a/debian/control b/debian/control +index e0f0285c..5cc1787e 100644 +--- a/debian/control ++++ b/debian/control +@@ -22,7 +22,7 @@ Recommends: polkitd, + lxterminal | x-terminal-emulator, + notification-daemon, + xscreensaver +-Suggests: firefox-esr | firefox | www-browser, ++Suggests: abrowser | icecat | www-browser, + lxde, + lxlauncher + Description: metapackage for the LXDE core +@@ -59,7 +59,7 @@ Recommends: connman-gtk | network-manager-gnome | wicd, + smplayer | vlc | mplayer-gui, gnome-colors, + gnome-system-tools, + gucharmap, +- firefox-esr | firefox | www-browser, ++ abrowser | icecat | www-browser, + lightdm | x-display-manager, + lxmusic | audacious, lxpolkit, + parcellite | clipit | copyq, numlockx, usermode, diff --git a/helpers/DATA/lxpanel/patch_changes/000-MR_46_fix_scrolling_issue_volume_plugin.patch b/helpers/DATA/lxpanel/patch_changes/000-MR_46_fix_scrolling_issue_volume_plugin.patch new file mode 100644 index 0000000..c8d75e2 --- /dev/null +++ b/helpers/DATA/lxpanel/patch_changes/000-MR_46_fix_scrolling_issue_volume_plugin.patch @@ -0,0 +1,72 @@ +From 44df20a33645b4a645b547725c75904cee46dfba Mon Sep 17 00:00:00 2001 +From: Nicolas Salguero +Date: Thu, 21 Jul 2022 12:54:07 +0200 +Subject: [PATCH 1/2] Fix a scrolling issue with the GTK3 volume plugin + +Scrolling with the mouse wheel in the volume plugin window only reduces +the volume, because the GDK_SCROLL_SMOOTH direction is not taken into +account. + +This fixes github issue #27, reported by martenwa, +part of github issue #45, reported by nsalguero, and +part of https://bugs.debian.org/1052050. + +(commit and message amended by committer) +--- + plugins/volumealsa/volumealsa.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/plugins/volumealsa/volumealsa.c b/plugins/volumealsa/volumealsa.c +index 5c410511..74b49f90 100644 +--- a/plugins/volumealsa/volumealsa.c ++++ b/plugins/volumealsa/volumealsa.c +@@ -796,6 +796,17 @@ static void volumealsa_popup_scale_scrolled(GtkScale * scale, GdkEventScroll * e + /* Dispatch on scroll direction to update the value. */ + if ((evt->direction == GDK_SCROLL_UP) || (evt->direction == GDK_SCROLL_LEFT)) + val += 2; ++#if GTK_CHECK_VERSION(3, 4, 0) ++ else if (evt->direction == GDK_SCROLL_SMOOTH) ++ { ++ gdouble delta_x, delta_y; ++ gdk_event_get_scroll_deltas((GdkEvent *) evt, &delta_x, &delta_y); ++ if ((delta_y < 0) || (delta_x < 0)) ++ val += 2; ++ else ++ val -= 2; ++ } ++#endif + else + val -= 2; + + +From a9c1c58558ec066b6e086230abcf70c7793583c8 Mon Sep 17 00:00:00 2001 +From: Nicolas Salguero +Date: Thu, 21 Jul 2022 12:54:07 +0200 +Subject: [PATCH 2/2] Fix a scrolling issue with the GTK3 volume plugin + +Scrolling with the mouse wheel on the volume plugin icon does nothing +because GDK_SCROLL events are missing. To receive these events, widgets +must set either GDK_SCROLL_MASK or GDK_SMOOTH_SCROLL_MASK. + +This fixes part of github issue #45, reported by nsalguero, +and part of https://bugs.debian.org/1052050. + +(commit and message amended by committer) +--- + plugins/volumealsa/volumealsa.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/plugins/volumealsa/volumealsa.c b/plugins/volumealsa/volumealsa.c +index 74b49f90..13693773 100644 +--- a/plugins/volumealsa/volumealsa.c ++++ b/plugins/volumealsa/volumealsa.c +@@ -991,6 +991,9 @@ static GtkWidget *volumealsa_constructor(LXPanel *panel, config_setting_t *setti + vol->tray_icon = lxpanel_image_new_for_icon(panel, "audio-volume-muted-panel", + -1, ICONS_MUTE); + gtk_container_add(GTK_CONTAINER(p), vol->tray_icon); ++#if GTK_CHECK_VERSION(3, 4, 0) ++ gtk_widget_add_events(p, GDK_SCROLL_MASK); ++#endif + + /* Initialize window to appear when icon clicked. */ + volumealsa_build_popup_window(p); diff --git a/helpers/DATA/lxpanel/patch_changes/001-MR_53_handle_not_charging_state_battery.patch b/helpers/DATA/lxpanel/patch_changes/001-MR_53_handle_not_charging_state_battery.patch new file mode 100644 index 0000000..d9f68f9 --- /dev/null +++ b/helpers/DATA/lxpanel/patch_changes/001-MR_53_handle_not_charging_state_battery.patch @@ -0,0 +1,28 @@ +From 0995ca8ee2b7cbd768921b0a4e2f88a98af09c92 Mon Sep 17 00:00:00 2001 +From: Mikau +Date: Mon, 17 Apr 2023 16:37:10 +0200 +Subject: [PATCH] Handle "Not Charging" state in battery indicator + +When the battery has reached the target charge level, some devices +use the status "Not Charging". LXpanel should not interpret this to mean +"Discharging", but rather the same as "Full". + +This is also likely to fix github issue #50, reported by embedeo. + +(commit message amended by committer) +--- + plugins/batt/batt_sys.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/plugins/batt/batt_sys.c b/plugins/batt/batt_sys.c +index 5a40273e..eb807a3c 100644 +--- a/plugins/batt/batt_sys.c ++++ b/plugins/batt/batt_sys.c +@@ -396,6 +396,7 @@ gboolean battery_is_charging( battery *b ) + return ( strcasecmp( b->state, "Unknown" ) == 0 + || strcasecmp( b->state, "Full" ) == 0 + || strcasecmp( b->state, "Charging" ) == 0 ++ || strcasecmp( b->state, "Not Charging" ) == 0 + || b->current_now == 0 ); /* bug sf.net, #720 */ + } + diff --git a/helpers/DATA/lxpanel/patch_changes/002-MR_78_do_not_trigger_wincmd_button_clicked.patch b/helpers/DATA/lxpanel/patch_changes/002-MR_78_do_not_trigger_wincmd_button_clicked.patch new file mode 100644 index 0000000..99819b6 --- /dev/null +++ b/helpers/DATA/lxpanel/patch_changes/002-MR_78_do_not_trigger_wincmd_button_clicked.patch @@ -0,0 +1,28 @@ +From 8b2d1ead714529f3abe00fff282607a4f9eb47b7 Mon Sep 17 00:00:00 2001 +From: kurokawachan +Date: Fri, 23 Aug 2024 04:11:55 -0700 +Subject: [PATCH] Do not trigger wincmd_button_clicked() by GDK_2BUTTON_PRESS + events + +If the toggle is clicked too quickly, it is considered a double-click +and three button-press events are generated instead of the usual two, +resulting in unwanted behavior. + +This fixes https://github.com/lxde/lxpanel/issues/77. +--- + plugins/wincmd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugins/wincmd.c b/plugins/wincmd.c +index 9b4ae48e..ae8db997 100644 +--- a/plugins/wincmd.c ++++ b/plugins/wincmd.c +@@ -124,7 +124,7 @@ static gboolean wincmd_button_clicked(GtkWidget * widget, GdkEventButton * event + WinCmdPlugin * wc = lxpanel_plugin_get_data(widget); + + /* Left-click to iconify. */ +- if (event->button == 1) ++ if (event->button == 1 && event->type == GDK_BUTTON_PRESS) + { + GdkScreen* screen = gtk_widget_get_screen(widget); + Screen *xscreen = GDK_SCREEN_XSCREEN(screen); diff --git a/helpers/DATA/lxpanel/patch_changes/003-MR_84_prevent_panel_freeze_pop_down_menu_debofe_detach.patch b/helpers/DATA/lxpanel/patch_changes/003-MR_84_prevent_panel_freeze_pop_down_menu_debofe_detach.patch new file mode 100644 index 0000000..11dab5e --- /dev/null +++ b/helpers/DATA/lxpanel/patch_changes/003-MR_84_prevent_panel_freeze_pop_down_menu_debofe_detach.patch @@ -0,0 +1,27 @@ +From 8b1135b857eb684296013c92487532a903039102 Mon Sep 17 00:00:00 2001 +From: kurokawachan +Date: Sat, 21 Sep 2024 20:16:48 -0700 +Subject: [PATCH] Pop down a menu before detaching it + +If we detach a GtkMenu while it is still being displayed, +it will freeze the entire panel. + +This fixes github issue #83, reported by make-your-soft-better. + +(commit message slightly amended by committer) +--- + plugins/task-button.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/plugins/task-button.c b/plugins/task-button.c +index 3744cc79..f90da5c8 100644 +--- a/plugins/task-button.c ++++ b/plugins/task-button.c +@@ -1544,6 +1544,7 @@ void task_button_update_windows_list(TaskButton *button, Window *list, gint n) + for (l = menu_list; l; l = l->next) + { + GtkMenu *menu = GTK_MENU(l->data); ++ gtk_menu_popdown(menu); + gtk_menu_detach(menu); + } + g_list_free(menu_list); diff --git a/helpers/DATA/lxpanel/patch_changes/004-MR_89_1-4_restore_disabled_cpufreq_plugin_functionality.patch b/helpers/DATA/lxpanel/patch_changes/004-MR_89_1-4_restore_disabled_cpufreq_plugin_functionality.patch new file mode 100644 index 0000000..924fccf --- /dev/null +++ b/helpers/DATA/lxpanel/patch_changes/004-MR_89_1-4_restore_disabled_cpufreq_plugin_functionality.patch @@ -0,0 +1,237 @@ +From dfa4708213c65b734b0d724de8290d4da3ba5af4 Mon Sep 17 00:00:00 2001 +From: rofl0r +Date: Wed, 12 Mar 2025 00:35:15 +0000 +Subject: [PATCH 1/4] Restore disabled cpufreq plugin functionality + +According to the comment used, this was apparently disabled because +someone thought that changing CPU governors requires root permissions, +but that can be easily changed using a rc script running on system +start. + +Probably the most sensible setup to modify the governors from a +restricted user account is to add it to a dedicated group with +write access to the corresponding sysfs files. + +For instance: + + for i in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_governor \ + /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_setspeed ; do + chown root:cpufreq "$i" + chmod 664 "$i" + done +--- + plugins/cpufreq/cpufreq.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/plugins/cpufreq/cpufreq.c b/plugins/cpufreq/cpufreq.c +index 05f41e0d..24e819ea 100644 +--- a/plugins/cpufreq/cpufreq.c ++++ b/plugins/cpufreq/cpufreq.c +@@ -99,7 +99,7 @@ get_cur_freq(cpufreq *cf){ + } + } + +-/*static void ++static void + get_governors(cpufreq *cf){ + FILE *fp; + GList *l; +@@ -189,7 +189,7 @@ frequency_menu(cpufreq *cf){ + + fclose(fp); + return GTK_WIDGET(menu); +-}*/ ++} + + static void + get_cpus(cpufreq *cf) +@@ -228,7 +228,7 @@ get_cpus(cpufreq *cf) + g_dir_close(cpuDirectory); + } + +-/*static void ++static void + cpufreq_set_governor(GtkWidget *widget, Param* p){ + FILE *fp; + char buf[ 100 ], sstmp [ 256 ]; +@@ -291,7 +291,7 @@ cpufreq_menu(cpufreq *cf){ + } + + return GTK_WIDGET (menu); +-}*/ ++} + + + +@@ -303,9 +303,9 @@ clicked(GtkWidget *widget, GdkEventButton *evt, LXPanel *panel) + /* Standard right-click handling. */ + if( evt->button == 1 ) + { +-// Setting governor can't work without root privilege +-// gtk_menu_popup( cpufreq_menu((cpufreq*)plugin->priv), NULL, NULL, NULL, NULL, +-// evt->button, evt->time ); ++ cpufreq *cf = lxpanel_plugin_get_data(widget); ++ gtk_menu_popup( GTK_MENU(cpufreq_menu(cf)), NULL, NULL, NULL, NULL, ++ evt->button, evt->time ); + return TRUE; + } + + +From 6c35362e69030f6e1bd360f1d8d8171135943c85 Mon Sep 17 00:00:00 2001 +From: rofl0r +Date: Wed, 12 Mar 2025 09:57:01 +0000 +Subject: [PATCH 2/4] Factor out identical code in cpufreq_set_gov/frequency + +--- + plugins/cpufreq/cpufreq.c | 36 ++++++++++++++++++++++-------------- + 1 file changed, 22 insertions(+), 14 deletions(-) + +diff --git a/plugins/cpufreq/cpufreq.c b/plugins/cpufreq/cpufreq.c +index 24e819ea..48ff25d0 100644 +--- a/plugins/cpufreq/cpufreq.c ++++ b/plugins/cpufreq/cpufreq.c +@@ -138,19 +138,34 @@ get_governors(cpufreq *cf){ + } + + static void +-cpufreq_set_freq(GtkWidget *widget, Param* p){ ++set_file(const char* cpu, const char* val, const char* file) { + FILE *fp; +- char buf[ 100 ], sstmp [ 256 ]; ++ char path [ 256 ]; + +- if(strcmp(p->cf->cur_governor, "userspace")) return; ++ snprintf(path, sizeof(path), "%s/%s", cpu, file); + +- sprintf(sstmp,"%s/%s",p->cf->cpus->data, SCALING_SETFREQ); +- if ((fp = fopen( sstmp, "w")) != NULL) { +- fprintf(fp,"%s",p->data); ++ if ((fp = fopen( path, "w")) != NULL) { ++ fprintf(fp,"%s",val); + fclose(fp); + } + } + ++static void ++set_freq(const char* cpu, const char* val) { ++ set_file(cpu, val, SCALING_SETFREQ); ++} ++ ++static void ++set_gov(const char* cpu, const char* val) { ++ set_file(cpu, val, SCALING_GOV); ++} ++ ++static void ++cpufreq_set_freq(GtkWidget *widget, Param* p){ ++ if(strcmp(p->cf->cur_governor, "userspace")) return; ++ set_freq(p->cf->cpus->data, p->data); ++} ++ + static GtkWidget * + frequency_menu(cpufreq *cf){ + FILE *fp; +@@ -230,14 +245,7 @@ get_cpus(cpufreq *cf) + + static void + cpufreq_set_governor(GtkWidget *widget, Param* p){ +- FILE *fp; +- char buf[ 100 ], sstmp [ 256 ]; +- +- sprintf(sstmp, "%s/%s", p->cf->cpus->data, SCALING_GOV); +- if ((fp = fopen( sstmp, "w")) != NULL) { +- fprintf(fp,"%s",p->data); +- fclose(fp); +- } ++ set_gov(p->cf->cpus->data, p->data); + } + + static GtkWidget * + +From c0831241f801f321ddfd48f7acc1e61574640a38 Mon Sep 17 00:00:00 2001 +From: rofl0r +Date: Wed, 12 Mar 2025 10:00:20 +0000 +Subject: [PATCH 3/4] Apply chosen governor/frequency to all CPUs + +Previously, governor and frequency were only changed for the +first CPU/core in the system, but all others were left untouched. +A user changing those generally wants the setting applied +to all cores (for example to powersave governor if on battery). +--- + plugins/cpufreq/cpufreq.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/plugins/cpufreq/cpufreq.c b/plugins/cpufreq/cpufreq.c +index 48ff25d0..9c194ca0 100644 +--- a/plugins/cpufreq/cpufreq.c ++++ b/plugins/cpufreq/cpufreq.c +@@ -162,8 +162,12 @@ set_gov(const char* cpu, const char* val) { + + static void + cpufreq_set_freq(GtkWidget *widget, Param* p){ ++ GList *curr; ++ + if(strcmp(p->cf->cur_governor, "userspace")) return; +- set_freq(p->cf->cpus->data, p->data); ++ ++ for(curr = p->cf->cpus; curr; curr = curr->next) ++ set_freq(curr->data, p->data); + } + + static GtkWidget * +@@ -245,7 +249,10 @@ get_cpus(cpufreq *cf) + + static void + cpufreq_set_governor(GtkWidget *widget, Param* p){ +- set_gov(p->cf->cpus->data, p->data); ++ GList *curr; ++ ++ for(curr = p->cf->cpus; curr; curr = curr->next) ++ set_gov(curr->data, p->data); + } + + static GtkWidget * + +From e8db3d47a308e43c44e0b036fa66df448a246e51 Mon Sep 17 00:00:00 2001 +From: rofl0r +Date: Fri, 14 Mar 2025 07:23:20 +0000 +Subject: [PATCH 4/4] Cosmetic change: move cpufreq_set_governor up + +--- + plugins/cpufreq/cpufreq.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/plugins/cpufreq/cpufreq.c b/plugins/cpufreq/cpufreq.c +index 9c194ca0..9e1bb0f1 100644 +--- a/plugins/cpufreq/cpufreq.c ++++ b/plugins/cpufreq/cpufreq.c +@@ -170,6 +170,14 @@ cpufreq_set_freq(GtkWidget *widget, Param* p){ + set_freq(curr->data, p->data); + } + ++static void ++cpufreq_set_governor(GtkWidget *widget, Param* p) { ++ GList *curr; ++ ++ for(curr = p->cf->cpus; curr; curr = curr->next) ++ set_gov(curr->data, p->data); ++} ++ + static GtkWidget * + frequency_menu(cpufreq *cf){ + FILE *fp; +@@ -247,14 +255,6 @@ get_cpus(cpufreq *cf) + g_dir_close(cpuDirectory); + } + +-static void +-cpufreq_set_governor(GtkWidget *widget, Param* p){ +- GList *curr; +- +- for(curr = p->cf->cpus; curr; curr = curr->next) +- set_gov(curr->data, p->data); +-} +- + static GtkWidget * + cpufreq_menu(cpufreq *cf){ + GList *l; diff --git a/helpers/DATA/lxpanel/patch_changes/005-fix_armhf_build_plugin_cpufreq.patch b/helpers/DATA/lxpanel/patch_changes/005-fix_armhf_build_plugin_cpufreq.patch new file mode 100644 index 0000000..da74806 --- /dev/null +++ b/helpers/DATA/lxpanel/patch_changes/005-fix_armhf_build_plugin_cpufreq.patch @@ -0,0 +1,117 @@ +diff --git a/plugins/cpufreq/cpufreq.c b/plugins/cpufreq/cpufreq.c +index 9e1bb0f1..34e781f0 100644 +--- a/plugins/cpufreq/cpufreq.c ++++ b/plugins/cpufreq/cpufreq.c +@@ -2,6 +2,7 @@ + * CPUFreq plugin to lxpanel + * + * Copyright (C) 2009 by Daniel Kesler ++ * 2025 Ingo Brückl + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by +@@ -32,7 +33,7 @@ + + #include "dbg.h" + +-#define PROC_ICON "cpufreq-icon" ++#define PROC_ICON "cpufreq" + #define SYSFS_CPU_DIRECTORY "/sys/devices/system/cpu" + #define SCALING_GOV "scaling_governor" + #define SCALING_AGOV "scaling_available_governors" +@@ -114,7 +115,7 @@ get_governors(cpufreq *cf){ + cf->governors = NULL; + return; + } +- sprintf(sstmp,"%s/%s",cf->cpus->data, SCALING_AGOV); ++ snprintf(sstmp, sizeof(sstmp), "%s/%s", cf->cpus->data, SCALING_AGOV); + + if (!(fp = fopen( sstmp, "r"))) { + printf("cpufreq: cannot open %s\n",sstmp); +@@ -178,13 +179,21 @@ cpufreq_set_governor(GtkWidget *widget, Param* p) { + set_gov(curr->data, p->data); + } + ++static gboolean ++permission(cpufreq *cf, const char* file) { ++ char path [ 256 ]; ++ ++ snprintf(path, sizeof(path), "%s/%s", cf->cpus->data, file); ++ return (g_access(path, W_OK) == 0); ++} ++ + static GtkWidget * + frequency_menu(cpufreq *cf){ + FILE *fp; + Param* param; + char buf[ 100 ], sstmp [ 256 ], c, bufl = 0; + +- sprintf(sstmp,"%s/%s",cf->cpus->data, SCALING_AFREQ); ++ snprintf(sstmp, sizeof(sstmp), "%s/%s", cf->cpus->data, SCALING_AFREQ); + + if (!(fp = fopen( sstmp, "r"))) { + printf("cpufreq: cannot open %s\n",sstmp); +@@ -199,7 +208,7 @@ frequency_menu(cpufreq *cf){ + if(bufl > 1){ + buf[bufl] = '\0'; + menuitem = gtk_menu_item_new_with_label(strdup(buf)); +- gtk_menu_append (GTK_MENU_SHELL (menu), menuitem); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + gtk_widget_show (menuitem); + param = g_new0(Param, 1); + param->data = strdup(buf); +@@ -259,6 +268,7 @@ static GtkWidget * + cpufreq_menu(cpufreq *cf){ + GList *l; + GSList *group; ++ gboolean can_write; + char buff[100]; + GtkMenuItem* menuitem; + Param* param; +@@ -270,33 +280,39 @@ cpufreq_menu(cpufreq *cf){ + group = NULL; + + if((cf->governors == NULL) || (!cf->has_cpufreq) || (cf->cur_governor == NULL)){ +- menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label("CPUFreq not supported")); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(_("CPUFreq not supported"))); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); + gtk_widget_show (GTK_WIDGET (menuitem)); + return GTK_WIDGET(menu); + } + ++ can_write = permission(cf, SCALING_SETFREQ); ++ + if(strcmp(cf->cur_governor, "userspace") == 0){ +- menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(" Frequency")); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(_(" Frequency"))); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ gtk_widget_set_sensitive (GTK_WIDGET (menuitem), can_write); + gtk_widget_show (GTK_WIDGET (menuitem)); + gtk_menu_item_set_submenu(menuitem, frequency_menu(cf)); + menuitem = GTK_MENU_ITEM(gtk_separator_menu_item_new()); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); + gtk_widget_show (GTK_WIDGET(menuitem)); + } + ++ can_write = permission(cf, SCALING_GOV); ++ + for( l = cf->governors; l; l = l->next ) + { + if(strcmp((char*)l->data, cf->cur_governor) == 0){ +- sprintf(buff,"> %s", l->data); ++ snprintf(buff, sizeof(buff), "▸ %s", l->data); + menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(strdup(buff))); + }else{ +- sprintf(buff," %s", l->data); ++ snprintf(buff, sizeof(buff), " %s", l->data); + menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(strdup(buff))); + } + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ gtk_widget_set_sensitive (GTK_WIDGET (menuitem), can_write); + gtk_widget_show (GTK_WIDGET (menuitem)); + param = g_new0(Param, 1); + param->data = l->data; diff --git a/helpers/DATA/mate-user-admin/patch_changes/000-add-cracklib-runtime-as-dependency.patch b/helpers/DATA/mate-user-admin/patch_changes/000-add-cracklib-runtime-as-dependency.patch new file mode 100644 index 0000000..d8b2a83 --- /dev/null +++ b/helpers/DATA/mate-user-admin/patch_changes/000-add-cracklib-runtime-as-dependency.patch @@ -0,0 +1,14 @@ +# Fixes https://gitlab.trisquel.org/trisquel/package-helpers/-/issues/216 + +diff --git a/debian/control b/debian/control +index 3297b1c..37ff49a 100644 +--- a/debian/control ++++ b/debian/control +@@ -28,6 +28,7 @@ Depends: ${shlibs:Depends}, + accountsservice, + group-service, + mate-desktop-common, ++ cracklib-runtime, + Description: MATE User Manager + User and group management utility suitable for lightweight desktop + environments such as MATE or Xfce. diff --git a/helpers/DATA/mypaint/patch_changes/000-fix_openmp_segfault.patch b/helpers/DATA/mypaint/patch_changes/000-fix_openmp_segfault.patch new file mode 100644 index 0000000..3cd6b3d --- /dev/null +++ b/helpers/DATA/mypaint/patch_changes/000-fix_openmp_segfault.patch @@ -0,0 +1,111 @@ +Origin: upstream, https://github.com/mypaint/mypaint/commit/356716e7bacfcbb1f3ab80171fea405fdd10b2b9 +Bug-Debian: https://bugs.debian.org/1079663 + +From 356716e7bacfcbb1f3ab80171fea405fdd10b2b9 Mon Sep 17 00:00:00 2001 +From: Red Rozenglass +Date: Fri, 11 Sep 2020 02:43:49 +0300 +Subject: [PATCH] Acquire/release the GIL while processing tile requests + +Fixes crashes on some Linux distros, potentially improves performance. + +When handling tile requests we currently use an openmp critical block in a +callback registered with libmypaint. The callback calls into Python code +without locking the GIL. This sometimes crashes mypaint in numpy's memory +cache allocator on some Linux distros that compile numpy with run-time +asserts (without `-DNDEBUG`), like Gentoo, as numpy uses Python's GIL +internally as a locking mechanism for its non-thread-safe global cache +management. + +Acquiring the GIL in the C callback, before calling into Python, ensures +that the GIL is still locked by the current thread when it reaches numpy's +code, and thus prevents the crashes. We yield the GIL whenever Python code +calls again into libmypaint, This allows other threads to acquire it, and +concurrent callbacks to run, which prevents deadlocks that would otherwise +happen while waiting for all the callbacks to finish on Python's side. When +libmypaint is done we re-acquire the GIL, and return up to the callback +where the GIL is released again after some Python reference count +bookkeeping. + +The OpenMP critical block is no longer necessary after introducing the GIL +locking mechanism. This would potentially improve performance as the C code +in libmypaint can process multiple callbacks at the same time during the +`Py_BEGIN_ALLOW_THREADS' period that yields the GIL. +--- + lib/brush.hpp | 16 ++++++++++++++-- + lib/pythontiledsurface.cpp | 7 +++++-- + lib/tiledsurface.hpp | 4 +++- + 3 files changed, 22 insertions(+), 5 deletions(-) + +diff --git a/lib/brush.hpp b/lib/brush.hpp +index f717a42df..0db455377 100644 +--- a/lib/brush.hpp ++++ b/lib/brush.hpp +@@ -66,13 +66,25 @@ class Brush { + bool stroke_to (Surface * surface, float x, float y, float pressure, float xtilt, float ytilt, double dtime, float viewzoom, float viewrotation, float barrel_rotation) + { + MyPaintSurface2 *c_surface = surface->get_surface2_interface(); +- return mypaint_brush_stroke_to_2(c_brush, c_surface, x, y, pressure, xtilt, ytilt, dtime, viewzoom, viewrotation, barrel_rotation); ++ bool stroke_finished_or_empty; ++ ++ Py_BEGIN_ALLOW_THREADS ++ stroke_finished_or_empty = mypaint_brush_stroke_to_2(c_brush, c_surface, x, y, pressure, xtilt, ytilt, dtime, viewzoom, viewrotation, barrel_rotation); ++ Py_END_ALLOW_THREADS ++ ++ return stroke_finished_or_empty; + } + + bool stroke_to_linear (Surface * surface, float x, float y, float pressure, float xtilt, float ytilt, double dtime, float viewzoom, float viewrotation, float barrel_rotation) + { + MyPaintSurface2 *c_surface = surface->get_surface2_interface(); +- return mypaint_brush_stroke_to_2_linearsRGB(c_brush, c_surface, x, y, pressure, xtilt, ytilt, dtime, viewzoom, viewrotation, barrel_rotation); ++ bool stroke_finished_or_empty; ++ ++ Py_BEGIN_ALLOW_THREADS ++ stroke_finished_or_empty = mypaint_brush_stroke_to_2_linearsRGB(c_brush, c_surface, x, y, pressure, xtilt, ytilt, dtime, viewzoom, viewrotation, barrel_rotation); ++ Py_END_ALLOW_THREADS ++ ++ return stroke_finished_or_empty; + } + + double get_total_stroke_painting_time() +diff --git a/lib/pythontiledsurface.cpp b/lib/pythontiledsurface.cpp +index 46c515c99..2c6e773db 100644 +--- a/lib/pythontiledsurface.cpp ++++ b/lib/pythontiledsurface.cpp +@@ -36,8 +36,9 @@ tile_request_start(MyPaintTiledSurface2 *tiled_surface, MyPaintTileRequest *requ + const int ty = request->ty; + PyArrayObject* rgba = NULL; + +-#pragma omp critical + { ++ PyGILState_STATE gstate = PyGILState_Ensure(); ++ + rgba = (PyArrayObject*)PyObject_CallMethod(self->py_obj, "_get_tile_numpy", "(iii)", tx, ty, readonly); + if (rgba == NULL) { + request->buffer = NULL; +@@ -59,7 +60,9 @@ tile_request_start(MyPaintTiledSurface2 *tiled_surface, MyPaintTileRequest *requ + Py_DECREF((PyObject *)rgba); + request->buffer = (uint16_t*)PyArray_DATA(rgba); + } +-} // #end pragma opt critical ++ ++ PyGILState_Release(gstate); ++} + + + } +diff --git a/lib/tiledsurface.hpp b/lib/tiledsurface.hpp +index 3a6b2e61d..d1a5d1307 100644 +--- a/lib/tiledsurface.hpp ++++ b/lib/tiledsurface.hpp +@@ -66,7 +66,9 @@ class TiledSurface : public Surface { + MyPaintRectangle* rects = this->bbox_rectangles; + MyPaintRectangles bboxes = {BBOXES, rects}; + +- mypaint_surface2_end_atomic((MyPaintSurface2 *)c_surface, &bboxes); ++ Py_BEGIN_ALLOW_THREADS ++ mypaint_surface2_end_atomic((MyPaintSurface2 *)c_surface, &bboxes); ++ Py_END_ALLOW_THREADS + + // The capacity of the bounding box array will most often exceed the number + // of rectangles that are actually used. The call to mypaint_surface_end_atomic diff --git a/helpers/DATA/partman-auto/patch_changes/000-set_trisquel_default_partman_recipe.patch b/helpers/DATA/partman-auto/patch_changes/000-set_trisquel_default_partman_recipe.patch new file mode 100644 index 0000000..1856946 --- /dev/null +++ b/helpers/DATA/partman-auto/patch_changes/000-set_trisquel_default_partman_recipe.patch @@ -0,0 +1,169 @@ +diff --git a/recipes-alpha/multi b/recipes-alpha/multi +index 186decf7..5916d8ee 100644 +--- a/recipes-alpha/multi ++++ b/recipes-alpha/multi +@@ -10,7 +10,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + method{ format } + format{ } + use_filesystem{ } +diff --git a/recipes-armel-kirkwood/multi b/recipes-armel-kirkwood/multi +index 690676a3..bcdea3fa 100644 +--- a/recipes-armel-kirkwood/multi ++++ b/recipes-armel-kirkwood/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/recipes-armel-orion5x/multi b/recipes-armel-orion5x/multi +index 690676a3..bcdea3fa 100644 +--- a/recipes-armel-orion5x/multi ++++ b/recipes-armel-orion5x/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/recipes-armhf-efikasb/multi b/recipes-armhf-efikasb/multi +index 690676a3..bcdea3fa 100644 +--- a/recipes-armhf-efikasb/multi ++++ b/recipes-armhf-efikasb/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/recipes-hppa/multi b/recipes-hppa/multi +index c984ae28..eabbfbb4 100644 +--- a/recipes-hppa/multi ++++ b/recipes-hppa/multi +@@ -12,7 +12,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext4 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + $bootable{ } + method{ format } +diff --git a/recipes-mipsel-loongson-2f/multi b/recipes-mipsel-loongson-2f/multi +index cf0e860a..0eab6089 100644 +--- a/recipes-mipsel-loongson-2f/multi ++++ b/recipes-mipsel-loongson-2f/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/recipes-powerpc-apus/multi b/recipes-powerpc-apus/multi +index 1ac8e5d9..5dd492ce 100644 +--- a/recipes-powerpc-apus/multi ++++ b/recipes-powerpc-apus/multi +@@ -14,7 +14,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/recipes-powerpc-chrp_ibm/multi b/recipes-powerpc-chrp_ibm/multi +index f42943e8..341d40fc 100644 +--- a/recipes-powerpc-chrp_ibm/multi ++++ b/recipes-powerpc-chrp_ibm/multi +@@ -14,7 +14,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/recipes-powerpc-chrp_pegasos/multi b/recipes-powerpc-chrp_pegasos/multi +index d8effcff..b947d8d6 100644 +--- a/recipes-powerpc-chrp_pegasos/multi ++++ b/recipes-powerpc-chrp_pegasos/multi +@@ -7,7 +7,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/recipes-powerpc-powermac_newworld/multi b/recipes-powerpc-powermac_newworld/multi +index 1d3b421b..c213840b 100644 +--- a/recipes-powerpc-powermac_newworld/multi ++++ b/recipes-powerpc-powermac_newworld/multi +@@ -7,7 +7,7 @@ partman-auto/text/multi_scheme :: + filesystem{ hfs } + mountpoint{ /boot/grub } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/recipes-powerpc-powermac_oldworld/multi b/recipes-powerpc-powermac_oldworld/multi +index d8effcff..b947d8d6 100644 +--- a/recipes-powerpc-powermac_oldworld/multi ++++ b/recipes-powerpc-powermac_oldworld/multi +@@ -7,7 +7,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/recipes-powerpc-prep/multi b/recipes-powerpc-prep/multi +index f206800c..43c4774a 100644 +--- a/recipes-powerpc-prep/multi ++++ b/recipes-powerpc-prep/multi +@@ -5,7 +5,7 @@ partman-auto/text/multi_scheme :: + $bootable{ } + method{ prep } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/recipes-sparc/multi b/recipes-sparc/multi +index ed9aec7e..4b950102 100644 +--- a/recipes-sparc/multi ++++ b/recipes-sparc/multi +@@ -14,7 +14,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 50000 $default_filesystem + $lvmok{ } + method{ format } + format{ } diff --git a/helpers/DATA/pkgsel/patch_changes/000-propagate_installer-chosen_locale_to_tasksel.patch b/helpers/DATA/pkgsel/patch_changes/000-propagate_installer-chosen_locale_to_tasksel.patch new file mode 100644 index 0000000..83b0403 --- /dev/null +++ b/helpers/DATA/pkgsel/patch_changes/000-propagate_installer-chosen_locale_to_tasksel.patch @@ -0,0 +1,24 @@ +diff --git a/debian/postinst b/debian/postinst +index 2f35032b..da97a4c7 100755 +--- a/debian/postinst ++++ b/debian/postinst +@@ -158,8 +158,18 @@ fi + if db_get pkgsel/run_tasksel && [ "$RET" = true ]; then + log "starting tasksel" + db_progress INFO pkgsel/progress/tasksel ++ # Propagate installer-chosen locale to tasksel so tests/lang can auto-select l10n ++ db_get debian-installer/locale || true ++ LOCALE="$RET" ++ if [ -n "$LOCALE" ]; then ++ LANG="$LOCALE" ++ NOENC="${LOCALE%%.*}" ++ BASE="${NOENC%%_*}" ++ LANGUAGE="${NOENC}:${BASE}" ++ export LANG LANGUAGE ++ fi + apt-install tasksel # ensure tasksel is installed +- DEBIAN_TASKS_ONLY=1 in-target sh -c "tasksel --new-install --debconf-apt-progress='--from $tasksel_start --to $tasksel_end --logstderr'" || aptfailed ++ DEBIAN_TASKS_ONLY=1 in-target sh -c "LANG='$LANG' LANGUAGE='$LANGUAGE' tasksel --new-install --debconf-apt-progress='--from $tasksel_start --to $tasksel_end --logstderr'" || aptfailed + fi + + if db_get pkgsel/include/install-recommends; then diff --git a/helpers/DATA/plymouth/patch_changes/10ac8d2dc927b112ce6aeb06bc73d9c46550954c.patch b/helpers/DATA/plymouth/patch_changes/10ac8d2dc927b112ce6aeb06bc73d9c46550954c.patch new file mode 100644 index 0000000..a9d0f78 --- /dev/null +++ b/helpers/DATA/plymouth/patch_changes/10ac8d2dc927b112ce6aeb06bc73d9c46550954c.patch @@ -0,0 +1,37 @@ +From 10ac8d2dc927b112ce6aeb06bc73d9c46550954c Mon Sep 17 00:00:00 2001 +From: n3rdopolis +Date: Tue, 6 Feb 2024 18:52:25 -0500 +Subject: [PATCH] ply-boot-splash: Set unbuffered input when creating a text + display + +--- + src/libply-splash-core/ply-boot-splash.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/libply-splash-core/ply-boot-splash.c b/src/libply-splash-core/ply-boot-splash.c +index 12fb6c102..217f455e0 100644 +--- a/src/libply-splash-core/ply-boot-splash.c ++++ b/src/libply-splash-core/ply-boot-splash.c +@@ -173,6 +173,7 @@ ply_boot_splash_add_text_display (ply_boot_splash_t *splash, + ply_text_display_t *display) + { + int number_of_columns, number_of_rows; ++ ply_terminal_t *terminal; + + if (splash->plugin_interface->add_text_display == NULL) + return; +@@ -183,6 +184,11 @@ ply_boot_splash_add_text_display (ply_boot_splash_t *splash, + ply_trace ("adding %dx%d text display", number_of_columns, number_of_rows); + + splash->plugin_interface->add_text_display (splash->plugin, display); ++ ++ terminal = ply_text_display_get_terminal (display); ++ if (terminal) ++ ply_terminal_set_unbuffered_input (terminal); ++ + ply_list_append_data (splash->text_displays, display); + } + +-- +GitLab + diff --git a/helpers/DATA/rpl b/helpers/DATA/rpl index 8da0013..262057e 100755 --- a/helpers/DATA/rpl +++ b/helpers/DATA/rpl @@ -1,4 +1,4 @@ -#!/usr/bin/python2.7 +#!/usr/bin/python3 import optparse, sys, os, tempfile, re try: import readline @@ -6,7 +6,7 @@ except ImportError: pass from stat import * def show_license(*eat): - print """rpl - replace strings in files + print("""rpl - replace strings in files Copyright (C) 2004-2005 Goran Weinholt Copyright (C) 2004 Christian Haggstrom @@ -23,7 +23,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -""" +""") sys.exit(0) def get_files(filenames, recurse, suffixen, verbose, hidden_files): @@ -31,7 +31,7 @@ def get_files(filenames, recurse, suffixen, verbose, hidden_files): for filename in filenames: try: perms = os.lstat(filename) - except OSError, e: + except OSError as e: sys.stderr.write("\nrpl: Unable to read permissions of %s." % filename) sys.stderr.write("\nrpl: Error: %s" % e) @@ -71,26 +71,43 @@ def unescape(s): regex = re.compile(r'\\([0-7]{1,3}|x[0-9a-fA-F]{2}|[nrtvafb\\])') return regex.sub(lambda match: eval('"%s"' % match.group()), s) -def blockrepl(instream, outstream, regex, before, after, blocksize=None): - patlen = len(before) - sum = 0 - if not blocksize: blocksize = 2*patlen - tonext = '' - while 1: - block = instream.read(blocksize) - if not block: break - parts = regex.split(tonext+block) - sum += len(parts)-1 - lastpart = parts[-1] - if lastpart: - tonext = lastpart[-patlen:] - parts[-1] = lastpart[:-len(tonext)] - else: - tonext = '' - outstream.write(after.join(parts)) - outstream.write(tonext) - return sum +def blockrepl(instream, outstream, regex, before, after, blocksize=None, encoding="latin-1"): + """ + Read blocks as bytes, decode, regex-replace, re-encode, write. + Keeps python2 behavior but avoids str/bytes errors on python3. + """ + patlen = len(before) + if blocksize is None: + blocksize = 2 * patlen if patlen else 4096 + + matches = 0 + carry = "" # tail carried to the next block, as str + + while True: + chunk = instream.read(blocksize) + if not chunk: + break + # Decode the new bytes and prepend any carry‑over from previous loop + block = carry + chunk.decode(encoding, errors="surrogateescape") + + parts = regex.split(block) + matches += len(parts) - 1 + + # Preserve the last *patlen* chars in case the pattern straddles blocks + tail = parts[-1] + if tail: + carry = tail[-patlen:] + parts[-1] = tail[:-len(carry)] + else: + carry = "" + + outstream.write(after.join(parts).encode(encoding, errors="surrogateescape")) + + if carry: + outstream.write(carry.encode(encoding, errors="surrogateescape")) + + return matches def main(): # First we parse the command line arguments... usage = "usage: %prog [options] old_string new_string target_file(s)" @@ -163,7 +180,7 @@ def main(): sys.stderr.write("(ignoring case)? (Y/[N]) ") else: sys.stderr.write("(case sensitive)? (Y/[N]) ") - line = raw_input() + line = input() if line != "" and line[0] in "nN": sys.stderr.write("\nrpl: User cancelled operation.\n") sys.exit(os.EX_TEMPFAIL) @@ -195,7 +212,7 @@ def main(): for filename, perms in files: # Open the input file try: f = open(filename, "rb") - except IOError, e: + except IOError as e: sys.stderr.write("\nrpl: Unable to open %s for reading." % fn) sys.stderr.write("\nrpl: Error: %s" % e) sys.stderr.write("\nrpl: SKIPPING %s\n\n" % fn) @@ -209,7 +226,7 @@ def main(): try: o, tmp_path = tempfile.mkstemp("", ".tmp.") o = os.fdopen(o, "wb") - except OSError, e: + except OSError as e: sys.stderr.write("\nrpl: Unable to create temp file.") sys.stderr.write("\nrpl: Error: %s" % e) sys.stderr.write("\nrpl: (Type \"rpl -h\" and consider \"-t\" to specify temp file location.)") @@ -220,7 +237,7 @@ def main(): try: os.chown(tmp_path, perms.st_uid, perms.st_gid) os.chmod(tmp_path, perms.st_mode) - except OSError, e: + except OSError as e: sys.stderr.write("\nrpl: Unable to set owner/group/perms of %s" % filename) sys.stderr.write("\nrpl: Error: %s" % e) @@ -250,7 +267,7 @@ def main(): if opts.dry_run: try: fn = os.path.realpath(filename) - except OSError, e: + except OSError as e: fn = filename if not opts.quiet: sys.stderr.write(" %s\n" % fn) os.unlink(tmp_path) @@ -261,7 +278,7 @@ def main(): sys.stderr.write("\nSave '%s' ? ([Y]/N) " % filename) line = "" while line == "" or line[0] not in "Yy\nnN": - line = raw_input() + line = input() if line[0] in "nN": sys.stderr.write("Not Saved.\n") os.unlink(tmp_path) @@ -270,14 +287,14 @@ def main(): if opts.do_backup: try: os.rename(filename, filename + "~") - except OSError, e: + except OSError as e: sys.stderr.write("rpl: An error occured renaming %s to %s." % (filename, filename + "~")) sys.stderr.write("\nrpl: Error: %s" % e) continue # Rename the file try: os.rename(tmp_path, filename) - except OSError, e: + except OSError as e: sys.stderr.write("rpl: An error occured replacing %s with %s." % (tmp_path, filename)) sys.stderr.write("\nrpl: Error: %s" % e) @@ -287,7 +304,7 @@ def main(): # Restore the times if opts.keep_times: try: os.utime(filename, (perms.st_atime, perms.st_mtime)) - except OSError, e: + except OSError as e: sys.stderr.write("\nrpl: An error occured setting the access time and mod time of the file %s.", filename) sys.stderr.write("\nrpl: Error: %s" % e) total_matches += matches diff --git a/helpers/DATA/sbuild/patch_changes/000-add_distro-info_auto-detect.patch b/helpers/DATA/sbuild/patch_changes/000-add_distro-info_auto-detect.patch new file mode 100644 index 0000000..e804847 --- /dev/null +++ b/helpers/DATA/sbuild/patch_changes/000-add_distro-info_auto-detect.patch @@ -0,0 +1,75 @@ +diff --git a/lib/Sbuild/Conf.pm b/lib/Sbuild/Conf.pm +index 79ae1c15..4ae269ce 100644 +--- a/lib/Sbuild/Conf.pm ++++ b/lib/Sbuild/Conf.pm +@@ -42,9 +42,35 @@ BEGIN { + @EXPORT = qw(new setup read); + } + +-my $ubuntu_mmdebstrap_extra_args = {}; + use Debian::DistroInfo; +-for my $series (UbuntuDistroInfo->new()->supported()) { ++ ++# Add distro-info provider auto-detect switch ++our $DISTROINFO_CLASS; ++our $IS_TRISQUEL = 0; ++BEGIN { ++ eval { ++ require Debian::DistroInfo; ++ Debian::DistroInfo->import(); ++ 1; ++ }; ++ if (defined &UbuntuDistroInfo::new) { ++ $DISTROINFO_CLASS = 'UbuntuDistroInfo'; ++ warn "sbuild: Debian::DistroInfo used: Ubuntu\n"; ++ } elsif (defined &TrisquelDistroInfo::new) { ++ $DISTROINFO_CLASS = 'TrisquelDistroInfo'; ++ $IS_TRISQUEL = 1; ++ warn "sbuild: Debian::DistroInfo used: Trisquel\n"; ++ } else { ++ $DISTROINFO_CLASS = undef; ++ warn "sbuild: Debian::DistroInfo not available; mmdebstrap extras disabled at build-time\n"; ++ } ++} ++ ++my $ubuntu_mmdebstrap_extra_args = {}; ++my $trisquel_mmdebstrap_extra_args = {}; ++ ++if (defined $DISTROINFO_CLASS && $DISTROINFO_CLASS eq 'UbuntuDistroInfo') { ++ for my $series (UbuntuDistroInfo->new()->supported()) { + $ubuntu_mmdebstrap_extra_args->{$series} = [ '--components=main,universe' ]; + # We use snapshot.ubuntu.com here so it works both for ports and non-ports architectures without having to do complicated architecture detection logic + $ubuntu_mmdebstrap_extra_args->{"$series-proposed"} = [ +@@ -63,6 +83,32 @@ for my $series (UbuntuDistroInfo->new()->supported()) { + '--components=main,universe', + '--setup-hook=sed -i /-updates/d "$1"/etc/apt/sources.list', + ]; ++ } ++} ++ ++if (defined $DISTROINFO_CLASS && $DISTROINFO_CLASS eq 'TrisquelDistroInfo') { ++ for my $series (TrisquelDistroInfo->new()->supported()) { ++ $trisquel_mmdebstrap_extra_args->{$series} = [ '--components=main' ]; ++ $trisquel_mmdebstrap_extra_args->{"$series-updates"} = [ ++ '--components=main', ++ '--include=ca-certificates', ++ '--setup-hook=echo "deb [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] https://archive.trisquel.org/trisquel ' . $series . '-updates main" > "$1"/etc/apt/sources.list.d/updates.list' ++ ]; ++ $trisquel_mmdebstrap_extra_args->{"$series-security"} = [ ++ '--components=main', ++ '--include=ca-certificates', ++ '--setup-hook=echo "deb [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] https://archive.trisquel.org/trisquel ' . $series . '-security main" > "$1"/etc/apt/sources.list.d/security.list' ++ ]; ++ $trisquel_mmdebstrap_extra_args->{"$series-backports"} = [ ++ '--components=main', ++ '--include=ca-certificates', ++ '--setup-hook=echo "deb [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] https://archive.trisquel.org/trisquel ' . $series . '-backports main" > "$1"/etc/apt/sources.list.d/backports.list' ++ ]; ++ } ++} ++ ++if ($IS_TRISQUEL) { ++ $ubuntu_mmdebstrap_extra_args = $trisquel_mmdebstrap_extra_args; + } + + sub setup ($); diff --git a/helpers/DATA/software-properties/remove_ubuntu_subscription_tab.patch b/helpers/DATA/software-properties/patch_changes/001-remove_ubuntu_subscription_tab.patch similarity index 100% rename from helpers/DATA/software-properties/remove_ubuntu_subscription_tab.patch rename to helpers/DATA/software-properties/patch_changes/001-remove_ubuntu_subscription_tab.patch diff --git a/helpers/DATA/software-properties/remove_proposed_updates.patch b/helpers/DATA/software-properties/patch_changes/002-remove_proposed_updates.patch similarity index 100% rename from helpers/DATA/software-properties/remove_proposed_updates.patch rename to helpers/DATA/software-properties/patch_changes/002-remove_proposed_updates.patch diff --git a/helpers/DATA/software-properties/fix_PPA_upstream_codename.patch b/helpers/DATA/software-properties/patch_changes/003-fix_PPA_upstream_codename.patch similarity index 100% rename from helpers/DATA/software-properties/fix_PPA_upstream_codename.patch rename to helpers/DATA/software-properties/patch_changes/003-fix_PPA_upstream_codename.patch diff --git a/helpers/DATA/software-properties/removal_of_snaps_other_packages_referral.patch b/helpers/DATA/software-properties/patch_changes/004-removal_of_snaps_other_packages_referral.patch similarity index 100% rename from helpers/DATA/software-properties/removal_of_snaps_other_packages_referral.patch rename to helpers/DATA/software-properties/patch_changes/004-removal_of_snaps_other_packages_referral.patch diff --git a/helpers/DATA/software-properties/rm_extend_esm_url_link.patch b/helpers/DATA/software-properties/patch_changes/005-rm_extend_esm_url_link.patch similarity index 100% rename from helpers/DATA/software-properties/rm_extend_esm_url_link.patch rename to helpers/DATA/software-properties/patch_changes/005-rm_extend_esm_url_link.patch diff --git a/helpers/DATA/software-properties/patch_changes/006-add_new_dependency_for_s-p-111.patch b/helpers/DATA/software-properties/patch_changes/006-add_new_dependency_for_s-p-111.patch new file mode 100644 index 0000000..ffc4da1 --- /dev/null +++ b/helpers/DATA/software-properties/patch_changes/006-add_new_dependency_for_s-p-111.patch @@ -0,0 +1,12 @@ +diff --git a/debian/control b/debian/control +index 2dc835cb..d7ec094e 100644 +--- a/debian/control ++++ b/debian/control +@@ -102,6 +102,7 @@ Depends: debconf-kde-helper, + python3-pyqt6, + python3-sip, + python3-software-properties (= ${binary:Version}), ++ pyqt6-dev-tools, + software-properties-common, + ${misc:Depends}, + ${python3:Depends} diff --git a/helpers/DATA/tasksel/Makefile b/helpers/DATA/tasksel/Makefile index 33b1f58..1b04dc5 100644 --- a/helpers/DATA/tasksel/Makefile +++ b/helpers/DATA/tasksel/Makefile @@ -10,9 +10,22 @@ UDESCDIR=trisquel-tasks DESCPO=$(DESCDIR)/po VERSION=$(shell expr "`dpkg-parsechangelog 2>/dev/null |grep Version:`" : '.*Version: \(.*\)' | cut -d - -f 1) LANGS=ar bg bn bs ca cs cy da de dz el eo es et eu fa fi fr gl gu he hi hr hu hy id it ja km ko lt lv mg mk nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sv ta te th tl tr uk vi wo zh_CN zh_TW -LANGS_DESC=ar bg bn bs ca cs cy da de dz el eo es et et eu fi fr gl gu he hi hr hu id it ja km ko lt lv mg mk nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sv te th tl tr uk vi wo zh_CN zh_TW +LANGS_DESC=ar bg bn bs ca cs cy da de dz el eo es et eu fi fr gl gu he hi hr hu id it ja km ko lt lv mg mk nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sv te th tl tr uk vi wo zh_CN zh_TW LOCALEDIR=$(DESTDIR)/usr/share/locale +# ---- L10N generation ---- +# l10n base +L10N_PKGS = language-pack hunspell hyphen mythes +# Desktops l10n +L10N_PKGS += language-pack-gnome language-pack-kde +# Apps l10n (condition in runtime) +L10N_PKGS += abrowser-locale icedove-locale libreoffice-l10n +GEN_LANG_STAMP = $(UDESCDIR)/.lang_generated + +$(GEN_LANG_STAMP): lang-gen.sh + ./lang-gen.sh "$(LANGS_DESC)" "$(L10N_PKGS)" $(UDESCDIR) + touch $@ + all: $(UTASKDESC) po/build_stamp $(TASKDESC): makedesc.pl $(DESCDIR)/[a-z]??* @@ -22,8 +35,10 @@ $(TASKDESC): makedesc.pl $(DESCDIR)/[a-z]??* $(UDESCDIR): trisquel-seeds.pl USUITE=$CODENAME -$(UTASKDESC): makedesc.pl $(UDESCDIR)/[a-z]??* +$(UTASKDESC): $(GEN_LANG_STAMP) makedesc.pl $(UDESCDIR)/* ./makedesc.pl $(UDESCDIR) $(UTASKDESC) + # drop a blank first line if present to avoid parser warnings + sed -i '1{/^$$/d}' $(UTASKDESC) %.o: %.c $(COMPILE) $< @@ -56,10 +71,12 @@ install: pod2man --section=8 --center "Debian specific manpage" --release $(VERSION) tasksel.pod | gzip -9c > $(DESTDIR)/usr/share/man/man8/tasksel.8.gz for lang in $(LANGS); do \ [ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ - install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/tasksel.mo; \ + if [ -f po/$$lang.mo ]; then \ + install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/tasksel.mo; \ + fi; \ done -install-data: +install-data: $(UTASKDESC) install -d $(DESTDIR)$(TASKDIR)/descs \ $(DESTDIR)/usr/lib/tasksel/info \ $(DESTDIR)/usr/lib/tasksel/tests @@ -77,15 +94,9 @@ install-data: [ "$$package" = "packages/list" ] && continue; \ install -m 755 $$package $(DESTDIR)/usr/lib/tasksel/packages/; \ done -#Dropped -# for lang in $(LANGS_DESC); do \ -# [ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ -# install -m 644 $(DESCDIR)/po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/$(DOMAIN).mo; \ -# done clean: rm -f $(TASKDESC) $(UTASKDESC) *~ rm -rf debian/external-overrides $(MAKE) -C po clean $(MAKE) -C $(DESCPO) clean - diff --git a/helpers/DATA/tasksel/lang-gen.sh b/helpers/DATA/tasksel/lang-gen.sh new file mode 100755 index 0000000..9fe89da --- /dev/null +++ b/helpers/DATA/tasksel/lang-gen.sh @@ -0,0 +1,50 @@ +#!/bin/sh +set -e + +# Args: +# $1 = LANGS_DESC (lista de códigos crudos) +# $2 = L10N_PKGS (familias base: language-pack, -gnome, hunspell, hyphen, mythes) +# $3 = destino (directorio trisquel-tasks) + +raw_langs="$1" +families="$2" +dest="$3" + +canon() { + case "$1" in + pt_BR) echo pt ;; + zh_CN) echo zh-hans ;; + zh_TW) echo zh-hant ;; + *) echo "${1%%_*}" ;; + esac +} + +have_pkg() { apt-cache show "$1" >/dev/null 2>&1; } + +mkdir -p "$dest" + +# de-dup +uniq_langs=$(for l in $raw_langs; do canon "$l"; done | tr ' ' '\n' | sort -u) + +for lang in $uniq_langs; do + base="language-pack-$lang" + if ! have_pkg "$base"; then + echo "skip: $lang (no $base)" >&2 + continue + fi + f="$dest/l10n-$lang" + { + echo "Task: $lang" + echo "Description: $lang environment" + echo " This task localises the desktop in $lang." + echo "Key:" + echo " $base" + echo "Packages: list" + for fam in $families; do + echo " ${fam}-${lang}" + done + echo "Section: l10n" + echo "Test-lang: $lang" + echo + } > "$f" +done diff --git a/helpers/DATA/tasksel/list b/helpers/DATA/tasksel/list new file mode 100644 index 0000000..664cb5f --- /dev/null +++ b/helpers/DATA/tasksel/list @@ -0,0 +1,57 @@ +#!/bin/sh +# $1 = task name, $2..$N = packages (from "Packages: list") +# Runtime policy: +# - language-pack-gnome-* > MATE/GNOME/LXDE +# - language-pack-kde-* > KDE (Triskel) +# - abrowser-/firefox-locale-* > all desktops (MATE/GNOME/LXDE/KDE), not console +# - libreoffice-l10n-*, icedove-locale-* > MATE/GNOME/KDE; not LXDE/console +# - skip non-existent candidates (avoid APT 100) + +shift 1 + +debconf_get() { + [ -x /usr/bin/debconf-communicate ] || return + printf 'GET %s\n' "$1" | /usr/bin/debconf-communicate 2>/dev/null \ + | awk 'NR==1 && $1==0 { $1=""; sub(/^ /,""); print }' +} + +has_pkg() { /usr/bin/dpkg-query -W -f='${Status}\n' "$1" 2>/dev/null | grep -q 'ok installed'; } +exists() { LC_ALL=C /usr/bin/apt-cache policy "$1" 2>/dev/null | awk '/Candidate:/ {print $2}' | grep -qxv '(none)'; } + +sel="$(debconf_get pkgsel/desktop) $(debconf_get tasksel/first)" +case "$sel" in + *triskel*) FLAVOR=kde ;; + *trisquel-mini*) FLAVOR=lxde ;; + *trisquel-gnome*) FLAVOR=gnome ;; + *trisquel-desktop*) FLAVOR=mate ;; + *) FLAVOR=unknown ;; +esac + +if [ "$FLAVOR" = unknown ]; then + if has_pkg triskel || has_pkg plasma-desktop; then FLAVOR=kde + elif has_pkg trisquel-mini || has_pkg lxde-core; then FLAVOR=lxde + elif has_pkg trisquel-gnome || has_pkg gnome-shell; then FLAVOR=gnome + elif has_pkg trisquel-desktop || has_pkg mate-desktop-environment; then FLAVOR=mate + else FLAVOR=console + fi +fi + +is_kde=false; [ "$FLAVOR" = kde ] && is_kde=true +is_gtk=false; echo "$FLAVOR" | grep -Eq '^(mate|gnome|lxde)$' && is_gtk=true +is_console=false; [ "$FLAVOR" = console ] && is_console=true +is_desktop=true; $is_console && is_desktop=false + +emit() { + p="$1"; [ -n "$p" ] || return + case "$p" in + language-pack-gnome-*) $is_gtk || return ;; + language-pack-kde-*) $is_kde || return ;; + abrowser-l10n-*|abrowser-locale-*|firefox-locale-*) + $is_desktop || return ;; + libreoffice-l10n-*) echo "$FLAVOR" | grep -Eq '^(lxde|console)$' && return ;; + icedove-locale-*) echo "$FLAVOR" | grep -Eq '^(lxde|console)$' && return ;; + esac + exists "$p" && printf '%s\n' "$p" +} + +for p in "$@"; do emit "$p"; done diff --git a/helpers/DATA/tasksel/trisquel-tasks/dns-server b/helpers/DATA/tasksel/trisquel-tasks/dns-server index 61e4c25..d6ea37f 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/dns-server +++ b/helpers/DATA/tasksel/trisquel-tasks/dns-server @@ -2,6 +2,5 @@ Task: dns-server Section: server Description: Bind9 DNS server Selects the BIND DNS server and its documentation. -Packages: list Key: bind9 diff --git a/helpers/DATA/tasksel/trisquel-tasks/ltsp-server b/helpers/DATA/tasksel/trisquel-tasks/ltsp-server index c409aa2..d1c78e0 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/ltsp-server +++ b/helpers/DATA/tasksel/trisquel-tasks/ltsp-server @@ -2,7 +2,6 @@ Task: ltsp-server Section: user Description: LTSP server This task provides a LTSP server on a Trisquel console environment with a server optimized kernel. -Packages: list Key: trisquel-base trisquel-base-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/mail-server b/helpers/DATA/tasksel/trisquel-tasks/mail-server index ec68eb7..ff9c0e3 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/mail-server +++ b/helpers/DATA/tasksel/trisquel-tasks/mail-server @@ -3,6 +3,5 @@ Section: server Description: Postfix mail server This task selects a variety of package useful for a general purpose mail server system. -Packages: list Key: postfix diff --git a/helpers/DATA/tasksel/trisquel-tasks/openssh-server b/helpers/DATA/tasksel/trisquel-tasks/openssh-server index e495f0d..6760c48 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/openssh-server +++ b/helpers/DATA/tasksel/trisquel-tasks/openssh-server @@ -2,6 +2,5 @@ Task: openssh-server Section: server Description: OpenSSH secure shell server Selects packages needed for an OpenSSH server. -Packages: list Key: openssh-server diff --git a/helpers/DATA/tasksel/trisquel-tasks/print-server b/helpers/DATA/tasksel/trisquel-tasks/print-server index 26642cc..eda12e5 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/print-server +++ b/helpers/DATA/tasksel/trisquel-tasks/print-server @@ -2,7 +2,6 @@ Task: print-server Section: server Description: Cups print server This task sets up your system to be a print server. -Packages: list Key: cups cups-bsd diff --git a/helpers/DATA/tasksel/trisquel-tasks/samba-server b/helpers/DATA/tasksel/trisquel-tasks/samba-server index e1dfc41..50f7d6b 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/samba-server +++ b/helpers/DATA/tasksel/trisquel-tasks/samba-server @@ -3,6 +3,5 @@ Section: server Description: Samba SMB file server This task sets up your system to be a Samba file server, which is especially suitable in networks with both Windows and GNU/Linux systems. -Packages: list Key: samba diff --git a/helpers/DATA/tasksel/trisquel-tasks/triskel b/helpers/DATA/tasksel/trisquel-tasks/triskel index 61df555..3bcd9ec 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/triskel +++ b/helpers/DATA/tasksel/trisquel-tasks/triskel @@ -2,7 +2,6 @@ Task: triskel Section: user Description: Triskel desktop environment This task provides a KDE based Trisquel desktop environment and applications. -Packages: list Key: triskel triskel-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/trisquel-console b/helpers/DATA/tasksel/trisquel-tasks/trisquel-console index b0ed169..7f37a0a 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/trisquel-console +++ b/helpers/DATA/tasksel/trisquel-tasks/trisquel-console @@ -2,7 +2,6 @@ Task: trisquel-console Section: user Description: Trisquel console environment This task provides a basic Trisquel console environment -Packages: list Key: trisquel-base trisquel-base-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/trisquel-desktop b/helpers/DATA/tasksel/trisquel-tasks/trisquel-desktop index 8e77753..0106fe0 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/trisquel-desktop +++ b/helpers/DATA/tasksel/trisquel-tasks/trisquel-desktop @@ -2,7 +2,6 @@ Task: trisquel-desktop Section: user Description: Trisquel desktop environment This task provides the standard Trisquel desktop environment and applications. -Packages: list Key: trisquel trisquel-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/trisquel-gnome b/helpers/DATA/tasksel/trisquel-tasks/trisquel-gnome index 358db11..8a9c0a7 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/trisquel-gnome +++ b/helpers/DATA/tasksel/trisquel-tasks/trisquel-gnome @@ -2,7 +2,6 @@ Task: trisquel-gnome Section: user Description: Trisquel GNOME environment This task provides a Trisquel desktop based on the GNOME environment -Packages: list Key: trisquel-gnome trisquel-gnome-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/trisquel-mini b/helpers/DATA/tasksel/trisquel-tasks/trisquel-mini index 4af6cff..9534af5 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/trisquel-mini +++ b/helpers/DATA/tasksel/trisquel-tasks/trisquel-mini @@ -2,7 +2,6 @@ Task: trisquel-mini Section: user Description: Trisquel mini environment This task provides a small Trisquel desktop environment -Packages: list Key: trisquel-mini trisquel-mini-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/web-server b/helpers/DATA/tasksel/trisquel-tasks/web-server index 7ca2b2d..279e037 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/web-server +++ b/helpers/DATA/tasksel/trisquel-tasks/web-server @@ -2,7 +2,6 @@ Task: web-server Section: server Description: GLAMP web server Selects a ready-made GNU+Linux/Apache/MySQL/PHP server. -Packages: list Key: apache2 mysql-server diff --git a/helpers/DATA/ubiquity/99trisquel b/helpers/DATA/ubiquity/99trisquel new file mode 100755 index 0000000..9972b27 --- /dev/null +++ b/helpers/DATA/ubiquity/99trisquel @@ -0,0 +1,77 @@ +#!/bin/sh +set -e + +file="$1" + +: "${ROOT:=/target}" +SD="$ROOT/etc/apt/sources.list.d" +SF="$SD/trisquel.sources" +MSG="# Trisquel sources have moved to /etc/apt/sources.list.d/trisquel.sources" +SAVETO="$ROOT/etc/apt/sources.list.new" +mkdir -p "$SD" + +FASTEST=https://archive.trisquel.org/trisquel/ +SPEED=1000000000000 + +if nm-online -xq +then + for i in $(grep '//' /usr/share/python-apt/templates/Trisquel.mirrors | sed 's|/$||') + do + echo Testing $i + TIME=$(date +%s%N) + wget --no-check-certificate -t 1 -T 5 --max-redirect=0 -o /dev/null -O /dev/null $i/speedtest || continue + TIME2=$(date +%s%N) + ELAPSED=$(expr $TIME2 - $TIME) + echo Time: $ELAPSED + if [ $ELAPSED -lt $SPEED ] + then + FASTEST=$i + SPEED=$ELAPSED + fi + done +fi + +echo "Selected mirror: $FASTEST" + +MIRROR=$FASTEST +RELEASE=$(lsb_release -c | cut -f 2) + +# Ensure MIRROR ends with a single trailing slash for Deb822 URIs +case "$MIRROR" in + */) : ;; + *) MIRROR="$MIRROR/";; +esac + +# Use keyring in /usr/share/keyrings +SIGNED_BY="/usr/share/keyrings/trisquel-archive-keyring.gpg" + +# Write Deb822 sources file in the requested structure +cat << EOF > "$SF" +# Trisquel repositories for supported software and updates +Types: deb +URIs: ${MIRROR} +Suites: ${RELEASE} ${RELEASE}-updates ${RELEASE}-security +Components: main +Signed-By: ${SIGNED_BY} + +# Source package repositories +Types: deb-src +URIs: ${MIRROR} +Suites: ${RELEASE} ${RELEASE}-updates ${RELEASE}-security +Components: main +Signed-By: ${SIGNED_BY} + +# Optional backports repository +Enabled: no +Types: deb deb-src +URIs: ${MIRROR} +Suites: ${RELEASE}-backports +Components: main +Signed-By: ${SIGNED_BY} +EOF + +# Keep the legacy file and the pipeline temp file as a single breadcrumb line +printf '%s\n' "$MSG" > "$SAVETO" +: > "$file" + +exit 0 diff --git a/helpers/DATA/ubiquity/patch_changes/000-set_trisquel_default_partman_recipe.patch b/helpers/DATA/ubiquity/patch_changes/000-set_trisquel_default_partman_recipe.patch new file mode 100644 index 0000000..8b6f6cc --- /dev/null +++ b/helpers/DATA/ubiquity/patch_changes/000-set_trisquel_default_partman_recipe.patch @@ -0,0 +1,234 @@ +diff --git a/d-i/source/partman-auto/recipes-alpha/multi b/d-i/source/partman-auto/recipes-alpha/multi +index 186decf7..5916d8ee 100644 +--- a/d-i/source/partman-auto/recipes-alpha/multi ++++ b/d-i/source/partman-auto/recipes-alpha/multi +@@ -10,7 +10,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + method{ format } + format{ } + use_filesystem{ } +diff --git a/d-i/source/partman-auto/recipes-armel-kirkwood/multi b/d-i/source/partman-auto/recipes-armel-kirkwood/multi +index 690676a3..bcdea3fa 100644 +--- a/d-i/source/partman-auto/recipes-armel-kirkwood/multi ++++ b/d-i/source/partman-auto/recipes-armel-kirkwood/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/d-i/source/partman-auto/recipes-armel-orion5x/multi b/d-i/source/partman-auto/recipes-armel-orion5x/multi +index 690676a3..bcdea3fa 100644 +--- a/d-i/source/partman-auto/recipes-armel-orion5x/multi ++++ b/d-i/source/partman-auto/recipes-armel-orion5x/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/d-i/source/partman-auto/recipes-armhf-efikasb/multi b/d-i/source/partman-auto/recipes-armhf-efikasb/multi +index 690676a3..bcdea3fa 100644 +--- a/d-i/source/partman-auto/recipes-armhf-efikasb/multi ++++ b/d-i/source/partman-auto/recipes-armhf-efikasb/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/d-i/source/partman-auto/recipes-hppa/multi b/d-i/source/partman-auto/recipes-hppa/multi +index c984ae28..eabbfbb4 100644 +--- a/d-i/source/partman-auto/recipes-hppa/multi ++++ b/d-i/source/partman-auto/recipes-hppa/multi +@@ -12,7 +12,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext4 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $bootable{ } + method{ format } +diff --git a/d-i/source/partman-auto/recipes-mipsel-loongson-2f/multi b/d-i/source/partman-auto/recipes-mipsel-loongson-2f/multi +index cf0e860a..0eab6089 100644 +--- a/d-i/source/partman-auto/recipes-mipsel-loongson-2f/multi ++++ b/d-i/source/partman-auto/recipes-mipsel-loongson-2f/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/d-i/source/partman-auto/recipes-powerpc-apus/multi b/d-i/source/partman-auto/recipes-powerpc-apus/multi +index 1ac8e5d9..5dd492ce 100644 +--- a/d-i/source/partman-auto/recipes-powerpc-apus/multi ++++ b/d-i/source/partman-auto/recipes-powerpc-apus/multi +@@ -14,7 +14,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/d-i/source/partman-auto/recipes-powerpc-chrp_ibm/multi b/d-i/source/partman-auto/recipes-powerpc-chrp_ibm/multi +index f42943e8..341d40fc 100644 +--- a/d-i/source/partman-auto/recipes-powerpc-chrp_ibm/multi ++++ b/d-i/source/partman-auto/recipes-powerpc-chrp_ibm/multi +@@ -14,7 +14,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/d-i/source/partman-auto/recipes-powerpc-chrp_pegasos/multi b/d-i/source/partman-auto/recipes-powerpc-chrp_pegasos/multi +index d8effcff..b947d8d6 100644 +--- a/d-i/source/partman-auto/recipes-powerpc-chrp_pegasos/multi ++++ b/d-i/source/partman-auto/recipes-powerpc-chrp_pegasos/multi +@@ -7,7 +7,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/d-i/source/partman-auto/recipes-powerpc-powermac_newworld/multi b/d-i/source/partman-auto/recipes-powerpc-powermac_newworld/multi +index 1d3b421b..c213840b 100644 +--- a/d-i/source/partman-auto/recipes-powerpc-powermac_newworld/multi ++++ b/d-i/source/partman-auto/recipes-powerpc-powermac_newworld/multi +@@ -7,7 +7,7 @@ partman-auto/text/multi_scheme :: + filesystem{ hfs } + mountpoint{ /boot/grub } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/d-i/source/partman-auto/recipes-powerpc-powermac_oldworld/multi b/d-i/source/partman-auto/recipes-powerpc-powermac_oldworld/multi +index d8effcff..b947d8d6 100644 +--- a/d-i/source/partman-auto/recipes-powerpc-powermac_oldworld/multi ++++ b/d-i/source/partman-auto/recipes-powerpc-powermac_oldworld/multi +@@ -7,7 +7,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/d-i/source/partman-auto/recipes-powerpc-prep/multi b/d-i/source/partman-auto/recipes-powerpc-prep/multi +index f206800c..43c4774a 100644 +--- a/d-i/source/partman-auto/recipes-powerpc-prep/multi ++++ b/d-i/source/partman-auto/recipes-powerpc-prep/multi +@@ -5,7 +5,7 @@ partman-auto/text/multi_scheme :: + $bootable{ } + method{ prep } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/d-i/source/partman-auto/recipes-sparc/multi b/d-i/source/partman-auto/recipes-sparc/multi +index ed9aec7e..4b950102 100644 +--- a/d-i/source/partman-auto/recipes-sparc/multi ++++ b/d-i/source/partman-auto/recipes-sparc/multi +@@ -14,7 +14,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext2 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/d-i/source/partman-auto/recipes/multi b/d-i/source/partman-auto_/recipes/multi +index b4b70373..d115e4d9 100644 +--- a/d-i/source/partman-auto/recipes/multi ++++ b/d-i/source/partman-auto_/recipes/multi +@@ -20,7 +20,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext4 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/d-i/source/partman-auto/recipes-amd64-efi/multi b/d-i/source/partman-auto_/recipes-amd64-efi/multi +index bbf8aa4e..7fa47d15 100644 +--- a/d-i/source/partman-auto/recipes-amd64-efi/multi ++++ b/d-i/source/partman-auto_/recipes-amd64-efi/multi +@@ -15,7 +15,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext4 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + method{ format } + format{ } +diff --git a/d-i/source/partman-auto/recipes-armhf/multi b/d-i/source/partman-auto_/recipes-armhf/multi +index b3a9e77b..f490e8fd 100644 +--- a/d-i/source/partman-auto/recipes-armhf/multi ++++ b/d-i/source/partman-auto_/recipes-armhf/multi +@@ -9,7 +9,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext4 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } +diff --git a/d-i/source/partman-auto/recipes-ia64/multi b/d-i/source/partman-auto_/recipes-ia64/multi +index 3b120834..2fa16eaa 100644 +--- a/d-i/source/partman-auto/recipes-ia64/multi ++++ b/d-i/source/partman-auto_/recipes-ia64/multi +@@ -5,7 +5,7 @@ partman-auto/text/multi_scheme :: + method{ efi } + format{ } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $primary{ } + method{ format } + format{ } +diff --git a/d-i/source/partman-auto/recipes-ppc64el/multi b/d-i/source/partman-auto_/recipes-ppc64el/multi +index b95319b9..d86962fa 100644 +--- a/d-i/source/partman-auto/recipes-ppc64el/multi ++++ b/d-i/source/partman-auto_/recipes-ppc64el/multi +@@ -15,7 +15,7 @@ partman-auto/text/multi_scheme :: + filesystem{ ext4 } + mountpoint{ /boot } . + +-2000 3500 25000 $default_filesystem ++8000 10000 51200 $default_filesystem + $lvmok{ } + $primary{ } + method{ format } diff --git a/helpers/DATA/ubiquity/patch_changes/006-force_environment_software_gl_for_ubiquity.patch b/helpers/DATA/ubiquity/patch_changes/006-force_environment_software_gl_for_ubiquity.patch new file mode 100644 index 0000000..59707e7 --- /dev/null +++ b/helpers/DATA/ubiquity/patch_changes/006-force_environment_software_gl_for_ubiquity.patch @@ -0,0 +1,14 @@ +diff --git a/bin/ubiquity b/bin/ubiquity +index e3f07a0c..5254f1f7 100755 +--- a/bin/ubiquity ++++ b/bin/ubiquity +@@ -22,6 +22,9 @@ import locale + from operator import attrgetter + import optparse + import os ++# Force software GL for the installer; overridable by environment. (TPH!1804) ++if 'LIBGL_ALWAYS_SOFTWARE' not in os.environ: ++ os.environ['LIBGL_ALWAYS_SOFTWARE'] = '1' + import pwd + import shutil + import subprocess diff --git a/helpers/DATA/ubiquity/patch_changes/007-setup_deb822_mirrors_setup.patch b/helpers/DATA/ubiquity/patch_changes/007-setup_deb822_mirrors_setup.patch new file mode 100644 index 0000000..6fde74a --- /dev/null +++ b/helpers/DATA/ubiquity/patch_changes/007-setup_deb822_mirrors_setup.patch @@ -0,0 +1,27 @@ +diff --git a/d-i/source/apt-setup/generators/01setup b/d-i/source/apt-setup/generators/01setup +index b4b0ea40..c4933286 100755 +--- a/d-i/source/apt-setup/generators/01setup ++++ b/d-i/source/apt-setup/generators/01setup +@@ -5,6 +5,22 @@ set -e + + file="$1" + ++# Ensure ROOT default; allow override ++: "${ROOT:=/target}" ++ ++# If Deb822 sources already exist in the target, don't emit anything, let 99trisquel to take over. ++if [ -d "$ROOT/etc/apt/sources.list.d" ] && ls "$ROOT/etc/apt/sources.list.d/"*.sources >/dev/null 2>&1; then ++ : > "$file" ++ exit 0 ++else ++ # Fallback: add old file as comments (tolerant if missing) ++ if [ -r "$ROOT/etc/apt/sources.list" ]; then ++ sed 's/^/# /' < "$ROOT/etc/apt/sources.list" | sed 's/^# # */# /' > "$file" ++ else ++ : > "$file" ++ fi ++fi ++ + # add old file as comments + sed 's/^/# /' < $ROOT/etc/apt/sources.list | sed 's/^# # */# /' > $file + diff --git a/helpers/DATA/ubuntu-release-upgrader/patch_changes/001-prevent_lxde-trisquel-mini_logging_session_start.patch b/helpers/DATA/ubuntu-release-upgrader/patch_changes/001-prevent_lxde-trisquel-mini_logging_session_start.patch new file mode 100644 index 0000000..f0cbf24 --- /dev/null +++ b/helpers/DATA/ubuntu-release-upgrader/patch_changes/001-prevent_lxde-trisquel-mini_logging_session_start.patch @@ -0,0 +1,82 @@ +diff --git a/DistUpgrade/DistUpgradeQuirks.py b/DistUpgrade/DistUpgradeQuirks.py +index 9423f091..c20e3079 100644 +--- a/DistUpgrade/DistUpgradeQuirks.py ++++ b/DistUpgrade/DistUpgradeQuirks.py +@@ -190,6 +190,7 @@ class DistUpgradeQuirks(object): + """ run right before calculating the dist-upgrade """ + logging.debug("running Quirks.PreDistUpgradeCache") + # self._install_python_is_python2() ++ self._protect_essential_gui() + self._maybe_remove_gpg_wks_server() + self._install_t64_replacement_packages() + self._install_pipewire_audio_on_ubuntu_studio() +@@ -204,6 +205,69 @@ class DistUpgradeQuirks(object): + self._disable_cloud_init() + + # helpers ++ def _is_lxde_system(self): ++ """Return True if LXDE (trisquel-mini) is detected as installed.""" ++ cache = self.controller.cache ++ for name in ("lxsession", "lxpanel", "lxde-core", "trisquel-mini"): ++ try: ++ if name in cache and getattr(cache[name], "is_installed", False): ++ return True ++ except Exception: ++ pass ++ return False ++ ++ def _protect_essential_gui(self): ++ """ ++ Prevent the solver from removing essential GUI session packages ++ (LightDM/LXDE). Only acts on packages that are already present. ++ """ ++ # Skip on non-LXDE systems to avoid touching other desktops (KDE/Xfce, etc.) ++ if not self._is_lxde_system(): ++ logging.debug("protect_essential_gui: not an LXDE system, skipping") ++ return ++ ++ essential = { ++ "lightdm", ++ "lightdm-gtk-greeter", ++ "lxsession", ++ "lxpanel", ++ "lxsession-logout", ++ } ++ cache = self.controller.cache ++ resolver = apt.ProblemResolver(self.controller.cache) ++ logging.info("protect_essential_gui: conservative protection enabled") ++ ++ for name in essential: ++ if name not in cache: ++ # Not in cache (e.g. different desktop), do nothing. ++ continue ++ pkg = cache[name] ++ # Keep package from being considered auto-removable in the future ++ try: ++ if hasattr(pkg, "mark_auto"): ++ pkg.mark_auto(auto=False) ++ except Exception: ++ logging.debug("protect_essential_gui: mark_auto(False) failed for %s", name) ++ # If installed, mark as user-requested and protect in the solver ++ try: ++ if getattr(pkg, "is_installed", False): ++ pkg.mark_install(from_user=True, auto_fix=True) ++ try: ++ resolver.protect(pkg) ++ except Exception: ++ logging.debug("protect_essential_gui: protect() failed for %s", name) ++ except Exception: ++ logging.debug("protect_essential_gui: keep/install failed for %s", name) ++ ++ # Diagnostics: warn if APT still plans to remove any essential package ++ try: ++ to_remove = {p.name for p in cache.get_changes() if getattr(p, "marked_delete", False)} ++ bad = sorted(essential & to_remove) ++ if bad: ++ logging.warning("APT still wants to remove essential GUI packages: %s", ", ".join(bad)) ++ except Exception: ++ pass ++ + def _get_pci_ids(self): + """ return a set of pci ids of the system (using lspci -n) """ + lspci = set() diff --git a/helpers/DATA/ubuntu-release-upgrader/patch_changes/002-prevent_trisquel-sugar_to_fail_dependency_resolve.patch b/helpers/DATA/ubuntu-release-upgrader/patch_changes/002-prevent_trisquel-sugar_to_fail_dependency_resolve.patch new file mode 100644 index 0000000..937587a --- /dev/null +++ b/helpers/DATA/ubuntu-release-upgrader/patch_changes/002-prevent_trisquel-sugar_to_fail_dependency_resolve.patch @@ -0,0 +1,50 @@ +diff --git a/DistUpgrade/DistUpgradeQuirks.py b/DistUpgrade/DistUpgradeQuirks.py +index f7427ac2..51f85b32 100644 +--- a/DistUpgrade/DistUpgradeQuirks.py ++++ b/DistUpgrade/DistUpgradeQuirks.py +@@ -190,6 +190,7 @@ class DistUpgradeQuirks(object): + """ run right before calculating the dist-upgrade """ + logging.debug("running Quirks.PreDistUpgradeCache") + # self._install_python_is_python2() ++ self._t64_transition_helper() + self._protect_essential_gui() + self._maybe_remove_gpg_wks_server() + self._install_t64_replacement_packages() +@@ -205,6 +206,37 @@ class DistUpgradeQuirks(object): + self._disable_cloud_init() + + # helpers ++ def _t64_transition_helper(self): ++ """ ++ Provides a minimal t64 transition focused on GLib and Qt5Core. ++ Marks the t64 variants for installation if the older packages are ++ installed. Idempotent and conservative for initial testing. ++ """ ++ cache = self.controller.cache ++ log = logging.getLogger("DistUpgrade") ++ ++ # Run only if at least one of the target t64 packages is in the cache. ++ if "libglib2.0-0t64" not in cache and "libqt5core5t64" not in cache: ++ log.debug("t64-helper: no target t64 packages in cache; skipping") ++ return ++ ++ pairs = [ ++ ("libglib2.0-0", "libglib2.0-0t64"), ++ ("libqt5core5a", "libqt5core5t64"), ++ ] ++ ++ touched = [] ++ for old, new in pairs: ++ try: ++ if old in cache and cache[old].is_installed and new in cache: ++ cache[new].mark_install(True, True, False) ++ touched.append(f"{old}->{new}") ++ except Exception as e: ++ log.warning("t64-helper: error marking %s->%s: %s", old, new, e) ++ ++ if touched: ++ log.info("t64-helper: touched=%s", ", ".join(touched)) ++ + def _is_lxde_system(self): + """Return True if LXDE (trisquel-mini) is detected as installed.""" + cache = self.controller.cache diff --git a/helpers/DATA/ubuntu-release-upgrader/patch_changes/003-prevent_trisquel_old_versioning_overcome_ecnes_new_version_scheme.patch b/helpers/DATA/ubuntu-release-upgrader/patch_changes/003-prevent_trisquel_old_versioning_overcome_ecnes_new_version_scheme.patch new file mode 100644 index 0000000..85f9166 --- /dev/null +++ b/helpers/DATA/ubuntu-release-upgrader/patch_changes/003-prevent_trisquel_old_versioning_overcome_ecnes_new_version_scheme.patch @@ -0,0 +1,102 @@ +diff --git a/DistUpgrade/DistUpgradeQuirks.py b/DistUpgrade/DistUpgradeQuirks.py +index 243efc14..a63db6bb 100644 +--- a/DistUpgrade/DistUpgradeQuirks.py ++++ b/DistUpgrade/DistUpgradeQuirks.py +@@ -196,6 +196,8 @@ class DistUpgradeQuirks(object): + self._install_t64_replacement_packages() + self._install_pipewire_audio_on_ubuntu_studio() + self._handle_ufw_breaks() ++ cache = self._get_cache() ++ self._prefer_ecne_suffix(cache) + + # individual quirks handler that run *after* the dist-upgrade was + # calculated in the cache +@@ -206,6 +208,88 @@ class DistUpgradeQuirks(object): + self._disable_cloud_init() + + # helpers ++ def _get_cache(self): ++ """ ++ Return the active apt cache used by the upgrader, regardless of how ++ this DistUpgradeQuirks instance was wired in this fork. ++ """ ++ for attr in ("cache", "_cache", "apt_cache"): ++ c = getattr(self, attr, None) ++ if c is not None: ++ return c ++ ctrl = getattr(self, "controller", None) or getattr(self, "_controller", None) ++ if ctrl: ++ for attr in ("cache", "_cache"): ++ c = getattr(ctrl, attr, None) ++ if c is not None: ++ return c ++ return None ++ ++ def _prefer_ecne_suffix(self, cache): ++ """ ++ Force candidate versions to Ecne-style (e.g. '101trisquel1') when the ++ installed version uses the older '+11.0trisquel' scheme. This avoids ++ holding back old packages and enables the intended transition/downgrade. ++ """ ++ import logging ++ import apt_pkg ++ ++ if cache is None or not hasattr(cache, "_depcache"): ++ logging.debug("prefer-ecne-suffix: cache not available, skipping") ++ return ++ ++ changed = 0 ++ depcache = cache._depcache ++ ++ for pkg in cache: ++ # Only act on installed packages with the old '+11.0trisquel' suffix ++ if not getattr(pkg, "is_installed", False): ++ continue ++ inst = pkg.installed ++ if not inst: ++ continue ++ inst_ver = getattr(inst, "version", "") ++ if "+11.0trisquel" not in inst_ver: ++ continue ++ ++ # Find a target version that is trisquel*-style but NOT '+11.0trisquel' ++ target = None ++ for ver in pkg.versions: ++ vstr = getattr(ver, "version", "") ++ if "+11.0trisquel" in vstr: ++ continue ++ if "trisquel" in vstr: ++ target = ver ++ break ++ if not target: ++ continue ++ ++ # Resolve the underlying apt_pkg.Version so we can set it as candidate ++ aptpkg_pkg = pkg._pkg ++ aptpkg_ver = None ++ for v in aptpkg_pkg.version_list: ++ if v.ver_str == target.version: ++ aptpkg_ver = v ++ break ++ if aptpkg_ver is None: ++ continue ++ ++ # Force candidate and request an upgrade/install to pull it in ++ depcache.set_candidate_ver(aptpkg_pkg, aptpkg_ver) ++ try: ++ pkg.mark_upgrade() ++ except Exception: ++ try: ++ pkg.mark_install() ++ except Exception: ++ continue ++ changed += 1 ++ ++ if changed: ++ logging.info("prefer-ecne-suffix: changed packages=%d", changed) ++ else: ++ logging.debug("prefer-ecne-suffix: no candidates changed") ++ + def _t64_transition_helper(self): + """ + Provides a minimal t64 transition focused on GLib and Qt5Core. diff --git a/helpers/DATA/ubuntu-release-upgrader/patch_changes/004-add_helper_to_prevent_mta-postfix_to_be_installed_on_desktop_systems.patch b/helpers/DATA/ubuntu-release-upgrader/patch_changes/004-add_helper_to_prevent_mta-postfix_to_be_installed_on_desktop_systems.patch new file mode 100644 index 0000000..1a22863 --- /dev/null +++ b/helpers/DATA/ubuntu-release-upgrader/patch_changes/004-add_helper_to_prevent_mta-postfix_to_be_installed_on_desktop_systems.patch @@ -0,0 +1,246 @@ +diff --git a/DistUpgrade/DistUpgradeQuirks.py b/DistUpgrade/DistUpgradeQuirks.py +index a63db6bb..c91dff31 100644 +--- a/DistUpgrade/DistUpgradeQuirks.py ++++ b/DistUpgrade/DistUpgradeQuirks.py +@@ -27,6 +27,7 @@ import logging + import os + import pwd + import re ++import errno + import hashlib + import subprocess + import pathlib +@@ -113,7 +113,10 @@ class DistUpgradeQuirks(object): + def PreCacheOpen(self): + """ run before the apt cache is opened the first time """ + logging.debug("running Quirks.PreCacheOpen") +- self._add_apport_ignore_list() ++ if hasattr(self, "_add_apport_ignore_list"): ++ self._add_apport_ignore_list() ++ self._wks_write_pin_if_desktop() ++ self._mta_write_pin_if_desktop() + + # individual quirks handler that run *after* the cache is opened + def ecnePostInitialUpdate(self): +@@ -148,6 +151,8 @@ class DistUpgradeQuirks(object): + self._calculateSnapSizeRequirements() + + def ecnePostUpgrade(self): ++ self._wks_remove_pin() ++ self._mta_remove_pin() + logging.debug("running Quirks.ecnePostUpgrade") + cache = self.controller.cache + if 'snapd' not in cache: +@@ -173,7 +176,8 @@ class DistUpgradeQuirks(object): + def PostCleanup(self): + " run after cleanup " + logging.debug("running Quirks.PostCleanup") +- self._remove_apport_ignore_list() ++ if hasattr(self, "_remove_apport_ignore_list"): ++ self._remove_apport_ignore_list() + + # run right before the first packages get installed + def StartUpgrade(self): +@@ -186,13 +191,24 @@ class DistUpgradeQuirks(object): + + # individual quirks handler that run *right before* the dist-upgrade + # is calculated in the cache ++ # --- WKS hard-block config --- ++ WKS_BLOCK_PREF = "/etc/apt/preferences.d/zz-urug-block-wks.pref" ++ WKS_PACKAGES = ("gpg-wks-server", "gnupg-wks-server") ++ DESKTOP_METAS = ("trisquel", "trisquel-mini", "trisquel-sugar", ++ "trisquel-gnome", "triskel", "trisquel-desktop-common") ++ ++ # --- MTA hard-block config (postfix only, temporary during upgrade) --- ++ MTA_BLOCK_PREF = "/etc/apt/preferences.d/zz-urug-block-mta-postfix.pref" ++ + def PreDistUpgradeCache(self): + """ run right before calculating the dist-upgrade """ + logging.debug("running Quirks.PreDistUpgradeCache") + # self._install_python_is_python2() ++ self._wks_purge_from_cache() ++ self._mta_cancel_selection() + self._t64_transition_helper() + self._protect_essential_gui() +- self._maybe_remove_gpg_wks_server() ++ # self._maybe_remove_gpg_wks_server() + self._install_t64_replacement_packages() + self._install_pipewire_audio_on_ubuntu_studio() + self._handle_ufw_breaks() +@@ -206,8 +222,176 @@ class DistUpgradeQuirks(object): + logging.debug("running Quirks.PostDistUpgradeCache") + self._install_linux_metapackage() + self._disable_cloud_init() ++ self._wks_purge_from_cache() + + # helpers ++ def _dpkg_has(self, pkgname): ++ """ ++ Checks /var/lib/dpkg/status to see if 'pkgname' is installed. ++ Does not depend on apt.Cache(), useful in PreCacheOpen. ++ """ ++ try: ++ with open("/var/lib/dpkg/status", "r", encoding="utf-8", errors="ignore") as f: ++ name = None ++ installed = False ++ for line in f: ++ if line.startswith("Package: "): ++ # New block ++ if name == pkgname and installed: ++ return True ++ name = line.split(":", 1)[1].strip() ++ installed = False ++ elif line.startswith("Status: ") and " installed" in line: ++ if name: ++ installed = True ++ # Last block ++ return (name == pkgname and installed) ++ except FileNotFoundError: ++ return False ++ ++ def _is_desktop_system(self): ++ """ ++ Detects 'desktop' by already installed Trisquel metapackages, ++ without opening apt.Cache(). ++ """ ++ for meta in self.DESKTOP_METAS: ++ if self._dpkg_has(meta): ++ return True ++ return False ++ ++ def _wks_write_pin_if_desktop(self): ++ """ ++ If it's a desktop, write an APT pin that prevents installing/upgrading ++ gpg-wks-server/gnupg-wks-server during the upgrade. ++ """ ++ if not self._is_desktop_system(): ++ logging.debug("wks-pin: no-desktop detected, skipping pin write") ++ return ++ try: ++ os.makedirs(os.path.dirname(self.WKS_BLOCK_PREF), exist_ok=True) ++ content = ( ++ "# Block WKS only during release-upgrade to avoid MTA pull-in\n" ++ "Package: gpg-wks-server\n" ++ "Pin: version *\n" ++ "Pin-Priority: -1000\n\n" ++ "Package: gnupg-wks-server\n" ++ "Pin: version *\n" ++ "Pin-Priority: -1000\n" ++ ) ++ with open(self.WKS_BLOCK_PREF, "w", encoding="utf-8") as f: ++ f.write(content) ++ logging.info("wks-pin: wrote %s", self.WKS_BLOCK_PREF) ++ except Exception as e: ++ logging.warning("wks-pin: failed to write pin: %s", e) ++ ++ def _wks_remove_pin(self): ++ """ Remove the APT pin at the end of the process. """ ++ try: ++ os.unlink(self.WKS_BLOCK_PREF) ++ logging.info("wks-pin: removed %s", self.WKS_BLOCK_PREF) ++ except FileNotFoundError: ++ pass ++ except Exception as e: ++ logging.warning("wks-pin: failed to remove pin: %s", e) ++ ++ def _wks_purge_from_cache(self): ++ """ ++ Ensures that WKS packages are neither installed nor marked ++ for installation/update in the resolver cache. ++ """ ++ cache = self._get_cache() ++ if cache is None: ++ logging.debug("wks-purge: no cache available; skipping") ++ return ++ ++ removed = [] ++ kept = [] ++ for name in self.WKS_PACKAGES: ++ if name not in cache: ++ continue ++ try: ++ pkg = cache[name] ++ if getattr(pkg, "is_installed", False): ++ logging.info("wks-purge: removing %s", name) ++ pkg.mark_delete(purge=True) ++ removed.append(name) ++ elif getattr(pkg, "marked_install", False) or getattr(pkg, "marked_upgrade", False): ++ logging.info("wks-purge: unmark %s (keep)", name) ++ pkg.mark_keep() ++ kept.append(name) ++ except Exception as e: ++ logging.debug("wks-purge: failed processing %s: %s", name, e) ++ ++ if removed: ++ logging.info("wks-purge: marked for removal: %s", ", ".join(sorted(set(removed)))) ++ if kept: ++ logging.info("wks-purge: kept (unmarked): %s", ", ".join(sorted(set(kept)))) ++ ++ def _mta_write_pin_if_desktop(self): ++ """ ++ If this is a desktop system and *postfix* is not already installed, ++ write a temporary APT pin to block postfix from being pulled in ++ (e.g. via WKS or virtual default-mta) during the release-upgrade. ++ Removed at the end of the upgrade. ++ """ ++ try: ++ if not self._is_desktop_system(): ++ return ++ if self._dpkg_has("postfix"): ++ return ++ os.makedirs(os.path.dirname(self.MTA_BLOCK_PREF), exist_ok=True) ++ content = ( ++ "# Block postfix only during release-upgrade to avoid unwanted MTA install\n" ++ "Package: postfix\n" ++ "Pin: version *\n" ++ "Pin-Priority: -1000\n" ++ ) ++ with open(self.MTA_BLOCK_PREF, "w", encoding="utf-8") as f: ++ f.write(content) ++ logging.info("mta-pin: wrote %s", self.MTA_BLOCK_PREF) ++ except Exception as e: ++ logging.warning("mta-pin: failed to write pin: %s", e) ++ ++ def _mta_remove_pin(self): ++ "Remove the temporary postfix APT pin created for the upgrade." ++ try: ++ os.unlink(self.MTA_BLOCK_PREF) ++ logging.info("mta-pin: removed %s", self.MTA_BLOCK_PREF) ++ except FileNotFoundError: ++ pass ++ except Exception as e: ++ logging.warning("mta-pin: failed to remove pin: %s", e) ++ ++ def _mta_cancel_selection(self): ++ """ ++ Safety net: if postfix somehow ended up selected for install/upgrade ++ in the resolver cache, cancel that selection (keep state). ++ """ ++ cache = self._get_cache() ++ if cache is None or "postfix" not in cache: ++ return ++ try: ++ pkg = cache["postfix"] ++ if getattr(pkg, "marked_install", False) or getattr(pkg, "marked_upgrade", False): ++ logging.info("mta-pin: unmark install/upgrade for postfix") ++ pkg.mark_keep() ++ except Exception as e: ++ logging.debug("mta-pin: unable to unmark postfix: %s", e) ++ for n in self.WKS_PACKAGES: ++ if n not in cache: ++ continue ++ try: ++ pkg = cache[n] ++ if getattr(pkg, "is_installed", False): ++ logging.info("wks-purge: removing %s", n) ++ # mark_delete(purge=True) if you want to purge conffiles ++ pkg.mark_delete() ++ elif getattr(pkg, "marked_install", False) or getattr(pkg, "marked_upgrade", False): ++ logging.info("wks-purge: unmark %s (keep)", n) ++ pkg.mark_keep() ++ except Exception as e: ++ logging.info("wks-purge: failed processing %s: %s", n, e) ++ + def _get_cache(self): + """ + Return the active apt cache used by the upgrader, regardless of how diff --git a/helpers/DATA/yt-dlp/patch_changes/000-add_cookies_support_for_firefox_based_browser_abrowser.patch b/helpers/DATA/yt-dlp/patch_changes/000-add_cookies_support_for_firefox_based_browser_abrowser.patch index ddcb270..7f3b9ee 100644 --- a/helpers/DATA/yt-dlp/patch_changes/000-add_cookies_support_for_firefox_based_browser_abrowser.patch +++ b/helpers/DATA/yt-dlp/patch_changes/000-add_cookies_support_for_firefox_based_browser_abrowser.patch @@ -27,13 +27,11 @@ index 5675445a..7afd324b 100644 elif browser_name == 'safari': return _extract_safari_cookies(profile, logger) elif browser_name in CHROMIUM_BASED_BROWSERS: -@@ -124,15 +124,15 @@ def extract_cookies_from_browser(browser_name, profile=None, logger=YDLLogger(), - raise ValueError(f'unknown browser: {browser_name}') +@@ -127,14 +127,14 @@ def extract_cookies_from_browser(browser_name, profile=None, logger=YDLLogger(), + def _extract_firefox_cookies(profile, container, logger): + MAX_SUPPORTED_DB_SCHEMA_VERSION = 16 - --def _extract_firefox_cookies(profile, container, logger): - logger.info('Extracting cookies from firefox') -+def _extract_firefox_cookies(profile, container, logger, browser_name): + logger.info(f'Extracting cookies from {browser_name}') if not sqlite3: - logger.warning('Cannot extract cookies from firefox without sqlite3 support. ' @@ -74,16 +72,13 @@ index 5675445a..7afd324b 100644 cursor.execute( 'SELECT host, name, value, path, expiry, isSecure FROM moz_cookies WHERE originAttributes LIKE ? OR originAttributes LIKE ?', (f'%userContextId={container_id}', f'%userContextId={container_id}&%')) -@@ -186,14 +186,14 @@ def _extract_firefox_cookies(profile, container, logger): +@@ -194,11 +194,11 @@ def _extract_firefox_cookies(profile, container, logger): path=path, path_specified=bool(path), secure=is_secure, expires=expiry, discard=False, comment=None, comment_url=None, rest={}) jar.set_cookie(cookie) - logger.info(f'Extracted {len(jar)} cookies from firefox') + logger.info(f'Extracted {len(jar)} cookies from {browser_name}') return jar - finally: - if cursor is not None: - cursor.connection.close() -def _firefox_browser_dirs(): diff --git a/helpers/DATA/yt-dlp/patch_changes/001-fix_broken_table.patch b/helpers/DATA/yt-dlp/patch_changes/001-fix_broken_table.patch new file mode 100644 index 0000000..5fd5188 --- /dev/null +++ b/helpers/DATA/yt-dlp/patch_changes/001-fix_broken_table.patch @@ -0,0 +1,13 @@ +diff --git a/pyproject.toml b/pyproject.toml +index f2211ef1..313fde99 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -23,7 +23,7 @@ keywords = [ + "yt-dlp", + ] + license = "Unlicense" +-license-files = ["LICENSE"] ++license-files = { paths = ["LICENSE"] } + classifiers = [ + "Topic :: Multimedia :: Video", + "Development Status :: 5 - Production/Stable", diff --git a/helpers/config b/helpers/config index b39e4e7..7289ef1 100755 --- a/helpers/config +++ b/helpers/config @@ -81,12 +81,35 @@ pkgversion(){ replace(){ find ${@:3} -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' -execdir /bin/sed --follow-symlinks -i s^"$1"^"$2"^g {} \; } +changelog_multiline() { + local msg="$1" + local version="${2:-$FULLVERSION}" + local dist="${3:-$REPO}" + + # Iniciar changelog si la versión aún no está + if ! grep -q "$version" debian/changelog 2>/dev/null; then + dch -v "$version" -D "$dist" "" + fi + + local count=0 + + while IFS= read -r line || [ -n "$line" ]; do + dch -a "$line" + count=$((count + 1)) + done <<< "$msg" + + if [ "$count" -gt 0 ]; then + dch -r "" + fi +} changelog(){ head -n 1 debian/changelog | grep -q $UPSTREAM-security && REPO=$CODENAME-security || REPO=$CODENAME [ "$SECURITY" = true ] && REPO=${CODENAME}-security [ "$BACKPORT" = true ] || [ "$BACKPORTS" = true ] && REPO=${CODENAME}-backports -#Name convention issue "+" breaking packages build like console-setup, using "-" instead. -echo | dch -D $REPO -v $FULLVERSION "$1" + + local msg="$1" + + changelog_multiline "$msg" "$FULLVERSION" "$REPO" # Make sure the changelog file is identical between archs /bin/sed "/-- Desarrollo/s/.*/ -- Desarrollo CMXSL $DATE/" -i debian/changelog @@ -196,7 +219,7 @@ cd source UPSTREAMVERSION=$(dpkg-parsechangelog --show-field Version) -export FULLVERSION=$(dpkg-parsechangelog --show-field Version)cmxsl${VERSION} +export FULLVERSION=$(dpkg-parsechangelog --show-field Version)trisquel${VERSION}cmxsl${CMXSLVER} # Use 3.0 (native) deb source format [ -f debian/source/format ] && echo "3 (native)" > debian/source/format @@ -209,7 +232,7 @@ package(){ # Make sure the series file is formated correctly after removals if [ -f debian/patches/series ]; then - grep -q [a-z] debian/patches/series || echo -n > debian/patches/series + grep -q [a-z] debian/patches/series || : > debian/patches/series fi if [ 1$QUILT != 1skip ]; then @@ -280,6 +303,7 @@ fi } remove_patch(){ + echo "> Removing patch $1 in progress..." rm "$(find */patches -name "$1")" sed -i "/$1/d" debian/patches/series } diff --git a/helpers/make-akregator b/helpers/make-akregator index a40118a..f9a613b 100644 --- a/helpers/make-akregator +++ b/helpers/make-akregator @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2022 Luis Guzmán +# Copyright (C) 2025 Luis Guzmán # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,14 +17,16 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=4 +VERSION=5 . ./config # Patch trisquel feeds -patch --no-backup-if-mismatch src/akregator_part.cpp < $DATA/trisquel_feeds.patch +patch_p1 $DATA/trisquel_feeds.patch +# Remove upstream one. +remove_patch kubuntu_debianize_akregator_default.diff -#Prevent ppc64el arch since qtwebengine is not build for ppc64el either. +# Prevent ppc64el arch since qtwebengine is not build for ppc64el either. sed -i 's|Architecture: any|Architecture: amd64 arm64 armhf i386|g' debian/control changelog "Patched feeds for Trisquel" diff --git a/helpers/make-apparmor b/helpers/make-apparmor index 6fc0fe6..83edbc6 100644 --- a/helpers/make-apparmor +++ b/helpers/make-apparmor @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2024 Luis Guzmán +# Copyright (C) 2025 Luis Guzmán # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=3 +VERSION=4 . ./config @@ -28,17 +28,27 @@ VERSION=3 # https://ubuntu.com/blog/ubuntu-23-10-restricted-unprivileged-user-namespaces cp profiles/apparmor.d/{thunderbird,icedove} -cp profiles/apparmor.d/{firefox,abrowser} -patch_p1 $DATA/002-add-unconfined-profile-firefox-icedove.patch +for i in abrowser icecat +do + cp profiles/apparmor.d/firefox profiles/apparmor.d/$i +done +patch_p1 $DATA/002-add-unconfined-profile-firefox-icedove-icecat.patch -cp profiles/apparmor/profiles/extras/{firefox,abrowser} -patch_p1 $DATA/003-add-extra-abrowser-profile.patch +for i in abrowser icecat +do + cp profiles/apparmor/profiles/extras/firefox \ + profiles/apparmor/profiles/extras/$i +done +patch_p1 $DATA/003-add-extra-profile-for-abrowser-icecat.patch # Note: look for updates on abrowser.sh profile on each helper/patch change: patch_p1 $DATA/004-update-profile-extra-firefox-sh.patch # Update trasnmission apparmor profile to fix daemon management patch_p1 $DATA/005-update_trasnmission_profile_for_daemon_service_fix.patch -changelog "Apply fix LP:2003702 for pidgin like clients. | Add unconfined profiles for firefox and icedove. | Improve transmission daemon service profile to improve management." +changelog "Apply fix LP:2003702 for pidgin like clients. +Add unconfined profiles for firefox and icedove. +Improve transmission daemon service profile to improve management. +Add custom profiles for icecat" package diff --git a/helpers/make-apt-setup b/helpers/make-apt-setup index 6324199..eef82c8 100644 --- a/helpers/make-apt-setup +++ b/helpers/make-apt-setup @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2022 Luis Guzman +# Copyright (C) 2025 Luis Guzman # Copyright (C) 2009-2017 Ruben Rodriguez # # This program is free software; you can redistribute it and/or modify @@ -18,18 +18,12 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=3 +VERSION=5 EXTERNAL='deb-src http://ftp.debian.org/debian trixie main' -REPOKEY=0E98404D386FA1D9 +REPOKEY=78DBA3BC47EF2265 NETINST=true . ./config -cat << EOF > debian/rules -#! /usr/bin/make -f -%: - dh \$@ -EOF - find debian -name apt-mirror-setup.templates-ubuntu | xargs -r rm # Remove multiarch support @@ -86,124 +80,23 @@ rm generators/9[1-9]* generators/50mirror find generators -name 50mirror.ubuntu | xargs -r rm sed -i '/generators\/9[1-9]*/d' debian/apt-setup-udeb.install -echo "generators/50mirror.trisquel usr/lib/apt-setup/generators -release-files/archive.trisquel.org usr/share/apt-setup/release-files" > debian/apt-mirror-setup.install +# Set custom scripts +cp $DATA/50mirror.trisquel generators/ +cp $DATA/99deb822-breadcrumb generators/ +cp $DATA/93trisquel-sources-clean finish-install.d/ -echo '#!/bin/sh -set -e - -. /usr/share/debconf/confmodule - -file="$1" - -log() { - logger -t apt-setup "$@" -} -warning() { - log "warning: $@" -} - -# Ask if a mirror should be used if the base system can be installed from CD -if [ -e /cdrom/.disk/base_installable ] || [ "$OVERRIDE_BASE_INSTALLABLE" ]; then - if ! search-path choose-mirror; then - warning "choose-mirror is not available; cannot offer network mirror" - exit 1 - fi - - # Default to false if no network selected in netcfg - if db_get netcfg/dhcp_options && \ - [ "$RET" = "Do not configure the network at this time" ]; then - use_mirror=false - fi - - # Set default if no value (see Debian mirror generator) - db_get apt-setup/use_mirror - [ "$RET" ] || db_set apt-setup/use_mirror true - - # Text is variable for Debian - db_metaget apt-mirror/use/netinst_old description - db_subst apt-setup/use_mirror EXPLANATION "$RET" - - db_input medium apt-setup/use_mirror || [ $? -eq 30 ] - db_go # or exit 10 - - db_get apt-setup/use_mirror - if [ "$RET" = false ]; then - exit 1 - fi - - if db_get cdrom/codename && [ "$RET" ]; then - db_set mirror/codename $RET - fi - if db_get cdrom/suite && [ "$RET" ]; then - db_set mirror/suite $RET - fi - choose-mirror -n # no progress bar -fi - -db_input low apt-setup/backports || true - -dists="main" - -db_get mirror/protocol -protocol="$RET" -db_get mirror/codename -codename="$RET" -db_get mirror/$protocol/hostname -hostname="$RET" -db_get mirror/$protocol/directory -directory="/${RET#/}" - -if [ "$protocol" = http ]; then - db_get mirror/$protocol/proxy - proxy="$RET" - if [ -n "$proxy" ]; then - if ! grep -iq "Acquire::$protocol::Proxy" $ROOT/etc/apt/apt.conf.new; then - echo "Acquire::$protocol::Proxy \"$proxy\";" >> $ROOT/etc/apt/apt.conf.new - fi - fi -fi - - -cat > $file <> debian/apt-setup-udeb.install +finish-install.d/93trisquel-sources-clean usr/lib/finish-install.d EOF -# Even if the backports repository is not enabled, we write example lines for -# it. -echo >> $file -if db_get apt-setup/backports && [ "$RET" = true ]; then - COMMENT= -else - cat >> $file < debian/apt-mirror-setup.install +generators/50mirror.trisquel usr/lib/apt-setup/generators +generators/99deb822-breadcrumb usr/lib/apt-setup/generators +release-files/archive.trisquel.org usr/share/apt-setup/release-files EOF - COMMENT="# " -fi -cat >> $file < generators/50mirror.trisquel #sed '/The partner/,/^*/d; s/services-select-ubuntu/services-select-trisquel/' -i debian/apt-setup-udeb.templates sed 's/services-select/services-select-trisquel/' -i debian/apt-setup-udeb.templates -chmod 755 generators/50mirror.trisquel - changelog "Rebranded and adapted for Trisquel" package diff --git a/helpers/make-base-installer b/helpers/make-base-installer index 6b8542b..9f095ad 100644 --- a/helpers/make-base-installer +++ b/helpers/make-base-installer @@ -18,13 +18,11 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=0.10 +VERSION=1 EXTERNAL='deb-src http://ftp.debian.org/debian trixie main' -REPOKEY=0E98404D386FA1D9 +REPOKEY=78DBA3BC47EF2265 NETINST=true -#THIS IS AN TESTING RELEASE REMOVE THIS LABEL WHEN COMPLETE - . ./config cp $DATA/archs/* kernel/ @@ -95,5 +93,5 @@ EOF # Disable i386 sed -i "/ARCHES =/s|i386 ||" kernel/Makefile -changelog "Rebranded and adapted for Trisquel - TESTING (remove when complete)" +changelog "Rebranded and adapted for Trisquel" package diff --git a/helpers/make-caja b/helpers/make-caja new file mode 100644 index 0000000..cead959 --- /dev/null +++ b/helpers/make-caja @@ -0,0 +1,29 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 + +. ./config + +# Debian MATE and Ubuntu Mate both show System Tools, we don't, so we customize it. +sed -i "s|^NoDisplay=true|#NoDisplay=true|" data/caja.desktop.in.in + +changelog "Enable display caja desktop for Trisquel menu" + +package diff --git a/helpers/make-casper b/helpers/make-casper index 78b37a2..831c376 100644 --- a/helpers/make-casper +++ b/helpers/make-casper @@ -1,7 +1,7 @@ #!/bin/sh # # Copyright (C) 2012-2025 Ruben Rodriguez -# Copyright (C) 2023 Luis Guzmán +# Copyright (C) 2025 Luis Guzmán # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=22 +VERSION=26 . ./config @@ -40,13 +40,13 @@ rm scripts/casper-bottom/33enable_apport_crashes sed "s/cut/cut -d: -f2- | cut/" -i scripts/casper-functions sed "s/head -n1/sed -n 1p/" -i scripts/casper-functions -# Set trisquel isos as default suggestion. -patch --no-backup-if-mismatch -p1 < $DATA/set_trisquel_iso_suggestion.patch +# Apply custom trisquel patches +apply_patch_changes -# Enable abrowser apparmor profile -cp $DATA/35apparmor_abrowser scripts/casper-bottom -chmod 755 scripts/casper-bottom/35apparmor_abrowser +# Enable apparmor profiles for live even on installation +cp $DATA/36apparmor_live scripts/casper-bottom +chmod 755 scripts/casper-bottom/36apparmor_live -changelog "Compiled for Trisquel" +changelog "Compiled and customized for Trisquel enviroment." package diff --git a/helpers/make-debconf b/helpers/make-debconf new file mode 100644 index 0000000..3bfde9c --- /dev/null +++ b/helpers/make-debconf @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 + +. ./config + +apply_patch_changes + +changelog "Add undef guard for Template.pm and Cache.pm" + +package diff --git a/helpers/make-debian-installer b/helpers/make-debian-installer index 2c6fcb2..45bcf0b 100644 --- a/helpers/make-debian-installer +++ b/helpers/make-debian-installer @@ -18,9 +18,9 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=18.10.testing +VERSION=20 EXTERNAL='deb-src http://ftp.debian.org/debian trixie main' -REPOKEY=0E98404D386FA1D9 +REPOKEY=6ED0E7B82643E131 NETINST=true HWEKR=6.8 @@ -123,7 +123,7 @@ sed -i 's|\$platform-signed/grub|\$platform/monolithic/grub|' build/util/efi-ima sed -i 's|\$efi_name-installer.efi|\$efi_name.efi|' build/util/efi-image # enable experimental ChromeOS devices support with depthcharge -patch_p1 $DATA/005_customize-chromeos-devices-build.patch +#patch_p1 $DATA/005_customize-chromeos-devices-build.patch ##EO-TODO rm -r build/boot/artwork/11-homeworld @@ -184,7 +184,7 @@ echo "Remove unused modules from d-i pkg-list" grep -rl acpi-modules- build/pkg-lists/ |xargs -r sed -i '/acpi-modules-/d' grep -rl cdrom-core-modules- build/pkg-lists/ |xargs -r sed -i '/cdrom-core-modules-/d' grep -rl cdebconf-gtk-entropy build/config/ | xargs -r sed -i 's/cdebconf-gtk-entropy//' -patch_p1 $DATA/007-remove_graphical_options_from_netinstall.patch +apply_patch_changes # replace references to the OS as 'Linux' with 'GNU/Linux' match_rxs=( # ASSERT: aligns with '$replace_rxs' diff --git a/helpers/make-finish-install b/helpers/make-finish-install index b6d37ca..f857337 100644 --- a/helpers/make-finish-install +++ b/helpers/make-finish-install @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2022 Luis Guzmán +# Copyright (C) 2025 Luis Guzmán # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,13 +23,16 @@ # such packages from Debian in order to build the required udeb packages. ## -VERSION=1 +VERSION=3 EXTERNAL='deb-src http://ftp.debian.org/debian trixie main' -REPOKEY=0E98404D386FA1D9 +REPOKEY=6ED0E7B82643E131 NETINST=true . ./config apply_patch_changes +# Add splash to desktop environments installations +cp $DATA/09trisquel-uefi-splash finish-install.d/ + changelog "Fetch and build as udeb dependency for debian-installer." package diff --git a/helpers/make-firefox b/helpers/make-firefox index 9571bc2..226724a 100644 --- a/helpers/make-firefox +++ b/helpers/make-firefox @@ -19,7 +19,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=123 +VERSION=126 EXTERNAL='deb-src http://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $UPSTREAM main' REPOKEY=9BDB3D89CE49EC21 @@ -29,7 +29,7 @@ REPOKEY=9BDB3D89CE49EC21 GLEAN_CONF_RS_INITIAL=$(sha256sum third_party/rust/glean/src/configuration.rs|awk '{print$1}') # GNUZILLA ADDON REPLACEMENT OLD_WEB_DEV_URL="https://addons.mozilla.org/firefox/collections/mozilla/webdeveloper/" -WEB_DEV_URL="https://gnuzilla.gnu.org/mozzarella/category.php?id=web-development" +WEB_DEV_URL="https://gnuzilla.gnu.org/category.php?id=web-development" rm debian/control sed "s|Safe and easy web browser from Mozilla|Safe and easy web browser from Mozilla by Trisquel|" \ @@ -48,7 +48,7 @@ BAP_FirefoxJs=browser/app/profile/firefox.js sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new Map\([[""]]\);' -i browser/extensions/newtab/lib/DefaultSites.sys.mjs sed '/"showSponsored"/,/value/s/value: true/value: false/' -i $ActivityStream sed '/"telemetry"/,/value/s/value: true/value: false/' -i $ActivityStream -sed '/"section.highlights.includePocket"/,/value/s/value: true/value: false/' -i $ActivityStream +#141#sed '/"section.highlights.includePocket"/,/value/s/value: true/value: false/' -i $ActivityStream sed '/"telemetry.structuredIngestion.endpoint"/,/value/s/value: .*/value: ""/' -i $ActivityStream sed '/read_more_endpoint/,+1s/http.*/",/' -i $ActivityStream sed '/stories_endpoint/s/getpocket.cdn.mozilla.net/127.0.0.1/' -i $ActivityStream @@ -136,7 +136,7 @@ sed -i 's|\(pref("media\.gmp-widevinecdm-l1\.chromium-guid", \)"[^"]*"|\1""|' $B sed -i 's|\(pref("media\.gmp-widevinecdm\.chromium-guid", \)"[^"]*"|\1""|' $BAP_FirefoxJs # Replace mozilla url addons button -sed -i '/extensions.getAddons.link.url/s|https://addons.mozilla.org/%LOCALE%/firefox/|https://gnuzilla.gnu.org/mozzarella/|' $BAP_FirefoxJs +sed -i '/extensions.getAddons.link.url/s|https://addons.mozilla.org/%LOCALE%/firefox/|https://gnuzilla.gnu.org/|' $BAP_FirefoxJs # Update third_party/rust/glean/src/configuration.rs sha256sum at third_party/rust/glean/.cargo-checksum.json GLEAN_CONF_RS_MODIFIED=$(sha256sum third_party/rust/glean/src/configuration.rs|awk '{print$1}') @@ -264,7 +264,7 @@ for i in $(find . -name brandings.ftl) do /bin/sed -i '/firefoxview-brand-name/s|Firefox View|Abrowser View|' $i /bin/sed -i '/firefox-home-brand-name/s|Firefox Home|Abrowser Home|' $i - sed -i 's|= Firefox |= |' $i + /bin/sed -i 's|= Firefox |= |' $i done # Disable preprocessor @@ -425,7 +425,7 @@ grep -lr addons-help toolkit/mozapps/extensions/ | xargs -r sed -i 's|addons-hel sed -i "/browser.discovery.sites/s|addons.mozilla.org|gnuzilla.gnu.org|" $BAP_FirefoxJs sed -i "/lightweightThemes.getMoreURL/s|https://addons.mozilla.org/.*themes||" $BAP_FirefoxJs -#Fixes by patch on source, see DATA/firefox/patches for more info. +# Fixes by patch on source, see DATA/firefox/patch_changes for more info. apply_patch_changes # Postinst script to manage profile migration and system links diff --git a/helpers/make-freecad b/helpers/make-freecad new file mode 100644 index 0000000..4c46229 --- /dev/null +++ b/helpers/make-freecad @@ -0,0 +1,33 @@ +#!/bin/sh +# +# Copyright (C) 2025 Kurt Kremitzki +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +VERSION=1 + +# FreeCAD was not present in Debian Testing when Ubuntu 24.04 was released; +# jump forward to pull the version from 24.10 +EXTERNAL='deb-src http://archive.ubuntu.com/ubuntu oracular universe' + +. ./config + +changelog "Package freecad for trisquel" +# Disable patches needed for Ubuntu 24.10 versions +remove_patch "0030-octt78.patch" +remove_patch "3000-vtk9.3.patch" +# Remove OpenCASCADE version pin associated with previous patch +sed -i 's/ (>= 7.8.1+dfsg1)//' debian/control + +package diff --git a/helpers/make-grub-installer b/helpers/make-grub-installer index c4d6b34..4c26ea2 100644 --- a/helpers/make-grub-installer +++ b/helpers/make-grub-installer @@ -18,10 +18,9 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -#VERSION=3 -VERSION=0.10 +VERSION=4 EXTERNAL='deb-src http://ftp.debian.org/debian trixie main' -REPOKEY=0E98404D386FA1D9 +REPOKEY=6ED0E7B82643E131 NETINST=true . ./config @@ -30,28 +29,8 @@ replace grub-efi-amd64-signed grub-efi-amd64 sed 's/shim-signed/shim/' -i grub-installer -cat << EOF | patch --no-backup-if-mismatch -p1 -diff -ru a/grub-installer b/grub-installer ---- a/grub-installer 2022-11-25 19:04:53.765346384 -0500 -+++ b/grub-installer 2022-11-25 19:16:10.042175329 -0500 -@@ -508,8 +508,12 @@ - grub-efi-ia32-bin grub-efi-ia32 - ;; - grub-efi*) -+ export DEBIAN_PRIORITY=critical -+ export DEBIAN_FRONTEND=noninteractive -+ unset DEBIAN_HAS_FRONTEND -+ unset DEBCONF_REDIR - log-output -t grub-installer \$chroot \$ROOT dpkg -P \\ -- grub grub-legacy grub-pc-bin grub-pc -+ grub grub-legacy grub-pc-bin grub-pc grub-gfxpayload-lists - ;; - esac - -EOF - -# Apply newer fixes over stable release (bookworm) using git patches. -#apply_patch_changes +# Apply patches for this release +apply_patch_changes changelog "Remove grub-efi-amd64-signed dependency. | Non-fatal fail if mkdir efivars fails." diff --git a/helpers/make-grub2 b/helpers/make-grub2 index 4a805f7..d7649dc 100644 --- a/helpers/make-grub2 +++ b/helpers/make-grub2 @@ -19,17 +19,13 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=9 +VERSION=10 COMPONENT=main DEPENDS=base-files . ./config -# http://grub.johnlane.ie/ -## updated to 2.04-1 on https://aur.archlinux.org/packages/grub-luks-keyfile/ -for i in $DATA/*.patch; do - patch_p1 $i -done +apply_patch_changes # Remove patch renaming GNU/Linux as default distributor. remove_patch ubuntu-zfs-mkconfig-ubuntu-distributor.patch diff --git a/helpers/make-grub2-unsigned b/helpers/make-grub2-unsigned index 81835ee..8f82218 100644 --- a/helpers/make-grub2-unsigned +++ b/helpers/make-grub2-unsigned @@ -19,17 +19,13 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=9 +VERSION=10 COMPONENT=main DEPENDS=base-files . ./config -# http://grub.johnlane.ie/ -## updated to 2.04-1 on https://aur.archlinux.org/packages/grub-luks-keyfile/ -for i in $DATA/*.patch; do - patch_p1 $i -done +apply_patch_changes # Remove patch renaming GNU/Linux as default distributor. remove_patch ubuntu-zfs-mkconfig-ubuntu-distributor.patch diff --git a/helpers/make-gtk+3.0 b/helpers/make-gtk+3.0 new file mode 100644 index 0000000..d343e86 --- /dev/null +++ b/helpers/make-gtk+3.0 @@ -0,0 +1,31 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 + +. ./config + +# TODO: Keep an eye on this final fix to match changes accordingly. +# - 000-fix_tooltip_gtk+3.0_lxde.patch +# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/8216 +apply_patch_changes + +changelog "Apply fix for tooltip on lxde / trisquel-mini." + +package diff --git a/helpers/make-hplip b/helpers/make-hplip index 266b8d7..899101d 100644 --- a/helpers/make-hplip +++ b/helpers/make-hplip @@ -2,6 +2,7 @@ # # Copyright (C) 2011 MPA # Copyright (C) 2013-2021 Ruben Rodriguez +# Copyright (C) 2025 Luis Guzmán # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,7 +19,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=3 +VERSION=4 # note, we need version 3.20.6 or higher, the binary plugin requirement # was reworked on that version. @@ -110,6 +111,10 @@ override_dh_missing: dh_missing --list-missing RULES +# Change CRLF to LF to avoid issues. +sed -i 's/\r$//' installer/distros.dat +apply_patch_changes + changelog "Removed printers with propietary drivers" package diff --git a/helpers/make-icecat b/helpers/make-icecat new file mode 100644 index 0000000..d06939e --- /dev/null +++ b/helpers/make-icecat @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 +EXTERNAL="deb-src http://repos.cmxsl.org/ecne ecne main" +REPOKEY=3FFC4B92F7FFB890 + +. ./config + +changelog "Imported into Trisquel 12 - ecne" + +package diff --git a/helpers/make-kubuntu-settings b/helpers/make-kubuntu-settings index b18a849..fecc25c 100644 --- a/helpers/make-kubuntu-settings +++ b/helpers/make-kubuntu-settings @@ -18,7 +18,7 @@ # #STAGE-5-DESKTOP|ARTWORK -VERSION=12.1 +VERSION=14 . ./config @@ -28,9 +28,11 @@ SUFFIX_ARTWORK=".jpg" # Rebrand logo rm desktop/usr-share/kubuntu-circle-128.png +rm desktop/usr-share/kubuntu*.svg cp $DATA/TrisquelLogo.png desktop/usr-share/ cp $DATA/TrisquelLogo.png desktop/kubuntu-logo.png cp $DATA/face.icon desktop/sddm/themes/kubuntu/faces/.face.icon +cp $DATA/usr-share/* desktop/usr-share/ sed 's/kubuntu-circle-128\.png/TrisquelLogo\.png/' -i $(find -name 'kcm-about-distrorc') sed '/plymouth-theme-kubuntu-logo/,$d; /ttf-ubuntu/d' -i debian/control @@ -127,7 +129,7 @@ Theme=breeze name=breeze-dark [Wallpaper] -Image=Aramo +Image=$CURRENT_RELEASE [Desktop][org.kde.plasma.desktop] Containment=org.kde.plasma.folder @@ -208,10 +210,14 @@ cp $DATA/start.svgz desktop/theme/desktoptheme/triskel/icons/start.svgz cp $DATA/fullscreenpreview.jpg $DATA/preview.png desktop/theme/look-and-feel/org.triskel.desktop/contents/previews/ sed -i "s|TriskelLight|$CURRENT_RELEASE|" desktop/sddm/themes/triskel/theme.conf sed -i "/background/s|.png|$SUFFIX_ARTWORK|" desktop/sddm/themes/triskel/theme.conf +sed -i "/trisquel.info/s|feature-tour/|wiki/$CODENAME|" desktop/plasma/plasma-welcome-extra-pages/01-Kubuntu.qml # Use regular task manager instead of icon-only version sed 's/plasma.icontasks/plasma.taskmanager/' -i desktop/theme/layout-templates/org.triskel.desktop.defaultPanel/contents/layout.js +# Apply patches +apply_patch_changes + changelog "Adapted for Triskel" package diff --git a/helpers/make-language-selector b/helpers/make-language-selector index 6e3c006..9240819 100644 --- a/helpers/make-language-selector +++ b/helpers/make-language-selector @@ -1,5 +1,6 @@ #!/bin/sh # +# Copyright (C) 2025 Luis Guzmán # Copyright (C) 2011 Rubén Rodríguez # # This program is free software; you can redistribute it and/or modify @@ -17,7 +18,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=3 +VERSION=4 COMPONENT=main . ./config @@ -27,31 +28,11 @@ echo "Aymara;1;aym;aym_PE.UTF-8;aym;PE;aym_PE:aym:en_GB:en;kbd=lat0-sun16(utf8)" echo "quz:quz_PE" >> ./data/langcode2locale echo "aym:aym_PE" >> ./data/langcode2locale -# Add icedove and abrowser to the supported language-selector apps. -cat << EOF | patch --no-backup-if-mismatch -p1 -diff --git a/data/pkg_depends b/data/pkg_depends -index 2ddc062..a81f854 100644 ---- a/data/pkg_depends -+++ b/data/pkg_depends -@@ -11,13 +11,14 @@ tr::gvfs:language-pack-gnome- - # Format: %LCODE% or %LCODE%-%CCODE% - tr::libreoffice-common:libreoffice-l10n- - tr::libreoffice-common:libreoffice-help- --tr::thunderbird:thunderbird-locale- -+tr::icedove:icedove-locale- -+tr::abrowser:abrowser-locale- - tr::lightning-extension:lightning-extension-locale- - tr::sunbird:sunbird-locale- - tr::sword-text-gerlut1545:sword-language-pack- - tr::gimp:gimp-help- - tr::evolution:evolution-documentation- --tr::chromium-browser:chromium-browser-l10n -+tr::ungoogled-chromium:ungoogled-chromium-l10n - tr::sylpheed:sylpheed-i18n - tr::amarok:amarok-help- - tr::gnome-user-docs:gnome-user-docs- -EOF +apply_patch_changes -changelog "Added quz and aym locales | Added support for abrowser and icedove." +changelog "Added quz and aym locales +Added support for abrowser and icedove +Added support for ungoogled-chromium +Added support for icecat" package diff --git a/helpers/make-libmateweather b/helpers/make-libmateweather new file mode 100644 index 0000000..4e9f2b2 --- /dev/null +++ b/helpers/make-libmateweather @@ -0,0 +1,29 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 + +. ./config + +apply_patch_changes + +changelog "Fix dataserver weather url change." + +package + diff --git a/helpers/make-lxde-metapackages b/helpers/make-lxde-metapackages new file mode 100644 index 0000000..1eed2a7 --- /dev/null +++ b/helpers/make-lxde-metapackages @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 + +. ./config + +apply_patch_changes + +changelog "Set correct browser dependencies order on Trisquel environment." + +package diff --git a/helpers/make-lxpanel b/helpers/make-lxpanel new file mode 100644 index 0000000..9b9da8f --- /dev/null +++ b/helpers/make-lxpanel @@ -0,0 +1,38 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=2 + +. ./config + +apply_patch_changes + +# To use the multi-line change log, the message must be enclosed in quotes. +changelog "Backport patches from upstream lxpanel to improve stability and functionality: + + Fix scrolling issue in volume plugin (MR#46)/(TPH#218). + Handle 'not charging' battery state correctly (MR#53). + Prevent wincmd plugin from triggering button clicks incorrectly (MR#78). + Avoid panel freeze caused by pop-down menu detach (MR#84). + Restore disabled functionality in cpufreq plugin (MR#89, 4 commits). + Add debian changes to fix armhf cpufreq plugin. + +These changes improve reliability in power and task management plugins." + +package diff --git a/helpers/make-mate-user-admin b/helpers/make-mate-user-admin new file mode 100644 index 0000000..64b5847 --- /dev/null +++ b/helpers/make-mate-user-admin @@ -0,0 +1,29 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 + +. ./config + +# Add cracklib-runtime dependency to debian/control +apply_patch_changes + +changelog "Added cracklib-runtime dependency." + +package diff --git a/helpers/make-mypaint b/helpers/make-mypaint new file mode 100644 index 0000000..e7a4429 --- /dev/null +++ b/helpers/make-mypaint @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 + +. ./config + +apply_patch_changes + +changelog "Cherry-pick upstream patch to fix segfault when libmypaint is built with OpenMP." + +package diff --git a/helpers/make-netcfg b/helpers/make-netcfg index 14de1da..ddac516 100644 --- a/helpers/make-netcfg +++ b/helpers/make-netcfg @@ -18,19 +18,14 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=0.12 +VERSION=1 EXTERNAL='deb-src http://ftp.debian.org/debian trixie main' -REPOKEY=0E98404D386FA1D9 +REPOKEY=78DBA3BC47EF2265 NETINST=true . ./config # Re apply upstream behavior and configuration features from last release (focal). # https://git.launchpad.net/ubuntu/+source/netcfg/log/?h=ubuntu/focal -#for patch in $(ls -v ${DATA}/*.patch) -#do -#echo "Applying $patch" -#patch --no-backup-if-mismatch -Np1 < $patch -#done apply_patch_changes changelog "Rebranded and adapted for Trisquel" diff --git a/helpers/make-partman-auto b/helpers/make-partman-auto index babbc67..4d5fe65 100644 --- a/helpers/make-partman-auto +++ b/helpers/make-partman-auto @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2022 Luis Guzmán +# Copyright (C) 2025 Luis Guzmán # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,12 +23,14 @@ # such packages from Debian in order to build the required udeb packages. ## -VERSION=1 +VERSION=2 EXTERNAL='deb-src http://ftp.debian.org/debian trixie main' REPOKEY=0E98404D386FA1D9 NETINST=true . ./config +apply_patch_changes -changelog "Fetch and build as udeb dependency for debian-installer." +changelog "Fetch and build as udeb dependency for debian-installer. +Set trisquel default size partition recipe." package diff --git a/helpers/make-pkgsel b/helpers/make-pkgsel index fc44f3c..27ac459 100644 --- a/helpers/make-pkgsel +++ b/helpers/make-pkgsel @@ -1,5 +1,6 @@ #!/bin/sh # +# Copyright (C) 2025 Luis Guzmán # Copyright (C) 2009-2021 Rubén Rodríguez # # This program is free software; you can redistribute it and/or modify @@ -17,11 +18,13 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=2 +VERSION=3 EXTERNAL='deb-src http://ftp.debian.org/debian trixie main' -REPOKEY=0E98404D386FA1D9 +REPOKEY=6ED0E7B82643E131 NETINST=true . ./config -changelog "Rebranded and adapted for Trisquel" +apply_patch_changes + +changelog "Add propagation of installer-chosen locale to tasksel" package diff --git a/helpers/make-plymouth b/helpers/make-plymouth index ddbd1a4..e211c34 100644 --- a/helpers/make-plymouth +++ b/helpers/make-plymouth @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2024 Luis Guzmán +# Copyright (C) 2025 Luis Guzmán # Copyright (C) 2008-2022 Ruben Rodriguez # Copyright (C) 2019 Mason Hock # @@ -19,7 +19,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=14 +VERSION=15 QUILT=skip . ./config @@ -175,6 +175,8 @@ sed s/Ubuntu/Trisquel/ -i debian/plymouth-theme-trisquel-text.postinst # Clean up rm ./debian/plymouth-theme-ubuntu-logo.postinst +apply_patch_changes + changelog "Plymouth themes modified for Trisquel" package diff --git a/helpers/make-riseup-vpn b/helpers/make-riseup-vpn new file mode 100644 index 0000000..308eb53 --- /dev/null +++ b/helpers/make-riseup-vpn @@ -0,0 +1,27 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 +EXTERNAL='deb-src https://ppa.launchpadcontent.net/leapcodes/riseup-vpn/ubuntu $UPSTREAM main ' +REPOKEY=F4F9F002F64469DC +. ./config + +changelog "Backported stable maintained package." + +package diff --git a/helpers/make-sbuild b/helpers/make-sbuild new file mode 100644 index 0000000..05fc53a --- /dev/null +++ b/helpers/make-sbuild @@ -0,0 +1,31 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 +EXTERNAL='deb-src https://archive.ubuntu.com/ubuntu $UPSTREAM-backports main' +BACKPORTS=true + +. ./config + +apply_patch_changes + +changelog "Add switch to use Trisquel's DistroInfo on 0.88.3 and later versions" + +package + diff --git a/helpers/make-software-properties b/helpers/make-software-properties index 653a35d..e3a2996 100644 --- a/helpers/make-software-properties +++ b/helpers/make-software-properties @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2024 Luis Guzman +# Copyright (C) 2025 Luis Guzman # Copyright (C) 2011-2022 Ruben Rodriguez # Copyright (C) 2019 Mason Hock # Copyright (C) 2011 Carlos Pais @@ -21,6 +21,7 @@ # VERSION=17 +EXTERNAL='deb-src http://archive.ubuntu.com/ubuntu plucky main' . ./config @@ -59,7 +60,7 @@ sed '/software-properties-drivers/d' -i debian/software-properties-gtk.install s replace "Trisquel-Gettext" "Ubuntu-Gettext" . -sed '/test_suite/d' -i setup.py +#sed '/test_suite/d' -i setup.py rm -rf tests rm data/software-properties-drivers.desktop.in @@ -75,15 +76,13 @@ sed -i '/software-properties-livepatch.desktop/s|^|#|' debian/software-propertie patch_p1 $DATA/rm_init_ubuntu_pro_if_lts.patch sed -i '/.TrisquelProPage/d' softwareproperties/gtk/SoftwarePropertiesGtk.py -#Livepatch - aramo -patch_p1 $DATA/remove_ubuntu_subscription_tab.patch -patch_p1 $DATA/remove_proposed_updates.patch -#Patch codename for PPAs -patch_p1 $DATA/fix_PPA_upstream_codename.patch -#Fix mention of "other packages" as we don't distribute snap. -patch_p1 $DATA/removal_of_snaps_other_packages_referral.patch +##Apply patch changes +# Livepatch - aramo +# Patch codename for PPAs +# Fix mention of "other packages" as we don't distribute snap. # Remove extend esm url from update tabs -patch_p1 $DATA/rm_extend_esm_url_link.patch +# Add s-p - 111 new dependency +apply_patch_changes # Make software-properties-qt visible on Triskel sed -i '/^NoDisplay=/s|true|false|' data/software-properties-qt.desktop.in @@ -96,7 +95,8 @@ do patch_p1 $patch done -changelog "Removed Ubuntu-specifc tests, Livepatch, Snap and fix PPA integration." +changelog "Removed Ubuntu-specifc tests, Livepatch, Snap and fix PPA integration. +Backport v111 on Ecne for improved deb822 sources support." package diff --git a/helpers/make-tasksel b/helpers/make-tasksel index 8b94f62..fe9f219 100644 --- a/helpers/make-tasksel +++ b/helpers/make-tasksel @@ -1,7 +1,7 @@ #!/bin/sh # # Copyright (C) 2008-2020 Ruben Rodriguez -# Copyright (C) 2022 Luis Guzman +# Copyright (C) 2025 Luis Guzman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=6 +VERSION=7 COMPONENT=main . ./config @@ -26,17 +26,21 @@ COMPONENT=main # No install recommends sed 's/Install-Recommends=true/Install-Recommends=false/g' -i tasksel.pl -#Remove debian generic-tasks +# Remove debian generic-tasks sed -i '/Package: task-desktop/,/$p/d' debian/control -#Setup trisquel task required customization. +# Setup trisquel task required customization. cp -r $DATA/trisquel-tasks . cp $DATA/Makefile . cp $DATA/filter-tasks . +cp $DATA/lang-gen.sh . +cp $DATA/list packages/list + sed "/USUITE/s/.*/USUITE=$CODENAME/" Makefile -i replace "debian-tasks.desc" "trisquel-tasks.desc" -changelog "Added Trisquel's tasks" +changelog "Added Trisquel's tasks +Added Trisquel's l10n tasksel implementation for d-i" package diff --git a/helpers/make-ubiquity b/helpers/make-ubiquity index f2dac7e..09cfb5d 100644 --- a/helpers/make-ubiquity +++ b/helpers/make-ubiquity @@ -19,19 +19,14 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=39 +VERSION=44 . ./config Mirrors_masterlist_git="trisquel-packages/-/raw/master/extra/mirrors/Mirrors.masterlist" ## Apply patches upfront -# Avoid the need for a custom cdrom:// repo - 001-grub-installer.patch -truncate -s 0 d-i/source/apt-setup/generators/40cdrom -# Disable confirmation popups, as they are innacurate and buggy - 002-no_confrirmation_when_crypto.patch -# Fix some gtk labels for Orca - 003-a11y.patch -# Point ubiquity crash to trisquel's forge. - 004-crash_report_point_to_trisquel_forge.patch -# Prevent ubiquity-dm to error out due missing settings - 005-prevent_ubiquity-dm_error_due_missing_gsettings.patch +# Please look for DATA/ubiquity/patch_changes for more info on applied patches by function: apply_patch_changes # Remove test_timezone to prevent error out future builds on different daylight time. @@ -81,7 +76,7 @@ sed 's:\(targetdb)\):\1\n os.system("sudo chmod 644 /target/var/cache/deb # Fix https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1080701 sed '/from ubiquity import osextras/s/$/\nos.system("sudo swapoff -a")/' bin/ubiquity-wrapper -i -for i in $(ls -1 d-i/source/apt-setup/generators |grep -v 01setup|grep -v 40cdrom) canonical.com security.ubuntu.com extras.ubuntu.com +for i in $(ls -1 d-i/source/apt-setup/generators |grep -v 01setup) canonical.com security.ubuntu.com extras.ubuntu.com do /bin/sed /$i/d -i debian/ubiquity.install-any d-i/source/apt-setup/debian/*.install done @@ -91,52 +86,8 @@ echo "d-i/source/apt-setup/generators/99trisquel usr/lib/ubiquity/apt-setup/gene cp $DATA/trisquel.png data/ubiquity.png # remove Ubuntu apt setup for the installer -find d-i/source/apt-setup/generators -type f | grep -v 01setup |grep -v 40cdrom| xargs -r rm -cat << EOF1 > d-i/source/apt-setup/generators/99trisquel -#!/bin/sh -set -e - -file="\$1" - -FASTEST=https://archive.trisquel.org/trisquel/ -SPEED=1000000000000 - -if nm-online -xq -then - for i in \$(grep '//' /usr/share/python-apt/templates/Trisquel.mirrors | sed 's|/$||') - do - echo Testing \$i - TIME=\$(date +%s%N) - wget --no-check-certificate -t 1 -T 5 --max-redirect=0 -o /dev/null -O /dev/null \$i/speedtest || continue - TIME2=\$(date +%s%N) - ELAPSED=\$(expr \$TIME2 - \$TIME) - echo Time: \$ELAPSED - if [ \$ELAPSED -lt \$SPEED ] - then - FASTEST=\$i - SPEED=\$ELAPSED - fi - done -fi - -echo "Selected mirror: \$FASTEST" - -MIRROR=\$FASTEST -RELEASE=\$(lsb_release -c | cut -f 2) - -cat << EOF > \$file -# Trisquel repositories for supported software and updates -deb \$MIRROR \$RELEASE main -deb-src \$MIRROR \$RELEASE main -deb \$MIRROR \$RELEASE-security main -deb-src \$MIRROR \$RELEASE-security main -deb \$MIRROR \$RELEASE-updates main -deb-src \$MIRROR \$RELEASE-updates main -#deb \$MIRROR \$RELEASE-backports main -#deb-src \$MIRROR \$RELEASE-backports main -EOF -EOF1 -chmod 755 d-i/source/apt-setup/generators/99trisquel +find d-i/source/apt-setup/generators -type f | grep -v 01setup | xargs -r rm +cp $DATA/99trisquel d-i/source/apt-setup/generators/ # Redirect ports.ubuntu.com sed '/ports.ubuntu.com/d' -i ./d-i/source/apt-setup/debian/apt-mirror-setup.install diff --git a/helpers/make-ubuntu-release-upgrader b/helpers/make-ubuntu-release-upgrader index 191cfce..148fb7f 100644 --- a/helpers/make-ubuntu-release-upgrader +++ b/helpers/make-ubuntu-release-upgrader @@ -25,7 +25,7 @@ # Also, don't forget to update the meta-release files at archive and packages.t.i # The "obsoletes" list from ubuntu has been removed -VERSION=16.1 +VERSION=17 . ./config # Previous upstream release name, update for each release. @@ -370,6 +370,18 @@ URI_UNSTABLE_POSTFIX = -development URI_PROPOSED_POSTFIX = -proposed MR-FILE +# Apply custom patches for Trisquel 12, Ecne +# make sure to remove helpers no longer valid for further releases. +apply_patch_changes + +# Modify build-scripts +sed -i "s|DIST=.*|DIST=$CODENAME|" DistUpgrade/build-dist.sh DistUpgrade/build-tarball.sh +sed -i "s|MAINTAINER=.*|MAINTAINER=\"$DEBFULLNAME <$DEBEMAIL>\"|" DistUpgrade/build-dist.sh + +#NOTE: In order to run build-dist.sh it is required: +# - apt-clone +# - intltool + changelog "Compiled for Trisquel" PARALLEL=false package diff --git a/helpers/make-vidtuber b/helpers/make-vidtuber new file mode 100644 index 0000000..dbc7a8f --- /dev/null +++ b/helpers/make-vidtuber @@ -0,0 +1,29 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 +EXTERNAL='deb-src http://ppa.launchpad.net/jeanslack/vidtuber/ubuntu $UPSTREAM main' +REPOKEY=1829041B1114F671 +BACKPORT=true + +. ./config + +changelog "Backported from official PPA for vidtuber" + +package diff --git a/helpers/make-yt-dlp b/helpers/make-yt-dlp index cd529bc..09fcd5e 100644 --- a/helpers/make-yt-dlp +++ b/helpers/make-yt-dlp @@ -17,9 +17,9 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=2 +VERSION=3 EXTERNAL='deb-src http://deb.debian.org/debian sid main' -REPOKEY=0E98404D386FA1D9 +REPOKEY=6ED0E7B82643E131 BACKPORTS=true . ./config