How can I install add-ons automatically ?
Hi,
I am trying to setup firefox to my liking automatically To this end, I am using "firefox profile maker" and it works great but I'm having issues adding all the add-ons that I like.
Only the add-ons that are included in ffprofile make seem to install properly (but also, now I can't uninstall them ??)
Anyway here is my full process for installing firefox automatically and then configuring it automatically. Perhaps you can hep me figure it out.
First I install firefox automatically using the offline installer (my computers do not have access to internet by default, I must whitelist each computer, then individual software then individual websites first)
So, I obtain the offline installer from this URL https://download-installer.cdn.mozilla.net/pub/firefox/releases/111.0/win64/en-CA/Firefox%20Setup%20111.0.exe
Next I have used the website https://ffprofile.com/ to create a pre-made profile
This yields two files, and their contents profile.zip
profile\prefs.js profile\extensions\CanvasBlocker@kkapsner.de.xpi profile\extensions\uBlock0@raymondhill.net.xpi enterprise_policy.zip defaults\pref\autoconfig.js distribution\policies.json firefox.cfg
Next, I have pre-downloaded added all the add-on files I would like to install to the add-on folder However, when I perform the procedure, only canvas blocker and uBlock0 get installed
I'm not sure what I'm doing wrong. If I take all the add-on files, dump them all into firefox, it opens 16 tabs On each tab I can now click add and click okay, if I do it right and quick enough, they all install, unless I miss one.
That's over 50 clicks and very annoying !
Here is the list of add-ons I'm trying to add
extensions\umibo-2.4.2.xpi extensions\amp2html-2.1.0.xpi extensions\close_tabs_right-1.2.4.xpi extensions\cookie_autodelete-3.8.2.xpi extensions\copy_tabs-1.12.35.xpi extensions\darkreader-4.9.62.xpi extensions\facebook_container-2.3.9.xpi extensions\google_container-1.5.4.xpi extensions\istilldontcareaboutcookies-1.1.1.xpi extensions\merge_window-1.0.2.xpi extensions\old_reddit_redirect-1.6.1.xpi extensions\order_tabs_by_domain-0.2.3.xpi extensions\privacy_badger17-2023.1.31.xpi extensions\spoof_geolocation-0.1.1.xpi extensions\tab_manager_plus_for_firefox-5.2.0.xpi extensions\traduzir_paginas_web-9.6.1.xpi
I have created a script that I run after installing firefox using this command
"Firefox Setup 111.0.exe" /S
Then I run the following script to automatically install my pre-made profile
Firefox-deploy-ffprofile.bat
@echo off set z7EXE=%PROGRAMFILES%\7-Zip\7z.exe set EnterpriseConfig=firefox-profile\enterprise_policy.zip set ProfileConfig=firefox-profile\profile.zip set FirefoxProfile= set FirefoxInstallFolder=%PROGRAMFILES%\Mozilla Firefox\ set FirefoxProfilesFolder=%APPDATA%\Mozilla\Firefox\Profiles\
if not exist "%z7EXE%" ( echo could not find 7z.exe, cannot continue & goto end ) if not exist "%FirefoxInstallFolder%" ( echo firefox is not installed, cannot continue & goto end ) if not exist "%FirefoxProfilesFolder%"*.default-release ( echo Profile folder missing, starting and stopping firefox to create them "%PROGRAMFILES%\Mozilla Firefox\firefox.exe" & timeout /t 10 )
for /D %%i in ("%FirefoxProfilesFolder%"*.default-release) do (
if not defined FirefoxProfile (
set "FirefoxProfile=%%i" ) else ( set "FirefoxProfile=!FirefoxProfile!;%%i" ) )
echo Firefox profile is %FirefoxProfile% echo Is firefox running ? If yes, shutdown firefox tasklist /nh /fi "imagename eq firefox.exe" | find /i "firefox.exe" > nul if %errorlevel% equ 0 ( echo Shutting down firefox & taskkill /f /im firefox.exe & timeout /t 5 ) else ( echo Firefox was not running. )
tasklist /nh /fi "imagename eq firefox.exe" | find /i "firefox.exe" if %errorlevel% equ 0 (echo Firefox is still running & taskkill /f /im firefox.exe & timeout /t 5 )
echo Moving old profile out of the way, creating empty profile folder
move "%FirefoxProfile%" "%FirefoxProfilesFolder%%date%.%TIME:~0,2%h%TIME:~3,2%s%TIME:~6,2%.old-release"
md "%FirefoxProfile%"
echo Decompress pre-made profiles
"%z7EXE%" x "%ProfileConfig%" -y -o"%FirefoxProfile%" -bso0 -bsp2
"%z7EXE%" x "%EnterpriseConfig%" -y -o"%FirefoxInstallFolder%" -bso0 -bsp2
echo Starting firefox and waiting 20 seconds for addons to install timeout /t 1 & "%PROGRAMFILES%\Mozilla Firefox\firefox.exe" & timeout /t 20
echo Is firefox running ? If yes, shutdown firefox tasklist /nh /fi "imagename eq firefox.exe" | find /i "firefox.exe" > nul if %errorlevel% equ 0 ( echo Shutting down firefox & taskkill /f /im firefox.exe & timeout /t 5 )
tasklist /nh /fi "imagename eq firefox.exe" | find /i "firefox.exe" > nul if %errorlevel% equ 0 (echo Firefox is still running & taskkill /f /im firefox.exe & timeout /t 5 )
- end
echo firefox deployment finished
rem escalate script as needed rem pause at the end, unless unattend is a parameter
Here are all the settings which I have selected when I created the ffprofile
Disable firefox intro tabs on the first start Disable new tab page intro Disable Pocket Disable Sponsored Top Sites Disable about:config warning. Do not trim URLs in navigation bar Disable checking if Firefox is the default browser Disable reset prompt. Disable Heartbeat Userrating Content of the new tab page : empty Disable Firefox View Disable autoplay of
Disable Telemetry Disable health report Disable shield studies Disable experiments Disable Crash Reports Opt out metadata updates Disable google safebrowsing Disable malware scan Disable DNS over HTTPS Disable preloading of the new tab page. Disable about:addons' Get Add-ons panel Disable check for captive portal. Disables playback of DRM-controlled HTML5 content Disables the Widevine Content Decryption Module provided by Google Inc. Disable access to device sensor data Disable Firefox Suggest
Block Cookies : Block cookies, which are not from the site you're visiting Block Referer : spoof referer Disable DOM storage ** Disable IndexedDB (breaks things) ** Disable the Offline Cache. Sessionstore Privacy : never store extra session data Disable Link Prefetching Disable speculative website loading. Use a private container for new tab page thumbnails Disable WebGL Override graphics card vendor and model strings in the WebGL API Disable the clipboardevents.
Enable Do-not-Track (DNT) Enable resistFingerprinting Enable Mozilla Trackingprotection Enable firstparty isolation. ** Disable Browser Pings Disable TLS session identifiers Disable Beacons Disable the Battery API Disable media device queries Disable form autofill Disable webaudio API Disable video statistics Enable query parameter stripping
Disable automatic updates. Disable searching for updates.
Install CanvasBlocker extension. Install the Privacy Badger extension. Install uBlock Origin extension. Install Decentraleyes extension. Install ClearURLs extension. Install Temporary Containers extension. Install Firefox Multi-Account Containers extension Explicitly disable Greasemonkey user tracking
Disable Firefox accounts Show the bookmarks toolbar by default Disable system addon update
Here are the contents of the profile\prefs.js file
user_pref("app.normandy.api_url", ""); user_pref("app.normandy.enabled", false); user_pref("app.shield.optoutstudies.enabled", false); user_pref("app.update.auto", false); user_pref("beacon.enabled", false); user_pref("breakpad.reportURL", ""); user_pref("browser.aboutConfig.showWarning", false); user_pref("browser.cache.offline.enable", false); user_pref("browser.crashReports.unsubmittedCheck.autoSubmit", false); user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); user_pref("browser.crashReports.unsubmittedCheck.enabled", false); user_pref("browser.disableResetPrompt", true); user_pref("browser.newtab.preload", false); user_pref("browser.newtabpage.activity-stream.section.highlights.includePocket", false); user_pref("browser.newtabpage.enhanced", false); user_pref("browser.newtabpage.introShown", true); user_pref("browser.safebrowsing.appRepURL", ""); user_pref("browser.safebrowsing.blockedURIs.enabled", false); user_pref("browser.safebrowsing.downloads.enabled", false); user_pref("browser.safebrowsing.downloads.remote.enabled", false); user_pref("browser.safebrowsing.downloads.remote.url", ""); user_pref("browser.safebrowsing.enabled", false); user_pref("browser.safebrowsing.malware.enabled", false); user_pref("browser.safebrowsing.phishing.enabled", false); user_pref("browser.selfsupport.url", ""); user_pref("browser.send_pings", false); user_pref("browser.sessionstore.privacy_level", 0); user_pref("browser.shell.checkDefaultBrowser", false); user_pref("browser.startup.homepage_override.mstone", "ignore"); user_pref("browser.tabs.crashReporting.sendReport", false); user_pref("browser.tabs.firefox-view", false); user_pref("browser.urlbar.groupLabels.enabled", false); user_pref("browser.urlbar.quicksuggest.enabled", false); user_pref("browser.urlbar.speculativeConnect.enabled", false); user_pref("browser.urlbar.trimURLs", false); user_pref("datareporting.healthreport.service.enabled", false); user_pref("datareporting.healthreport.uploadEnabled", false); user_pref("datareporting.policy.dataSubmissionEnabled", false); user_pref("device.sensors.ambientLight.enabled", false); user_pref("device.sensors.enabled", false); user_pref("device.sensors.motion.enabled", false); user_pref("device.sensors.orientation.enabled", false); user_pref("device.sensors.proximity.enabled", false); user_pref("dom.battery.enabled", false); user_pref("dom.event.clipboardevents.enabled", false); user_pref("dom.webaudio.enabled", false); user_pref("experiments.activeExperiment", false); user_pref("experiments.enabled", false); user_pref("experiments.manifest.uri", ""); user_pref("experiments.supported", false); user_pref("extensions.CanvasBlocker@kkapsner.de.whiteList", ""); user_pref("extensions.autoDisableScopes", 14); user_pref("extensions.getAddons.cache.enabled", false); user_pref("extensions.getAddons.showPane", false); user_pref("extensions.greasemonkey.stats.optedin", false); user_pref("extensions.greasemonkey.stats.url", ""); user_pref("extensions.pocket.enabled", false); user_pref("extensions.shield-recipe-client.api_url", ""); user_pref("extensions.shield-recipe-client.enabled", false); user_pref("extensions.webservice.discoverURL", ""); user_pref("media.autoplay.default", 0); user_pref("media.autoplay.enabled", true); user_pref("media.eme.enabled", false); user_pref("media.gmp-widevinecdm.enabled", false); user_pref("media.navigator.enabled", false); user_pref("media.video_stats.enabled", false); user_pref("network.allow-experiments", false); user_pref("network.captive-portal-service.enabled", false); user_pref("network.cookie.cookieBehavior", 1); user_pref("network.dns.disablePrefetch", true); user_pref("network.dns.disablePrefetchFromHTTPS", true); user_pref("network.http.referer.spoofSource", true); user_pref("network.http.speculative-parallel-limit", 0); user_pref("network.predictor.enable-prefetch", false); user_pref("network.predictor.enabled", false); user_pref("network.prefetch-next", false); user_pref("network.trr.mode", 5); user_pref("privacy.donottrackheader.enabled", true); user_pref("privacy.donottrackheader.value", 1); user_pref("privacy.firstparty.isolate", true); user_pref("privacy.query_stripping", true); user_pref("privacy.trackingprotection.cryptomining.enabled", true); user_pref("privacy.trackingprotection.enabled", true); user_pref("privacy.trackingprotection.fingerprinting.enabled", true); user_pref("privacy.trackingprotection.pbmode.enabled", true); user_pref("privacy.usercontext.about_newtab_segregation.enabled", true); user_pref("security.ssl.disable_session_identifiers", true); user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite", false); user_pref("signon.autofillForms", false); user_pref("toolkit.telemetry.archive.enabled", false); user_pref("toolkit.telemetry.bhrPing.enabled", false); user_pref("toolkit.telemetry.cachedClientID", ""); user_pref("toolkit.telemetry.enabled", false); user_pref("toolkit.telemetry.firstShutdownPing.enabled", false); user_pref("toolkit.telemetry.hybridContent.enabled", false); user_pref("toolkit.telemetry.newProfilePing.enabled", false); user_pref("toolkit.telemetry.prompted", 2); user_pref("toolkit.telemetry.rejected", true); user_pref("toolkit.telemetry.reportingpolicy.firstRun", false); user_pref("toolkit.telemetry.server", ""); user_pref("toolkit.telemetry.shutdownPingSender.enabled", false); user_pref("toolkit.telemetry.unified", false); user_pref("toolkit.telemetry.unifiedIsOptIn", false); user_pref("toolkit.telemetry.updatePing.enabled", false); user_pref("webgl.renderer-string-override", " "); user_pref("webgl.vendor-string-override", " ");
Here are the contents of the profile\prefs.js file
// IMPORTANT: Start your code on the 2nd line pref("app.normandy.api_url", ""); pref("app.normandy.enabled", false); pref("app.shield.optoutstudies.enabled", false); pref("app.update.auto", false); pref("beacon.enabled", false); pref("breakpad.reportURL", ""); pref("browser.aboutConfig.showWarning", false); pref("browser.cache.offline.enable", false); pref("browser.crashReports.unsubmittedCheck.autoSubmit", false); pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); pref("browser.crashReports.unsubmittedCheck.enabled", false); pref("browser.disableResetPrompt", true); pref("browser.newtab.preload", false); pref("browser.newtabpage.activity-stream.section.highlights.includePocket", false); pref("browser.newtabpage.enhanced", false); pref("browser.newtabpage.introShown", true); pref("browser.safebrowsing.appRepURL", ""); pref("browser.safebrowsing.blockedURIs.enabled", false); pref("browser.safebrowsing.downloads.enabled", false); pref("browser.safebrowsing.downloads.remote.enabled", false); pref("browser.safebrowsing.downloads.remote.url", ""); pref("browser.safebrowsing.enabled", false); pref("browser.safebrowsing.malware.enabled", false); pref("browser.safebrowsing.phishing.enabled", false); pref("browser.selfsupport.url", ""); pref("browser.send_pings", false); pref("browser.sessionstore.privacy_level", 0); pref("browser.shell.checkDefaultBrowser", false); pref("browser.startup.homepage_override.mstone", "ignore"); pref("browser.tabs.crashReporting.sendReport", false); pref("browser.tabs.firefox-view", false); pref("browser.urlbar.groupLabels.enabled", false); pref("browser.urlbar.quicksuggest.enabled", false); pref("browser.urlbar.speculativeConnect.enabled", false); pref("browser.urlbar.trimURLs", false); pref("datareporting.healthreport.service.enabled", false); pref("datareporting.healthreport.uploadEnabled", false); pref("datareporting.policy.dataSubmissionEnabled", false); pref("device.sensors.ambientLight.enabled", false); pref("device.sensors.enabled", false); pref("device.sensors.motion.enabled", false); pref("device.sensors.orientation.enabled", false); pref("device.sensors.proximity.enabled", false); pref("dom.battery.enabled", false); pref("dom.event.clipboardevents.enabled", false); pref("dom.webaudio.enabled", false); pref("experiments.activeExperiment", false); pref("experiments.enabled", false); pref("experiments.manifest.uri", ""); pref("experiments.supported", false); pref("extensions.CanvasBlocker@kkapsner.de.whiteList", ""); pref("extensions.autoDisableScopes", 14); pref("extensions.getAddons.cache.enabled", false); pref("extensions.getAddons.showPane", false); pref("extensions.greasemonkey.stats.optedin", false); pref("extensions.greasemonkey.stats.url", ""); pref("extensions.pocket.enabled", false); pref("extensions.shield-recipe-client.api_url", ""); pref("extensions.shield-recipe-client.enabled", false); pref("extensions.webservice.discoverURL", ""); pref("media.autoplay.default", 0); pref("media.autoplay.enabled", true); pref("media.eme.enabled", false); pref("media.gmp-widevinecdm.enabled", false); pref("media.navigator.enabled", false); pref("media.video_stats.enabled", false); pref("network.allow-experiments", false); pref("network.captive-portal-service.enabled", false); pref("network.cookie.cookieBehavior", 1); pref("network.dns.disablePrefetch", true); pref("network.dns.disablePrefetchFromHTTPS", true); pref("network.http.referer.spoofSource", true); pref("network.http.speculative-parallel-limit", 0); pref("network.predictor.enable-prefetch", false); pref("network.predictor.enabled", false); pref("network.prefetch-next", false); pref("network.trr.mode", 5); pref("privacy.donottrackheader.enabled", true); pref("privacy.donottrackheader.value", 1); pref("privacy.firstparty.isolate", true); pref("privacy.query_stripping", true); pref("privacy.trackingprotection.cryptomining.enabled", true); pref("privacy.trackingprotection.enabled", true); pref("privacy.trackingprotection.fingerprinting.enabled", true); pref("privacy.trackingprotection.pbmode.enabled", true); pref("privacy.usercontext.about_newtab_segregation.enabled", true); pref("security.ssl.disable_session_identifiers", true); pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite", false); pref("signon.autofillForms", false); pref("toolkit.telemetry.archive.enabled", false); pref("toolkit.telemetry.bhrPing.enabled", false); pref("toolkit.telemetry.cachedClientID", ""); pref("toolkit.telemetry.enabled", false); pref("toolkit.telemetry.firstShutdownPing.enabled", false); pref("toolkit.telemetry.hybridContent.enabled", false); pref("toolkit.telemetry.newProfilePing.enabled", false); pref("toolkit.telemetry.prompted", 2); pref("toolkit.telemetry.rejected", true); pref("toolkit.telemetry.reportingpolicy.firstRun", false); pref("toolkit.telemetry.server", ""); pref("toolkit.telemetry.shutdownPingSender.enabled", false); pref("toolkit.telemetry.unified", false); pref("toolkit.telemetry.unifiedIsOptIn", false); pref("toolkit.telemetry.updatePing.enabled", false); pref("webgl.renderer-string-override", " "); pref("webgl.vendor-string-override", " ");
Here are the contents of the defaults\pref\autoconfig.js file
pref("general.config.filename", "firefox.cfg"); pref("general.config.obscure_value", 0);
Here are the contents of the distribution\policies.json file
{
"policies": { "NewTabPage": false, "ExtensionSettings": { "uBlock0@raymondhill.net": { "install_url": "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi", "installation_mode": "normal_installed" }, "CanvasBlocker@kkapsner.net": { "install_url": "https://addons.mozilla.org/firefox/downloads/latest/canvasblocker/latest.xpi", "installation_mode": "normal_installed" } }, "NetworkPrediction": false, "CaptivePortal": false, "DNSOverHTTPS": { "Enabled": false }, "DisableFirefoxStudies": true, "DisableTelemetry": true, "DisablePocket": true }
}
I wish this process was not so onerous as it has consumed my entire monday :( Thanks
Krejt Përgjigjet (2)
It seems the solution to my problem is maybe inside the distribution\policies.json file ?
But that file does point to mozilla.org, and yet currently those add-ons to install from the local provided files even though the internet is not connected !
I think the filename format is the cause, like uBlock0@raymondhill.net and CanvasBlocker@kkapsner.net CanvasBlocker@kkapsner.de.xpi / uBlock0@raymondhill.net.xpi
I just found this page
https://extensionworkshop.com/documentation/publish/distribute-sideloading/
Ensure the add-on includes an ID, by adding the following to its manifest.json file, replacing your-add-on-name@your-domain.com with a suitable ID for your add-on:
Rename your XPI file To use this method, your XPI file must be named using the add-on or application ID, as set in Preparing your add-on. The signed add-on file you downloaded from AMO will be named something like borderify-1.0-an+fx.xpi (see Signing and distributing your add-on for more details), change this to, for example, borderify@example.com.xpi.
opening traduzir_paginas_web-9.6.1.xpi 's manifest.json file, I see the following
"browser_specific_settings": { "gecko": { "id": "{036a55b4-5e72-4d05-a06c-cba2dfcc134a}", "strict_min_version": "63.0"
So perhaps changing the id to "id": "traduzir@paginas.web" and renaming the file to "traduzir@paginas.web.xpi"
Would be sufficient ?
It is unclear if I also need to add these to the distribution\policies.json file
perhaps
"traduzir@paginas.web": { "install_url": "https://addons.mozilla.org/firefox/downloads/latest/traduzir-paginas-web/latest.xpi", "installation_mode": "normal_installed" },
?
See:
- https://support.mozilla.org/en-US/kb/customizing-firefox-using-policiesjson
- https://github.com/mozilla/policy-templates/blob/master/README.md
You can check the mozilla.rsa file in the META-INF folder for the correct ID if there is no ID present in the manifest.json file.