Slackware-Libre/linux-libre-firmware-builde...

125 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
#######################################################################
# Slackware(64)-Libre script, part 3
# Linux-Libre firmware builder and installer
# written by krt@beauxbead.com / krt.beauxbead.com
# Released under the WTFPL 2.0 http://www.wtfpl.net/
#
# This is intended to be run as root. It builds the latest Linux-libre
# firmware and upgrades the stock firmware package to the libre one.
# Works on both 32-bit and 64-bit installations of Slackware 15.0.
# Slackware derivatives might also work, this is untested though.
#
# No guarantees are given, this script is highly experimental.
# Feel free to make changes and share with the community.
#######################################################################
# where is this script being run from?
CWD0=$(pwd)
# future proof the release version number
# to-do: make this work on -current?
RELEASE=${RELEASE:-$(grep '^VERSION=' /etc/os-release | cut -d '=' -f 2 | sed 's/"//g')}
# Uses mirrors.slackware.com to find a mirror near you, feel free to change to a local mirror
REPOURL=${REPOURL:-'https://mirrors.slackware.com'}
# prepare for kernel building
BUILDDIR=${BUILDDIR:-'/tmp/slackware-libre'}
# Set blacklist file, just in case...
BLACKLISTFILE=${BLACKLISTFILE:-'/etc/slackpkg/blacklist'}
# Set variable to 'yes' to install package after building:
INSTALL_FIRMWARE=${INSTALL_FIRMWARE:-'no'}
# download linux-libre firmware
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo '% Downloading Linux-Libre firmware'
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
rm -r ${BUILDDIR}/firmware
mkdir ${BUILDDIR}
mkdir ${BUILDDIR}/firmware
cd ${BUILDDIR}/firmware
wget $REPOURL/slackware/slackware64-$RELEASE/source/a/kernel-firmware/kernel-firmware.SlackBuild
wget $REPOURL/slackware/slackware64-$RELEASE/source/a/kernel-firmware/slack-desc
cp kernel-firmware.SlackBuild kernel-firmware-gnu.SlackBuild
chmod a+x kernel-firmware-gnu.SlackBuild
# patch SlackBuild and slack-desc to fit linux-libre-firmware using:
# sed -i 's/ --- / --- /' slack-desc
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo '% Patching SlackBuild and slack-desc files for linux-libre'
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
# patch kernel-firmware.SlackBuild
sed -i 's/PKGNAM=kernel-firmware/PKGNAM=kernel-firmware-gnu/' kernel-firmware-gnu.SlackBuild
sed -i 's/.*git.kernel.org\/pub\/scm\/linux\/kernel\/git\/firmware\/linux-firmware.git\/commit\/?id=HEAD | grep " committer " | head -n 1 | rev | cut -f 3 -d.*/ DATE="$(lynx -dump -width=256 https:\/\/jxself.org\/git\/linux-libre-firmware.git | grep "last change" | head -n 1 | cut -f 2 -d "," | cut -d" " -f2-4 | tr -d " ")"/' kernel-firmware-gnu.SlackBuild
sed -i 's/https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/firmware\/linux-firmware.git\/commit\/?id=HEAD | grep " commit " | head -n 1 | cut -f 2 -d ] | cut -b 1-7/"https:\/\/jxself.org\/git\/?p=linux-libre-firmware.git;a=commit" | grep " commit " | head -n 1 | cut -b 14-20/' kernel-firmware-gnu.SlackBuild
sed -i 's/git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/firmware\/linux-firmware.git/https:\/\/jxself.org\/git\/linux-libre-firmware.git/' kernel-firmware-gnu.SlackBuild
sed -i 's/kernel-firmware-$/kernel-firmware-gnu-$/' kernel-firmware-gnu.SlackBuild
sed -i 's/( cd linux-firmware/(cd linux-libre-firmware/' kernel-firmware-gnu.SlackBuild
sed -i 's/rm -rf linux-firmware/rm -rf linux-libre-firmware/' kernel-firmware-gnu.SlackBuild
sed -i 's/kernel-firmware-${DATE}/kernel-firmware-gnu-${DATE}/' kernel-firmware-gnu.SlackBuild
sed -i '/echo "Running make DESTDIR=$PKG ${INSTALLTARGET}..."/a make all' kernel-firmware-gnu.SlackBuild
sed -i 's/make DESTDIR=$PKG/make prefix=$PKG\/lib\/firmware/' kernel-firmware-gnu.SlackBuild
# Skip building ARM-based firmware, cross-compiler needed
sed -i "/# Better determine these the same way as above./a sed -i 's/all: aica ath9k_htc atusb av7110 carl9170fw cis dsp56k isci keyspan_pda openfwwf usbdux/all: ath9k_htc carl9170fw cis dsp56k ihex2fw isci keyspan_pda openfwwf usbdux/' linux-libre-firmware/Makefile" kernel-firmware-gnu.SlackBuild
# patch slack-desc
sed -i 's/kernel-firmware/kernel-firmware-gnu/' slack-desc
sed -i 's/kernel-firmware (Firmware for the kernel)/kernel-firmware-gnu (Firmware for the kernel)/' slack-desc
sed -i 's/Linux/Linux-libre/' slack-desc
sed -i 's/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/firmware\/linux-firmware.git/jxself.org\/git\/linux-libre-firmware.git/' slack-desc
# build firmware package
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo '% Building Linux-Libre firmware'
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
TMP=${BUILDDIR}/firmware ./kernel-firmware-gnu.SlackBuild
if [ $INSTALL_FIRMWARE == 'no' ]; then
# that should do it!
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo '% Linux-libre firmware has been built.'
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
cd ${CWD0}
exit 0
fi
# Remove stock firmware package
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo '% Removing stock firmware package'
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
removepkg kernel-firmware
# install firmware package
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo '% Installing Linux-Libre firmware'
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
installpkg ${BUILDDIR}/firmware/kernel-firmware-gnu*
# Add non-free packages to blacklist if not already blacklisted
if ! grep -q 'kernel-firmware' $BLACKLISTFILE ; then
# Blacklist stock firmware package
echo 'kernel-firmware' >> $BLACKLISTFILE
# Print out new blacklist
cat $BLACKLISTFILE
fi
# that should do it!
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo '% Linux-libre firmware has been built and installed.'
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
cd ${CWD0}
exit 0