125 lines
6.0 KiB
Bash
Executable File
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
|