Refactor download_stdout and remove snap/appimage attempts
This commit is contained in:
284
installJRMC
284
installJRMC
@@ -40,7 +40,7 @@ print_help() {
|
||||
If no options (excluding -d or --debug) are provided installJRMC defaults to '--install repo'.
|
||||
|
||||
OPTIONS
|
||||
--install, -i repo|local|snap
|
||||
--install, -i repo|local
|
||||
repo: Install MC from repository, updates are handled by the system package manager
|
||||
local: Build and install MC package locally from official source release
|
||||
--build[=suse|fedora|centos]
|
||||
@@ -432,7 +432,7 @@ get_latest_mc_version() {
|
||||
mc_version_source="containerized package manager"
|
||||
execute buildah rm "$cnt"
|
||||
# Fallback to webscrape
|
||||
elif MC_VERSION=$(download_stdout "$BOARD_URL" | grep -o "[0-9][0-9]\.[0-9]\.[0-9]\+" | head -n 1) \
|
||||
elif MC_VERSION=$(download "$BOARD_URL" "-" | grep -o "[0-9][0-9]\.[0-9]\.[0-9]\+" | head -n 1) \
|
||||
&& [[ $MC_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then
|
||||
mc_version_source="webscrape"
|
||||
# Fallback to hardcoded value
|
||||
@@ -664,7 +664,7 @@ install_mc_repo() {
|
||||
repo_text="deb [signed-by=$keyfile arch=amd64,i386,armhf,arm64] http://dist.jriver.com/$channel/mediacenter/ $MC_REPO main"
|
||||
fi
|
||||
echo "Installing JRiver Media Center RPM key"
|
||||
download "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" |
|
||||
download "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" "-" |
|
||||
gpg --dearmor | sudo tee "$keyfile" &>/dev/null
|
||||
;;
|
||||
*)
|
||||
@@ -1056,230 +1056,6 @@ install_mc_arch() {
|
||||
popd &>/dev/null || return
|
||||
}
|
||||
|
||||
# @description Installs MC via snap
|
||||
install_mc_snap() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
local snap_dir="$OUTPUT_DIR/snap"
|
||||
local snap_yaml="$snap_dir/snapcraft.yaml"
|
||||
|
||||
execute mkdir -p "$snap_dir" || { err "Could not create snap dir"; return 1; }
|
||||
|
||||
# Create snapcraft.yaml file
|
||||
cat <<-EOF > "$snap_yaml"
|
||||
name: $MC_PKG
|
||||
version: $MC_VERSION
|
||||
summary: JRiver Media Center $MC_VERSION
|
||||
description: |
|
||||
JRiver Media Center $MC_VERSION packaged as a snap
|
||||
base: core24
|
||||
confinement: strict
|
||||
grade: stable
|
||||
|
||||
parts:
|
||||
mediacenter:
|
||||
plugin: dump
|
||||
source: /build/SOURCES/${MC_DEB##*/}
|
||||
override-build: |
|
||||
mkdir -p \$SNAPCRAFT_PART_INSTALL
|
||||
dpkg-deb -x /build/SOURCES/${MC_DEB##*/} \$SNAPCRAFT_PART_INSTALL
|
||||
mkdir -p \$SNAPCRAFT_PART_INSTALL/meta/gui
|
||||
cp usr/share/applications/media_center_${MC_MVERSION}.desktop \$SNAPCRAFT_PART_INSTALL/meta/gui/mediacenter${MC_MVERSION}.desktop
|
||||
sed -i 's|^Icon=.*|Icon=mediacenter|' \$SNAPCRAFT_PART_INSTALL/meta/gui/mediacenter${MC_MVERSION}.desktop
|
||||
cp "usr/lib/jriver/Media Center ${MC_MVERSION}/Data/Default Art/Logo.png" \$SNAPCRAFT_PART_INSTALL/meta/gui/mediacenter.png
|
||||
stage-packages:
|
||||
- libc6
|
||||
- libasound2
|
||||
- libuuid1
|
||||
- libx11-6
|
||||
- libxext6
|
||||
- libxcb1
|
||||
- libxdmcp6
|
||||
- libstdc++6
|
||||
- libgtk-3-0
|
||||
- libgl1
|
||||
- libpango-1.0-0
|
||||
- libpangoft2-1.0-0
|
||||
- libnss3
|
||||
- libnspr4
|
||||
- python3
|
||||
- xdg-utils
|
||||
- libgomp1
|
||||
- libfribidi0
|
||||
- libfontconfig1
|
||||
- libfreetype6
|
||||
- libharfbuzz0b
|
||||
- libgbm1
|
||||
- libva2
|
||||
- libva-drm2
|
||||
- libvulkan1
|
||||
- mesa-vulkan-drivers
|
||||
- libwebkit2gtk-4.1-0
|
||||
|
||||
apps:
|
||||
mediacenter:
|
||||
command: usr/bin/mediacenter${MC_MVERSION}
|
||||
extensions:
|
||||
- gnome
|
||||
plugs:
|
||||
- network
|
||||
- desktop
|
||||
- desktop-legacy
|
||||
- home
|
||||
- x11
|
||||
- pulseaudio
|
||||
- alsa
|
||||
- opengl
|
||||
- removable-media
|
||||
EOF
|
||||
|
||||
# Be careful with snapcraft container paths
|
||||
# The container does not respect the --workdir
|
||||
# Also has incompatible --entrypoint so need to override manually
|
||||
if execute podman run --rm -it \
|
||||
-v "$OUTPUT_DIR:/build:Z" \
|
||||
-w /build \
|
||||
--entrypoint "" \
|
||||
ghcr.io/canonical/snapcraft:8_core24 \
|
||||
snapcraft snap -o "/build/snap/${MC_PKG}_${MC_VERSION}-${MC_RELEASE}.snap" --destructive-mode \
|
||||
&& [[ -f "$snap_dir/${MC_PKG}_${MC_VERSION}-${MC_RELEASE}.snap" ]]; then
|
||||
echo "Snap package built successfully: $snap_dir/${MC_PKG}_${MC_VERSION}-${MC_RELEASE}.snap"
|
||||
else
|
||||
err "Snap package build failed."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Offer to install the built snap package
|
||||
if ask_ok "Do you want to install the MC snap package?"; then
|
||||
# Must use --dangerous for local unsigned snaps
|
||||
if execute sudo snap install --dangerous "$snap_dir/${MC_PKG}_${MC_VERSION}-${MC_RELEASE}.snap"; then
|
||||
echo "Snap package installed successfully."
|
||||
else
|
||||
err "Snap installation failed."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# @description Installs MC via AppImage
|
||||
install_mc_appimage() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
local builder_dir
|
||||
builder_dir=$(mktemp -d) || { err "Failed to create temporary directory"; return 1; }
|
||||
local install_dir="/opt/jriver"
|
||||
local installed_app="$install_dir/$MC_PKG"
|
||||
local config_file="$builder_dir/appimage-builder.yml"
|
||||
local icon_rel="usr/lib/jriver/Media Center ${MC_MVERSION}/Data/Default Art/Logo.png"
|
||||
local desktop_rel="usr/share/applications/media_center_${MC_MVERSION}.desktop"
|
||||
|
||||
# Generate a YAML configuration for appimage-builder.
|
||||
cat <<-EOF > "$config_file"
|
||||
app:
|
||||
id: $MC_PKG
|
||||
version: "$MC_VERSION"
|
||||
exec: "mediacenter${MC_MVERSION}"
|
||||
app-run: |
|
||||
#!/usr/bin/env bash
|
||||
cmd=\$(basename "\$0")
|
||||
case "\$cmd" in
|
||||
mc${MC_MVERSION})
|
||||
# If invoked as "mc${MC_MVERSION}", run the stub binary from usr/lib/jriver/Media Center ${MC_MVERSION}/mc${MC_MVERSION}
|
||||
exec "\${APPDIR}/usr/lib/jriver/Media Center ${MC_MVERSION}/mc${MC_MVERSION}" "\$@"
|
||||
;;
|
||||
mediacenter${MC_MVERSION})
|
||||
# If invoked as "mediacenter${MC_MVERSION}", run the main binary from usr/bin
|
||||
exec "\${APPDIR}/usr/bin/mediacenter${MC_MVERSION}" "\$@"
|
||||
;;
|
||||
*)
|
||||
# Default to main binary
|
||||
exec "\${APPDIR}/usr/bin/mediacenter${MC_MVERSION}" "\$@"
|
||||
;;
|
||||
esac
|
||||
icon: "mediacenter.png"
|
||||
desktop-file: "mediacenter.desktop"
|
||||
ingredients:
|
||||
sources:
|
||||
- type: deb
|
||||
url: "file://$MC_DEB"
|
||||
extract: true
|
||||
build: {}
|
||||
output: "$builder_dir"
|
||||
EOF
|
||||
|
||||
# To supply required assets, extract them from the DEB.
|
||||
local temp_extract
|
||||
temp_extract=$(mktemp -d) || { err "Failed to create temporary extraction directory"; return 1; }
|
||||
if ! dpkg-deb -x "$MC_DEB" "$temp_extract"; then
|
||||
err "Failed to extract DEB for assets"
|
||||
execute rm -rf "$temp_extract"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Copy the icon and desktop file into the builder directory
|
||||
if ! cp "$temp_extract/$icon_rel" "$builder_dir/mediacenter.png"; then
|
||||
err "Failed to copy icon"
|
||||
execute rm -rf "$temp_extract" "$builder_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! cp "$temp_extract/$desktop_rel" "$builder_dir/mediacenter.desktop"; then
|
||||
err "Failed to copy desktop file"
|
||||
execute rm -rf "$temp_extract" "$builder_dir"
|
||||
return 1
|
||||
fi
|
||||
execute rm -rf "$temp_extract"
|
||||
|
||||
# Determine which appimage-builder binary to use
|
||||
local builder_app
|
||||
if command -v appimage-builder &>/dev/null; then
|
||||
builder_app="appimage-builder"
|
||||
else
|
||||
download "https://github.com/AppImage/AppImageBuilder/releases/latest/download/appimage-builder-$(uname -m).AppImage" "$builder_dir/appimage-builder"
|
||||
chmod +x "$builder_dir/appimage-builder"
|
||||
builder_app="$builder_dir/appimage-builder"
|
||||
fi
|
||||
|
||||
# Run appimage-builder with the generated YAML config
|
||||
if "$builder_app" --config "$config_file" --verbose; then
|
||||
local built_appimage
|
||||
built_appimage="$builder_dir/${MC_PKG}-${MC_VERSION}-$(uname -m).AppImage"
|
||||
if [[ ! -f "$built_appimage" ]]; then
|
||||
err "Built AppImage not found in $builder_dir"
|
||||
execute rm -rf "$builder_dir"
|
||||
return 1
|
||||
fi
|
||||
echo "AppImage built: $built_appimage"
|
||||
else
|
||||
err "appimage-builder failed"
|
||||
execute rm -rf "$builder_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Install the AppImage
|
||||
[[ -d "$install_dir" ]] || execute sudo mkdir -p "$install_dir"
|
||||
if execute sudo cp "$built_appimage" "$installed_app"; then
|
||||
execute sudo chmod +x "$installed_app"
|
||||
echo "AppImage installed to $installed_app"
|
||||
else
|
||||
err "Failed to install the AppImage to $install_dir"
|
||||
execute rm -rf "$builder_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Optionally create symlinks in /usr/local/bin for both invocation names
|
||||
if ask_ok "Create symlinks for mediacenter${MC_MVERSION} and mc${MC_MVERSION} in /usr/local/bin?"; then
|
||||
execute sudo ln -sf "$installed_app" "/usr/local/bin/mediacenter${MC_MVERSION}"
|
||||
execute sudo ln -sf "$installed_app" "/usr/local/bin/mc${MC_MVERSION}"
|
||||
fi
|
||||
|
||||
# Optionally run the installed AppImage immediately
|
||||
if ask_ok "Do you want to run the $MC_PKG AppImage now?"; then
|
||||
execute "$installed_app" || { err "Running $MC_PKG failed"; execute rm -rf "$builder_dir"; return 1; }
|
||||
fi
|
||||
|
||||
execute rm -rf "$builder_dir"
|
||||
return 0
|
||||
}
|
||||
|
||||
# @description Copy the RPM to createrepo-webroot and run createrepo as the createrepo-user
|
||||
run_createrepo() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
@@ -1956,31 +1732,6 @@ main() {
|
||||
disable_btrfs_cow
|
||||
fi
|
||||
|
||||
if ((SNAP_INSTALL_SWITCH)); then
|
||||
acquire_deb || { err "Could not download Media Center DEB package"; return 1; }
|
||||
install_package snapd podman
|
||||
if ! systemctl is-active --quiet snapd.socket; then
|
||||
execute sudo systemctl enable --now snapd.socket
|
||||
fi
|
||||
if install_mc_snap; then
|
||||
echo "JRiver Media Center installed successfully from snap"
|
||||
else
|
||||
err "JRiver Media Center snap installation failed"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if ((APPIMAGE_INSTALL_SWITCH)); then
|
||||
acquire_deb || { err "Could not download Media Center DEB package"; return 1; }
|
||||
install_package dpkg
|
||||
if install_mc_appimage; then
|
||||
echo "JRiver Media Center installed successfully from AppImage"
|
||||
else
|
||||
err "JRiver Media Center AppImage installation failed"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if ((CREATEREPO_SWITCH)); then
|
||||
if run_createrepo; then
|
||||
echo "Successfully updated repo"
|
||||
@@ -2004,16 +1755,6 @@ main() {
|
||||
done
|
||||
unset service
|
||||
fi
|
||||
|
||||
# for _container in "${CONTAINERS[@]}"; do
|
||||
# if ! "_container_$_container"; then
|
||||
# if [[ $? -eq 127 ]]; then
|
||||
# err "Container $_container does not exist, check container name"
|
||||
# else
|
||||
# err "Failed to create container: $_container"
|
||||
# fi
|
||||
# fi
|
||||
# done
|
||||
}
|
||||
|
||||
# @section Helper functions
|
||||
@@ -2042,11 +1783,11 @@ download() {
|
||||
if [[ -n "$output" ]]; then
|
||||
cmd+=(--output "$output")
|
||||
else
|
||||
cmd+=(-O)
|
||||
cmd+=(--remote-name)
|
||||
fi
|
||||
elif command -v wget &>/dev/null || install_package --silent wget; then
|
||||
cmd=(wget --quiet)
|
||||
[[ -n "$output" ]] && cmd+=("--output-document=$output")
|
||||
[[ -n "$output" ]] && cmd+=(--output-document="$output")
|
||||
else
|
||||
err "Unable to install wget or curl"
|
||||
return 1
|
||||
@@ -2054,21 +1795,6 @@ download() {
|
||||
|
||||
execute "${cmd[@]}" "$url"
|
||||
}
|
||||
download_stdout() {
|
||||
local url="$1"
|
||||
local -a cmd
|
||||
|
||||
if command -v curl &>/dev/null; then
|
||||
cmd=(curl --silent --fail --location -o - "$url")
|
||||
elif command -v wget &>/dev/null; then
|
||||
cmd=(wget --quiet -O - "$url")
|
||||
else
|
||||
err "Neither curl nor wget is available"
|
||||
return 1
|
||||
fi
|
||||
|
||||
"${cmd[@]}"
|
||||
}
|
||||
|
||||
# Roughly turn debugging on for pre-init
|
||||
# Reset and reparse in parse_input() with getopt
|
||||
|
||||
Reference in New Issue
Block a user