Skip to content

Instantly share code, notes, and snippets.

@oprietop
Forked from corrupt/update-zfs.sh
Created July 25, 2023 06:37
Show Gist options
  • Save oprietop/539fd1c85a55538138814d9039199b34 to your computer and use it in GitHub Desktop.
Save oprietop/539fd1c85a55538138814d9039199b34 to your computer and use it in GitHub Desktop.
Bash helper script to update zfs-linux and zfs-utils on arch linux from the arch-zfs repo. I use it whenever the kernel revision in arch's official repos is ahead of arch-zfs. This script will pull a matching kernel version from archive.archlinux.org.
#!/bin/bash
##
#
# update-zfs.sh
#
# simple ZFS update script for arch linux
#
# will update zfs-linux and zfs-utils to their latest versions in the arch-zfs repo
# will retrieve mathching kernel packages from the arch linux package archive, even
# if newer are avaiable, if packages in arch-zfs haven't been updated yet
#
# author: corrupt
# license: as-is
# date: 2021-02-04
# version: 0.1
#
##
#set -x
# dependencies
PACMAN="/usr/bin/pacman"
GREP="/usr/bin/grep"
CUT="/usr/bin/cut"
DATE="/usr/bin/date"
XARGS="/usr/bin/xargs"
WGET="/usr/bin/wget"
# dependency check
DEPS=( $PACMAN $GREP $CUT $DATE $XARGS $WGET )
for dep in ${DEPS[@]}; do
if [ ! -f ${dep} ]; then
echo "This script depens on ${dep}. Either install it, or adapt its path in ${0} before continuing"
exit 1
fi
done
# variable construction
PKG_SUFX="-x86_64.pkg.tar.zst"
PKG_DIR="/var/cache/pacman/pkg/"
ZFS_DATE=$(${PACMAN} -Si zfs-linux | ${GREP} "Build Date" | ${CUT} -d: -f2)
URL_DATE=$(${DATE} --date="${ZFS_DATE}" +%Y/%m/%d)
URL_PREF="https://archive.archlinux.org/repos/${URL_DATE}/core/os/x86_64/"
# version extraction
ZFS_VER=$(${PACMAN} -Si zfs-linux | ${GREP} "Version" | ${CUT} -d: -f2 | ${XARGS})
ZUT_VER=$(${PACMAN} -Si zfs-utils | ${GREP} "Version" | ${CUT} -d: -f2 | ${XARGS})
ZFS_KVER=$(${PACMAN} -Si zfs-linux | ${GREP} "Depends On" | ${GREP} -o "linux=\S*" | ${CUT} -d= -f2 | ${XARGS})
# package name construction
KERNEL_PKG="linux-${ZFS_KVER}${PKG_SUFX}"
HEADER_PKG="linux-headers-${ZFS_KVER}${PKG_SUFX}"
ZFS_PKG="zfs-linux-${ZFS_VER}${PKG_SUFX}"
ZUT_PKG="zfs-utils-${ZUT_VER}${PKG_SUFX}"
# retrieve matching kernel packages
${WGET} -cP ${PKG_DIR} ${URL_PREF}${KERNEL_PKG}
${WGET} -cP ${PKG_DIR} ${URL_PREF}${KERNEL_PKG}.sig
${WGET} -cP ${PKG_DIR} ${URL_PREF}${HEADER_PKG}
${WGET} -cP ${PKG_DIR} ${URL_PREF}${HEADER_PKG}.sig
# retrieve zfs and zfs-utils from repo
${PACMAN} --noconfirm -Sdw zfs-linux zfs-utils
# install all packages with regular user interaction (pacman -U checks signatures)
${PACMAN} -U ${PKG_DIR}${KERNEL_PKG} ${PKG_DIR}${HEADER_PKG} ${PKG_DIR}${ZFS_PKG} ${PKG_DIR}${ZUT_PKG}
#vim: ft=bash
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment