|
|
|
|
@ -46,6 +46,10 @@ var forbiddenFirefoxDebPackages = map[string]struct{}{
|
|
|
|
|
"util-linux": {},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var optionalFirefoxDebPackages = map[string]string{
|
|
|
|
|
"lubuntu-icon-theme": "theme package may conflict with existing adwaita-icon-theme-full and is not required by Firefox",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type firefoxBundleInstallPlan struct {
|
|
|
|
|
TotalPackageCount int
|
|
|
|
|
HasFirefoxPackage bool
|
|
|
|
|
@ -94,6 +98,8 @@ func installFirefox() error {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
baseSystemPackages := strings.Join(plan.BaseSystemPackages, " ")
|
|
|
|
|
optionalSkipPackages := strings.Join(optionalFirefoxDebPackageNames(), " ")
|
|
|
|
|
kioskInfof("firefox install package filter baseSystemPackages=%q optionalSkipPackages=%q", baseSystemPackages, optionalSkipPackages)
|
|
|
|
|
|
|
|
|
|
var p struct {
|
|
|
|
|
DebPkgPath string `json:"DebPkgPath"`
|
|
|
|
|
@ -129,9 +135,11 @@ echo ""
|
|
|
|
|
|
|
|
|
|
echo "3. filter Firefox deb packages..."
|
|
|
|
|
base_system_packages=%s
|
|
|
|
|
optional_skip_packages=%s
|
|
|
|
|
mkdir -p /opt/firefox-installable
|
|
|
|
|
selected_count=0
|
|
|
|
|
skipped_installed_count=0
|
|
|
|
|
skipped_optional_count=0
|
|
|
|
|
selected_missing_base_count=0
|
|
|
|
|
selected_regular_count=0
|
|
|
|
|
firefox_selected=0
|
|
|
|
|
@ -170,6 +178,14 @@ for deb in /opt/firefox-deb/*.deb; do
|
|
|
|
|
continue
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
case " $optional_skip_packages " in
|
|
|
|
|
*" $pkg "*)
|
|
|
|
|
echo "skip optional package: $file package=$pkg"
|
|
|
|
|
skipped_optional_count=$((skipped_optional_count + 1))
|
|
|
|
|
continue
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
case " $base_system_packages " in
|
|
|
|
|
*" $pkg "*)
|
|
|
|
|
if [ "$installed" -eq 1 ]; then
|
|
|
|
|
@ -193,7 +209,7 @@ for deb in /opt/firefox-deb/*.deb; do
|
|
|
|
|
select_deb
|
|
|
|
|
selected_regular_count=$((selected_regular_count + 1))
|
|
|
|
|
done
|
|
|
|
|
echo "selected packages: $selected_count, selected missing base: $selected_missing_base_count, selected regular: $selected_regular_count, skipped installed: $skipped_installed_count"
|
|
|
|
|
echo "selected packages: $selected_count, selected missing base: $selected_missing_base_count, selected regular: $selected_regular_count, skipped installed: $skipped_installed_count, skipped optional: $skipped_optional_count"
|
|
|
|
|
if [ "$selected_count" -eq 0 ]; then
|
|
|
|
|
echo "error: no packages selected for install"
|
|
|
|
|
exit 1
|
|
|
|
|
@ -205,7 +221,12 @@ fi
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
echo "4. install selected Firefox packages..."
|
|
|
|
|
cd /opt/firefox-installable && sudo dpkg -i ./*.deb || { echo "error: install selected Firefox deb packages failed"; exit 1; }
|
|
|
|
|
cd /opt/firefox-installable || { echo "error: enter installable package directory failed"; exit 1; }
|
|
|
|
|
install_status=0
|
|
|
|
|
sudo dpkg -i ./*.deb || install_status=$?
|
|
|
|
|
if [ "$install_status" -ne 0 ]; then
|
|
|
|
|
echo "warning: selected Firefox deb package install returned status $install_status, verify Firefox next"
|
|
|
|
|
fi
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
echo "5. verify Firefox..."
|
|
|
|
|
@ -213,7 +234,7 @@ firefox --version || { echo "error: Firefox verification failed"; exit 1; }
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
echo "=== Firefox install complete ==="
|
|
|
|
|
`, shellQuote(bundlePath), shellQuote(baseSystemPackages)))
|
|
|
|
|
`, shellQuote(bundlePath), shellQuote(baseSystemPackages), shellQuote(optionalSkipPackages)))
|
|
|
|
|
command.Stdout = os.Stdout
|
|
|
|
|
command.Stderr = os.Stderr
|
|
|
|
|
|
|
|
|
|
@ -351,6 +372,15 @@ func unsafeFirefoxDebPackages(packages []string) []string {
|
|
|
|
|
return blocked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func optionalFirefoxDebPackageNames() []string {
|
|
|
|
|
names := make([]string, 0, len(optionalFirefoxDebPackages))
|
|
|
|
|
for name := range optionalFirefoxDebPackages {
|
|
|
|
|
names = append(names, name)
|
|
|
|
|
}
|
|
|
|
|
sort.Strings(names)
|
|
|
|
|
return names
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func shellQuote(value string) string {
|
|
|
|
|
return "'" + strings.ReplaceAll(value, "'", "'\\''") + "'"
|
|
|
|
|
}
|
|
|
|
|
|