#!/bin/bash # # Copyright (C) 2008-2023 Ruben Rodriguez <ruben@trisquel.info> # Copyright (C) 2015 Santiago Rodriguez <santi@trisquel.info> # Copyright (C) 2024 Luis Guzman <ark@switnet.org> # # 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=109 EXTERNAL='deb-src http://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $UPSTREAM main' REPOKEY=9BDB3D89CE49EC21 . ./config rm debian/control # Disable remote settings antifeature. sed '/async fetchLatestChanges.*/areturn;' -i services/settings/Utils.sys.mjs sed '/async download.*/areturn;' -i services/settings/RemoteSettingsClient.sys.mjs services/settings/Attachments.sys.mjs # Disable activity-stream antifeatures. # These are not condensed into a single sed script to make it fail on individual commands that didn't change the source ActivityStream=browser/components/newtab/lib/ActivityStream.sys.mjs sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new Map\([[""]]\);' -i browser/components/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 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 sed '/stories_referrer/s/http.*/",/' -i $ActivityStream sed '/topics_endpoint/s/getpocket.cdn.mozilla.net/127.0.0.1/' -i $ActivityStream sed 's/preffedRegions.includes.geo. .. ..locales .. locales.includes.locale./false/' -i $ActivityStream sed 's/Ubuntu, //' -i browser/components/newtab/css/activity-stream*.css echo "#header-asrouter-container{display: none!important;}" >> browser/components/newtab/css/activity-stream-linux.css #Disable «Sponsored tiles on the New Tab page» - firefox 92+94 sed '/"showSponsoredTopSites"/,/value/s/value: true/value: false/' -i $ActivityStream sed -i '/activity-stream.showSponsored/s|true|false|g' browser/app/profile/firefox.js #Disable «Mozilla VPN» - firefox 94 sed '/"browser.privatebrowsing.vpnpromourl"/s/https.*"/"/' -i browser/app/profile/firefox.js grep -rl browser.vpn_promo.enabled | xargs -r sed -i '/browser.vpn_promo.enabled/s|true|false|' sed '/network.connectivity-service.IPv/s/http.*success.txt?ipv[46]//' -i modules/libpref/init/all.js sed 's/accounts-static.cdn.mozilla.net.*sync.services.mozilla.com//' -i modules/libpref/init/all.js # Disable 106 firefox-view and other firefox-branded popups sed -i '/browser.urlbar.quicksuggest.shouldShowOnboardingDialog/s|true|false|' browser/app/profile/firefox.js sed -i '/services.sync.prefs.sync.browser.firefox-view.feature-tour/s|true|false|' browser/app/profile/firefox.js ##disable firefox-view sed -i '/"browser.tabs.firefox-view"/s|true|false|' browser/app/profile/firefox.js ##disable ui tour sed -i '/browser.uitour.enabled/s|true|false|' browser/app/profile/firefox.js ##disable colorways closet sed -i '/browser.theme.colorway-closet/s|true|false|' browser/app/profile/firefox.js ##disable newtab intro - check adjustment for versions greater than 106 #grep -rl browser.newtabpage.introShown |xargs -r sed -i '/browser.newtabpage.introShown/s|true|false|' ##Remove mailto handlers. 110 sed -i '/kHandlerList = {/,/^ };/{/^ /d}' uriloader/exthandler/HandlerList.sys.mjs # Replace ubufox recommendation sed 's/xul-ext-ubufox/xul-ext-youtube-html5-video-player/' -i debian/control.in #Remove exceptions on warnings when installing addons. sed -i '/addons.mozilla.org/d' browser/app/permissions # Disable healtreport cat << EOF > toolkit/components/telemetry/healthreport-prefs.js pref("datareporting.healthreport.uploadEnabled", false); pref("datareporting.healthreport.about.reportUrl", "https://trisquel.info/legal"); pref("datareporting.healthreport.infoURL", "https://trisquel.info/legal"); EOF # Replace privacy page grep -rl https://www.mozilla.org/legal/privacy/ | \ xargs -r sed -i 's|https://www.mozilla.org/legal/privacy/.*"|https://trisquel.info/legal"|' # Disable telemetry pings grep -rl TELEMETRY_BASE_URL | xargs -r sed -i 's|"https://incoming.telemetry.mozilla.org/submit"|""|' grep -rl '"https://incoming.telemetry.mozilla.org"'| xargs -r sed -i 's|"https://incoming.telemetry.mozilla.org"|"http://127.0.0.1"|' grep -rl toolkit.telemetry.server_owner modules/| xargs -r sed -i '/toolkit.telemetry.server_owner/s|Mozilla|None|' grep -rl toolkit.telemetry.unified | xargs -r sed -i '/toolkit.telemetry.unified/s|[Tt]rue|false|' grep -rl toolkit.telemetry.archive.enabled | xargs -r sed -i '/toolkit.telemetry.archive.enabled/s|true|false|' grep -rl toolkit.telemetry.updatePing.enabled | xargs -r sed -i '/toolkit.telemetry.updatePing.enabled/s|true|false|' grep -rl toolkit.telemetry.shutdownPingSender.enabled | xargs -r sed -i '/toolkit.telemetry.shutdownPingSender.enabled/s|[Tt]rue|false|' grep -rl toolkit.telemetry.newProfilePing.enabled | xargs -r sed -i '/toolkit.telemetry.newProfilePing.enabled/s|true|false|' grep -rl toolkit.telemetry.firstShutdownPing.enabled | xargs -r sed -i '/toolkit.telemetry.firstShutdownPing.enabled/s|true|false|' grep -rl toolkit.telemetry.bhrPing.enabled | xargs -r sed -i '/toolkit.telemetry.bhrPing.enabled/s|true|false|' # fixed by https://bugzilla.mozilla.org/show_bug.cgi?id=1868988 grep -rl security.certerrors.recordEventTelemetry | xargs -r sed -i '/security.certerrors.recordEventTelemetry/s|true|false|' grep -rl services.sync.telemetry.maxPayloadCount modules/ | xargs -r sed -i '/services.sync.telemetry.maxPayloadCount/s|500|-1|' grep -rl services.sync.telemetry.submissionInterval modules/ | xargs -r sed -i '/services.sync.telemetry.submissionInterval/s|43200|-1|' echo 'pref("dom.security.unexpected_system_load_telemetry_enabled", false);' | tee -a browser/app/profile/firefox.js echo 'pref("toolkit.telemetry.hybridContent.enabled", false);' | tee -a browser/app/profile/firefox.js # GPC opt-out entry added on 120 (not enabled yet). echo '//pref("privacy.globalprivacycontrol.enabled", true);' | tee -a browser/app/profile/firefox.js # Update third_party/rust/glean/src/configuration.rs sha256sum at third_party/rust/glean/.cargo-checksum.json sed_csum 27075b12236021c54d0c99427bcbd417933ca02545275604d3c13f32ca25af13 \ f354c756cb723a386263a3ad4669a1d5cc743379c7c620b14f894f505cf83500 # Remove Google API key and calls sed '/Google API/,/google-api-keyfile/ d' debian/config/mozconfig.in -i sed '/"geo.provider.network.url"/s|https.*"|"|' -i modules/libpref/init/all.js # Org branding sed 's/com.ubuntu/org.trisquel/' -i debian/config/mozconfig.in # Disable DRM support, armhf has no such option. ## Add other archs that might present the same lack of disable-eme option cat << ARCH >> debian/config/mozconfig.in %%if DEB_HOST_ARCH != ppc64el %%if DEB_HOST_ARCH != arm64 %%if DEB_HOST_ARCH != armhf ac_add_options --disable-eme %%endif %%endif %%endif ARCH cat << SIGN >> debian/config/mozconfig.in export MOZ_REQUIRE_SIGNING= SIGN sed '/gmp-clearkey/d' -i ./debian/firefox.install.in # Locale packages should provide firefox-locale-$LANG sed "s/Provides.*/Provides: abrowser-locale-@LANGCODE@/" -i debian/control.langpacks sed 's/Firefox/Abrowser/' -i debian/control.langpacks # Provide firefox sed "s/iceweasel,/iceweasel, firefox,/" -i debian/control.in # Remove Ubuntu bookmarks sed -i /ubuntu-bookmarks/d debian/patches/series rm debian/patches/ubuntu-bookmarks* # Custom newtab images sed '/^]$/d' -i browser/components/newtab/data/content/tippytop/top_sites.json sed 's/}$/},/' -i browser/components/newtab/data/content/tippytop/top_sites.json cat << EOF >> browser/components/newtab/data/content/tippytop/top_sites.json { "domains": ["trisquel.info"], "image_url": "images/trisquel.png", "favicon_url": "favicons/trisquel.ico" }, { "domains": ["packages.trisquel.org"], "image_url": "images/trisquel-packages.png", "favicon_url": "favicons/trisquel-packages.ico" }, { "domains": ["gnu.org"], "image_url": "images/gnu.png", "favicon_url": "favicons/gnu.ico" }, { "domains": ["fsf.org"], "image_url": "images/fsf.png", "favicon_url": "favicons/fsf.ico" }, { "domains": ["directory.fsf.org"], "image_url": "images/directory.png", "favicon_url": "favicons/fsf.ico" }, { "domains": ["libreplanet.org"], "image_url": "images/libreplanet.png", "favicon_url": "favicons/libreplanet.ico" }, { "domains": ["fsfe.org"], "image_url": "images/fsfe.png", "favicon_url": "favicons/fsfe.ico" }, { "domains": ["wikipedia.org"], "image_url": "images/wikipedia.png", "favicon_url": "favicons/wikipedia.ico" }, { "domains": ["h-node.org"], "image_url": "images/hnode.png", "favicon_url": "favicons/hnode.ico" } ] EOF #uuidgen --sha1 --namespace @dns --name "trisquel.info" cat << TOP_JSON > services/settings/dumps/main/top-sites.json { "data": [ { "url": "https://trisquel.info/", "order": 0, "title": "Trisquel", "id": "ec7f4843-6be5-5e86-870a-1c8383500a4b", "last_modified": $(date +%s%N | cut -b1-13) }, { "url": "https://packages.trisquel.org/", "order": 1, "title": "Trisquel Packages", "id": "27a9b035-0b8b-4472-97cb-b1866aba0740", "last_modified": $(date +%s%N | cut -b1-13) }, { "url": "https://www.gnu.org/", "order": 2, "title": "GNU", "id": "1baee931-751c-5993-b6fe-d86fbf78f9b0", "last_modified": $(date +%s%N | cut -b1-13) }, { "url": "https://www.fsf.org/", "order": 3, "title": "FSF", "id": "fcc60dd8-4d97-5aca-8e5d-784652c75818", "last_modified": $(date +%s%N | cut -b1-13) }, { "url": "https://directory.fsf.org/", "order": 4, "title": "FSF Directory", "id": "abe5bfb2-9487-5697-9f27-e0b782dfe006", "last_modified": $(date +%s%N | cut -b1-13) }, { "url": "https://libreplanet.org/", "order": 5, "title": "LibrePlanet", "id": "e3d2cf88-a4dc-5d2e-9f9a-f3ea241d17d8", "last_modified": $(date +%s%N | cut -b1-13) }, { "url": "https://www.wikipedia.org/", "order": 6, "title": "Wikipedia", "id": "02c295f5-54a8-5d29-8d1f-b619216b20c0", "last_modified": $(date +%s%N | cut -b1-13) }, { "url": "https://h-node.org/", "order": 7, "title": "h-node", "id": "c426481f-8c3f-53b8-b23a-431a91a1c7b4", "last_modified": $(date +%s%N | cut -b1-13) } ], "timestamp": $(date +%s%N | cut -b1-13) } TOP_JSON cp $DATA/newtab/*.ico browser/components/newtab/data/content/tippytop/favicons/ cp $DATA/newtab/*.png browser/components/newtab/data/content/tippytop/images/ # Custom DDG cp browser/components/search/extensions/ddg browser/components/search/extensions/ddg-html -a sed 's|/duckduckgo.com/|/html.duckduckgo.com/html/|' -i browser/components/search/extensions/ddg-html/manifest.json sed 's|DuckDuckGo|DuckDuckGo (HTML)|' -i browser/components/search/extensions/ddg-html/manifest.json sed 's|ddg@|ddg-html@|' -i browser/components/search/extensions/ddg-html/manifest.json patch --no-backup-if-mismatch -p1 < $DATA/rollback_ddg_firefox_partnership_codes.patch # disable ads, disable redirect #sed '/search/s|q=|k1=-1\&kd=-1\&ko=1\&q=|' -i browser/components/search/extensions/ddg/manifest.json #Trisquel custom search engines cp -a $DATA/searchplugins/* browser/components/search/extensions/ /bin/sed "/\"data\": \[/ r $DATA/searchplugins/trisquel.json" -i ./services/settings/dumps/main/search-config.json /bin/sed "/\"data\": \[/ r $DATA/searchplugins/trisquel-packages.json" -i ./services/settings/dumps/main/search-config.json # Reprocess search preconfiguration dump python3 $DATA/process-json-files.py . browser/components/extensions/schemas/ cat << EOF > debian/distribution.ini [Global] id=trisquel version=$REVISION about=Abrowser for Trisquel GNU/Linux [Preferences] app.distributor = "trisquel" app.distributor.channel = "trisquel" app.partner.ubuntu = "trisquel" intl.locale.requested="" EOF sed "s/^MOZ_APP_NAME\t.*/MOZ_APP_NAME\t\t:= abrowser/;" debian/build/config.mk -i sed "s/^MOZ_PKG_NAME\t.*/MOZ_PKG_NAME\t\t:= abrowser/;" debian/build/config.mk -i ############################################################################3 ############################################################################3 ############################################################################3 # Branding files cp -a $DATA/branding/* browser/branding/official cp -a $DATA/branding/* browser/branding/unofficial cp -a $DATA/branding/* browser/branding/nightly cp -a $DATA/branding/* browser/branding/aurora sed '/about-wordmark.svg/d' -i browser/base/content/aboutDialog.css echo '#warningDesc, #communityExperimentalDesc, #communityDesc, #contributeDesc {display:none!important}' >> browser/base/content/aboutDialog.css # Disable preprocessor sed 's/_PP//' -i browser/branding/branding-common.mozbuild #Prevent duplicated values. cat << EOF > debian/config/branch.mk MOZILLA_REPO = https://hg.mozilla.org/releases/mozilla-release L10N_REPO = https://hg.mozilla.org/l10n-central CHANNEL = release MOZ_WANT_UNIT_TESTS = 0 MOZ_OFFICIAL_BUILD = 0 MOZ_ENABLE_BREAKPAD = 0 MOZ_ENABLE_TELEMETRY = 0 EOF SEDSCRIPT=" s|Updates from { -vendor-short-name } and { -brand-product-name }|Updates from { -vendor-short-name }|; s/Try Firefox/Try Abrowser/g; s/Firefox Home/Abrowser Home/g; s/Firefox Account/Sync Account/g; s/Updates from Mozilla and Firefox/Updates from Mozilla/g; s/Adobe Flash/Flash/g; s|www.mozilla.com/firefox/central|trisquel.info/browser|g; s|mozilla.com/plugincheck|trisquel.info/browser|g; s|www.mozilla.com/legal/privacy|trisquel.info/legal|g; s|Firefox Nightly|Abrowser|; s|Firefox Developer Edition|Abrowser|g; s|Nightly|Abrowser|g; s|brand-product-name = Firefox|brand-product-name = Abrowser|; s|Sign in to Firefox|Sign in to Sync|; s|Search addons.mozilla.org|Search|g; s|firefox.settings.services.mozilla.com|127.0.0.1|g; s|this-firefox|this-abrowser|g; " echo "Running batch replace operation" find . -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' -not -iregex '.*third_party/.*' -execdir /bin/sed --follow-symlinks -i "$SEDSCRIPT" '{}' ';' echo "Replacing Firefox with Abrowser on ./l10n" find l10n -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' -execdir /bin/sed --follow-symlinks -i "s/Firefox/Abrowser/" '{}' ';' sed 's/Firefox/Abrowser/' -i debian/control.in \ browser/locales/en-US/chrome/overrides/appstrings.properties sed s/ubuntu/trisquel/g debian/distribution.ini -i sed "s/ubuntu_version/trisquel_version/; s/Ubuntu 10.10/Trisquel $REVISION/; s/1010/40/" -i debian/firefox.postinst.in # Delete stuff we don't use and that may contain trademaked logos ##keeping "windows" icons for ff96 rm -rf ./browser/metro ./addon-sdk/source/doc/static-files/media ./browser/themes/osx ./b2g #Trisquel custom bookmarks cp $DATA/default-bookmarks.html browser/base/content/default-bookmarks.html # install extensions for extension in $(ls -1 $DATA/extensions/); do cp $DATA/extensions/$extension -r debian echo "debian/$extension @MOZ_ADDONDIR@/extensions/" >> debian/abrowser.install.in done # Disable search field at extensions panel #sed '/header-search/d; /search.placeholder/d' -i toolkit/mozapps/extensions/content/extensions.xul cat << EOF >> toolkit/mozapps/extensions/content/extensions.css #header-search { display:none; } EOF # Hide mobile promo echo ".fxaMobilePromo { display: none !important; }" >> browser/themes/shared/preferences/preferences.inc.css # Hide unwanted elements on about:addons echo ".discopane-notice, .privacy-policy-link, #main header, #plugindeprecation-notice { display: none !important; }" >> toolkit/mozapps/extensions/content/aboutaddons.css # Hide warnings on unsigned extensions echo ".warning{display: none!important; } .addon[notification=warning]{background-image: none!important;}" >> toolkit/mozapps/extensions/content/extensions.css # Hide extra links in about box # about: page mods, like rights. ## Hide extra links in about box #find -wholename '*/brand.dtd' |xargs /bin/sed 's/trademarkInfo.part1.*/trademarkInfo.part1 "">/' -i for STRING in rights-intro-point-2 rights-intro-point-3 rights-intro-point-4 rights-intro-point-5 rights-intro-point-6 rights-webservices rights-safebrowsing do find -name aboutRights.ftl | xargs -r sed -i "s/^$STRING.*/$STRING = /" done ##Remove invalid policy for trisquel. find -name aboutRights.ftl | xargs -r sed -i '/rights-intro-point-5/,$d' find -name aboutRights.xhtml |xargs -r sed -i "/rights-intro-point-5/,/<\/li>/d" find -name aboutRights.xhtml |xargs -r sed -i "/rights-intro-point-6/,/<\/li>/d" find -name aboutRights-unbranded.xhtml |xargs -r sed -i "/rights-intro-point-5/,/<\/li>/d" #EO about: mods. sed -i 's/<a\ href\=\"http\:\/\/www.mozilla.org\/\">Mozilla\ Project<\/a>/<a\ href\=\"http\:\/\/www.trisquel.info\/\"\>Trisquel\ Project<\/a>/g' browser/base/content/overrides/app-license.html sed -i 's|https://firefox-source-docs.mozilla.org/contributing/contribution_quickref.html|https://gitlab.trisquel.org/trisquel/package-helpers|' toolkit/content/license.html # We went too far... #sed -i 's/iceweasel, abrowser, icecat,/iceweasel, firefox, icecat,/g' debian/control.in sed '/Provides/s/abrowser-locale/firefox-locale/' -i debian/control.langpacks /bin/sed '/trademarkInfo/s/Abrowser/Firefox/' -i l10n/*/browser/branding/official/brand.ftl # js settings cat $DATA/settings.js >> debian/vendor-firefox.js # set contentblocking to strict by default patch --no-backup-if-mismatch -p1 < $DATA/default-strict.patch #sed '/this._trackSlowStartup/s/$/\n\n if (! Services.prefs.prefHasUserValue("browser.contentblocking.category")) { Services.prefs.setStringPref("browser.contentblocking.category", "strict"); this._updateCBCategory; }/' -i ./browser/components/BrowserGlue.jsm ################# # Android stuff # ################# # Settings cat << EOF >> mobile/android/confvars.sh # Abrowser settings MOZ_APP_BASENAME=Abrowser MOZ_APP_VENDOR=Trisquel MOZ_PAY=0 MOZ_SERVICES_HEALTHREPORT=0 MOZ_SERVICES_HEALTHREPORTER=0 MOZ_SERVICES_METRICS=0 MOZ_DATA_REPORTING=0 MOZ_DEVICES=0 MOZ_ANDROID_GOOGLE_PLAY_SERVICES=0 MOZ_TELEMETRY_REPORTING=0 MOZ_ADDON_SIGNING=0 EOF #Enable EGL by default sed -i '/gfx.x11-egl.force-enabled/,/mirror/s|false|true|' modules/libpref/init/StaticPrefList.yaml # Branding rm mobile/android/branding/{official,unofficial,beta,nightly} -rf cp -a $DATA/android/branding/ mobile/android/branding/official cp $DATA/android/mobile.ico mobile/android/app/ #cp $DATA/android/images/* mobile/android/themes/core/images/ cp -a $DATA/android/res/main/* mobile/android/geckoview/src/main/res # Rebrand svg & debug tools & privacy logos find devtools/client/themes/images/ -name aboutdebugging-firefox-*.svg | xargs -n1 cp $DATA/debug_brand/debuglogo.svg find devtools/client/themes/images/ -name aboutdebugging-fenix*.svg | xargs -n1 cp $DATA/debug_brand/debuglogo.svg find devtools/client/themes/images/ -name aboutdebugging-firefox-logo.svg | xargs -n1 cp $DATA/debug_brand/debuglogo_gray.svg find browser/branding/ -name about-logo.svg | xargs -n1 cp $DATA/debug_brand/debuglogo.svg find browser/branding/ -name about-logo-private.png | xargs -n1 cp $DATA/debug_brand/about-logo-private.png find browser/branding/ -name about-logo-private@2x.png | xargs -n1 cp $DATA/debug_brand/about-logo-private@2x.png find browser/branding/ -name PrivateBrowsing_70.png | xargs -n1 cp $DATA/debug_brand/PrivateBrowsing_70.png find browser/branding/ -name PrivateBrowsing_150.png | xargs -n1 cp $DATA/debug_brand/PrivateBrowsing_150.png # Replace addons placeholder for the gnuzilla mozzarella. find l10n/ -name aboutAddons.ftl | xargs -r sed -i '/.placeholder/s|addons.mozilla.org|gnuzilla.gnu.org|g' #Fixes by patch on source, see DATA/firefox/patches for more info. for patch in $(ls -v ${DATA}/patch_changes/*.patch) do echo "Applying $patch" patch --no-backup-if-mismatch -Np1 < $patch done # Postinst script to manage profile migration and system links echo ' if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] ; then [ -f /usr/bin/firefox ] || ln -s /usr/bin/abrowser /usr/bin/firefox for HOMEDIR in $(grep :/home/ /etc/passwd |grep -v usbmux |grep -v syslog|cut -d : -f 6) do [ -d $HOMEDIR/.mozilla/abrowser ] && continue || true [ -d $HOMEDIR/.mozilla/firefox ] || continue echo Linking $HOMEDIR/.mozilla/firefox into $HOMEDIR/.mozilla/abrowser ln -s $HOMEDIR/.mozilla/firefox $HOMEDIR/.mozilla/abrowser done fi exit 0 ' >> debian/abrowser.postinst.in sed 's/1410/65/; s/1310/60/' -i debian/rules sed 's/^Source:.*/Source: firefox/' -i debian/control.in debian/rules debian/control touch -d "yesterday" debian/control debian/rules debian/control changelog "Rebranded for Trisquel" package