|
#!/bin/sh -eu |
|
|
|
# Make sure we have wget or curl |
|
available () { |
|
command -v "$1" >/dev/null 2>&1 |
|
} |
|
if available wget; then |
|
DL="wget -O-" |
|
DL_SL="wget -qO-" |
|
elif available curl; then |
|
DL="curl -L" |
|
DL_SL="curl -s" |
|
else |
|
echo "Install Wget or cURL" >&2 |
|
exit 1 |
|
fi |
|
|
|
# Find a URL to a suitable armhf ChromeOS recovery image |
|
CHROMEOS_URL="$($DL_SL https://dl.google.com/dl/edgedl/chromeos/recovery/recovery.conf | grep -A11 CB5-312T | sed -n 's/^url=//p')" |
|
CHROMEOS_IMG="$(basename "$CHROMEOS_URL" .zip)" |
|
if [ -e "$CHROMEOS_IMG" ]; then |
|
CHROMEOS_IMG_PATH="./" |
|
DEL_IMG=N |
|
else |
|
CHROMEOS_IMG_PATH="$(mktemp -td ChromeOS-IMG.XXXXXX)" |
|
DEL_IMG=Y |
|
# Fetch the recovery image (2Gb+ on disk after download) |
|
$DL "$CHROMEOS_URL" | zcat > "$CHROMEOS_IMG_PATH/$CHROMEOS_IMG" |
|
fi |
|
|
|
# Note the next free loop device in a variable |
|
LOOPD="$(losetup -f)" |
|
|
|
# If root, we can mount silently (no popup windows after mount) |
|
if [ "$USER" = "root" ]; then |
|
MNTPNT="$(mktemp -d -t ChromeOS.XXXXXX)" |
|
losetup -Pf "$CHROMEOS_IMG_PATH/$CHROMEOS_IMG" |
|
mount -o ro "${LOOPD}p3" "$MNTPNT" |
|
else |
|
# Associate all the partitions on the disk image with loop devices: |
|
udisksctl loop-setup -rf "$CHROMEOS_IMG_PATH/$CHROMEOS_IMG" |
|
sleep 1 |
|
# Mount the third partition of the disk image (if the previous did not do it automatically) |
|
if ! lsblk -lo MOUNTPOINT "${LOOPD}p3" | tail -n1 | grep -q \.; then |
|
udisksctl mount -b "${LOOPD}p3" |
|
fi |
|
# Note the mount point in a variable |
|
MNTPNT="$(lsblk -lo MOUNTPOINT "${LOOPD}p3" | tail -n1)" |
|
fi |
|
|
|
# Copy over files and make manifest |
|
CHRFILES="$(mktemp -d -t ChromeOS_Files.XXXXXX)" |
|
install -Dm644 "$MNTPNT"/opt/google/chrome/libwidevinecdm.so "$CHRFILES"/opt/WidevineCdm/_platform_specific/linux_arm/libwidevinecdm.so |
|
WVVER="$(grep -Eaom1 '([0-9]+\.){3}[0-9]+' "$CHRFILES"/opt/WidevineCdm/_platform_specific/linux_arm/libwidevinecdm.so)" |
|
WVMGR="$(echo $WVVER | cut -d. -f1)" |
|
WVMIN="$(echo $WVVER | cut -d. -f2)" |
|
echo "{\"version\":\"$WVVER\",\"x-cdm-codecs\":\"vp8,vp9.0,avc1,av01\",\"x-cdm-host-versions\":\"$WVMIN\",\"x-cdm-interface-versions\":\"$WVMIN\",\"x-cdm-module-versions\":\"$WVMGR\"}" > "$CHRFILES"/opt/WidevineCdm/manifest.json |
|
|
|
# Extract the libs out and copy them to a compressed tar archive |
|
ARCHIVE_NAME="widevine-flash-$(date '+%Y%m%d')_armhf.tgz" |
|
echo "Extracting and compressing files" |
|
tar -C"$CHRFILES" -caf "$ARCHIVE_NAME" opt/WidevineCdm/manifest.json opt/WidevineCdm/_platform_specific/linux_arm/libwidevinecdm.so --format ustar --owner 0 --group 0 |
|
rm -r "$CHRFILES" |
|
echo "Created: $ARCHIVE_NAME" |
|
|
|
# Cleanup |
|
if [ "$USER" = "root" ]; then |
|
umount "$MNTPNT" |
|
losetup -d "$LOOPD" |
|
rmdir "$MNTPNT" |
|
else |
|
ALLMNTS="$(lsblk -lo NAME,MOUNTPOINT "$LOOPD" | sed -n '/\//s/^\(loop[0-9]\+p[0-9]\+\).*/\1/p')" |
|
echo "$ALLMNTS" | xargs -I{} -n1 udisksctl unmount -b /dev/{} |
|
if [ "$LOOPD" != "$(losetup -f)" ]; then |
|
udisksctl loop-delete -b "$LOOPD" |
|
fi |
|
fi |
|
if [ "$DEL_IMG" = "N" ] || [ "${1:-EMPTY}" = "-k" ]; then |
|
: |
|
else |
|
rm "$CHROMEOS_IMG_PATH/$CHROMEOS_IMG" |
|
rmdir -v "$CHROMEOS_IMG_PATH" |
|
fi |
|
|
|
# Inform the user how to proceed |
|
cat <<EOF |
|
|
|
To install the contents of these files on an ARMhf device, copy the tar archive over to the target machine and issue the following: |
|
|
|
sudo tar Cfx / $ARCHIVE_NAME |
|
|
|
After install of these libraries, issue the following two commands and restart Vivaldi: |
|
|
|
mkdir -p ~/.config/vivaldi/WidevineCdm |
|
echo '{"Path":"/opt/WidevineCdm"}' > ~/.config/vivaldi/WidevineCdm/latest-component-updated-widevine-cdm |
|
|
|
EOF |
/widevine-flash_armhf.sh 23:32:58
--2022-10-19 23:33:05-- https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_14989.107.0_elm_recovery_stable-channel_mp-v2.bin.zip
CA certificate ("/etc/ssl/certs/ca-certificates.crt") loaded
Unlocking dl.google.com (dl.google.com)… 2a00:1450:400d:80a::200e, 142.250.201.206
Connecting to dl.google.com (dl.google.com)[2a00:1450:400d:80a::200e]:443… connected.
HTTP request sent, waiting for response... 200 OK
Length: 1290184868 (1.2G) [application/zip]
Save to "STDOUT"
2022-10-19 23:34:11 (18.9 MB/s) -- written to stdout [1290184868/1290184868]
Mapped file /tmp/ChromeOS-IMG.1mWSXd/chromeos_14989.107.0_elm_recovery_stable-channel_mp-v2.bin as /dev/loop2.
Mounted /dev/loop2p3 at /run/media/gyurmo/ROOT-A
install: stat '/run/media/gyurmo/ROOT-A/opt/google/chrome/libwidevinecdm.so' failed: No such file or directory