cookutils annotate cooklinux @ rev 1019

cook: add fix() to use '--as-needed' linker flag in compile_rules(); cookit(): make QA fail on empty vars / bad values; remove_already_packed(): fix bug when $PACKAGE not listed in $SPLIT and we use this function for the default set. lighttpd/index.cgi: sort orphans. modules/precheck: separate error message by empty lines.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Thu Dec 07 14:31:28 2017 +0200 (2017-12-07)
parents 9611369825b9
children
rev   line source
pankso@633 1 #!/bin/sh
pankso@633 2 #
pankso@633 3 # Simple utility to compile from scratch a custom Linux kernel on SliTaz.
paul@638 4 # No patches, aufs and co, keep it simple. The goal is to let users build
pankso@633 5 # a custom and optimized kernel in a few commands
pankso@633 6 #
pankso@888 7 # Copyright (C) 2014-17 SliTaz GNU/Linux - BSD License
pankso@633 8 #
pankso@633 9 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@633 10 #
al@728 11
pankso@633 12 . /lib/libtaz.sh
pankso@633 13 . /etc/slitaz/slitaz.conf
pankso@633 14
pankso@633 15 version="$1"
al@728 16 cookdir='/home/slitaz/src'
al@728 17 srcurl='https://www.kernel.org/pub/linux/kernel'
pankso@633 18
pankso@633 19 check_root
pankso@633 20
al@728 21
pankso@633 22 # Help and usage
al@728 23
pankso@633 24 usage() {
al@728 25 cat <<EOT
pankso@633 26
pankso@633 27 SliTaz Linux Kernel cooker
pankso@633 28
al@728 29 $(boldify 'Usage:') $(basename $0) [version] [--options]
pankso@633 30
al@728 31 $(boldify 'Options:')
paul@639 32 --clean Remove various generated files but keep the config
paul@639 33 --mrproper Remove all generated files + config + backup files
pankso@633 34 --defconfig New config with default from ARCH supplied defconfig
pankso@633 35 --tazconfig New config using current SliTaz /proc/config.gz
pankso@888 36 --allno New minimal config answering no to everything
pankso@633 37 --localmod Update config removing all unloaded modules
pankso@633 38 --config Update current config with a text based front-end
pankso@633 39 --menuconfig Update current config with a menu based program
pankso@633 40 --xconfig Update current config with a QT based front-end
pankso@633 41 --gconfig Update current config with a GTK based front-end
pankso@633 42 --bzImage Build the compressed kernel image
pankso@633 43 --modules Build all kernel modules
pankso@633 44
al@728 45 $(boldify 'Examples:')
pankso@633 46 $(basename $0) 3.8.3 --defconfig --menuconfig --bzImage
pankso@633 47 $(basename $0) 3.2.14 --tazconfig --bzImage --modules
pankso@633 48
pankso@633 49 EOT
pankso@633 50 }
pankso@633 51
al@728 52
pankso@633 53 # Check and install a packages
al@728 54
pankso@633 55 check_pkg() {
pankso@633 56 if [ ! -f "$PKGS_DB/installed/$1/receipt" ]; then
al@728 57 echo -n "Installing package:"; colorize 34 " $1"
pankso@633 58 tazpkg -gi $1 2>/dev/null >/dev/null
pankso@633 59 fi
pankso@633 60 }
pankso@633 61
al@728 62
pankso@633 63 #
psychomaniak@826 64 # Commands/help - Support 4.x, 3.x, 2.6 and 2.4 kernels.
pankso@633 65 #
al@728 66
pankso@633 67 case "$1" in
psychomaniak@826 68 4.*) wgeturl="${srcurl}/v4.x/" ;;
al@728 69 3.*) wgeturl="${srcurl}/v3.0/" ;;
pankso@633 70 2.6.*) wgeturl="${srcurl}/v2.6/" ;;
pankso@633 71 2.4.*) wgeturl="${srcurl}/v2.4/" ;;
pankso@633 72 -h|-u|help|usage|"")
al@728 73 usage; exit 0 ;;
pankso@633 74 esac
pankso@633 75
al@728 76
pankso@633 77 # Sanity check
al@728 78 if [ -z "$wgeturl" ]; then
al@728 79 echo 'Unable to set download url';
al@728 80 exit 0
al@728 81 fi
al@728 82
pankso@633 83
pankso@633 84 #
pankso@633 85 # Build start
pankso@633 86 #
pankso@633 87
al@728 88 echo -n 'Building Linux kernel:'; colorize 32 " $version"
al@728 89 echo -n 'Source directory:'; colorize 30 " $cookdir"
pankso@633 90
pankso@633 91 # Install needed packages to compile.
pankso@878 92 for pkg in slitaz-toolchain pkg-config perl xz lzma patch tar bc flex
pankso@878 93 do
pankso@888 94 check_pkg ${pkg}
pankso@633 95 done
pankso@633 96
pankso@633 97 # Get the source and extract tarball.
pankso@633 98 mkdir -p $cookdir && cd $cookdir || exit 1
pankso@633 99 if [ ! -f "linux-$version.tar.xz" ]; then
pankso@633 100 echo "Downloading Linux kernel source..."
pankso@633 101 wget -c --no-check-certificate ${wgeturl}linux-$version.tar.xz
pankso@633 102 fi
pankso@633 103 if [ ! -d "linux-$version" ]; then
pankso@633 104 echo "Extracting: linux-$version.tar.xz"
al@728 105 unxz -c linux-$version.tar.xz | tar -xf -
pankso@633 106 fi
pankso@633 107
pankso@633 108 # Clean-up and get or update config
pankso@633 109 cd linux-$version
pankso@633 110
al@728 111 if [ -n "$clean" ]; then
pankso@633 112 make clean
pankso@633 113 rm -rf slitaz
pankso@633 114 fi
pankso@633 115
al@728 116 if [ -n "$mrproper" ]; then
pankso@633 117 make mrproper
pankso@633 118 rm -rf slitaz
pankso@633 119 fi
pankso@633 120
pankso@633 121 # Get SliTaz current config.
al@728 122 if [ -n "$tazconfig" ]; then
al@728 123 echo 'Using current SliTaz config: /proc/config.gz'
pankso@633 124 zcat /proc/config.gz > .config
pankso@633 125 yes '' | make oldconfig
pankso@633 126 fi
pankso@633 127
pankso@633 128 # Create a new default config.
al@728 129 if [ -n "$defconfig" ]; then
pankso@633 130 make defconfig
pankso@633 131 fi
pankso@633 132
pankso@888 133 # Create a minimal config file.
pankso@888 134 if [ -n "$allno" ]; then
pankso@888 135 make allnoconfig
pankso@888 136 fi
pankso@888 137
pankso@633 138 # Update config and wipe out unloaded modules.
al@728 139 if [ -n "$localmod" ]; then
pankso@633 140 make localmodconfig
pankso@633 141 fi
pankso@633 142
al@728 143
pankso@633 144 #
pankso@633 145 # Configurators text/ncurses/Qt/GTK
pankso@633 146 #
pankso@633 147
al@728 148 if [ -n "$config" ]; then
al@728 149 echo 'Starting Text mode configuration tool...'
pankso@633 150 make config
pankso@633 151 fi
pankso@633 152
al@728 153 if [ -n "$menuconfig" ]; then
al@728 154 echo 'Starting Ncurses configuration tool...'
pankso@633 155 check_pkg ncurses-dev
pankso@633 156 make menuconfig
pankso@633 157 fi
pankso@633 158
al@728 159 if [ -n "$xconfig" ]; then
al@728 160 echo 'Starting Qt configuration tool...'
psychomaniak@826 161 check_pkg Qt4-dev
pankso@633 162 make xconfig
pankso@633 163 fi
pankso@633 164
al@728 165 if [ -n "$gconfig" ]; then
al@728 166 echo 'Starting GTK+ configuration tool...'
pankso@633 167 check_pkg gtk+-dev
pankso@633 168 check_pkg libglade-dev
pankso@633 169 make gconfig
pankso@633 170 fi
pankso@633 171
al@728 172 if [ -n "$bzImage" ]; then
al@728 173 echo 'Building bzImage...'
pankso@633 174 make bzImage || exit 1
pankso@633 175 mkdir -p slitaz/linux-custom-$version/fs/boot
pankso@633 176 cp -f arch/x86/boot/bzImage \
pankso@633 177 slitaz/linux-custom-$version/fs/boot/vmlinuz-$version
pankso@633 178 fi
al@728 179
al@728 180 if [ -n "$modules" ]; then
al@728 181 echo 'Building modules...'
pankso@633 182 make modules || exit 1
pankso@633 183 make INSTALL_MOD_PATH=slitaz/linux-custom-$version/fs modules_install
pankso@633 184 rm -f slitaz/linux-custom-$version/fs/lib/modules/$version/build
pankso@633 185 rm -f slitaz/linux-custom-$version/fs/lib/modules/$version/source
pankso@633 186 fi
pankso@633 187
al@728 188
pankso@633 189 #
pankso@633 190 # Packaging
pankso@633 191 #
pankso@633 192
pankso@633 193 if [ -d "slitaz/linux-custom-$version/fs" ]; then
al@728 194 echo 'Packing Linux...'
pankso@633 195 cd slitaz
pankso@633 196 else
al@728 197 echo -n 'Packing Linux:'; colorize 31 ' not yet built'
pankso@633 198 exit 0
pankso@633 199 fi
pankso@633 200
pankso@633 201 # Receipt.
al@728 202 echo 'Creating the receipt...'
al@728 203 cat > linux-custom-$version/receipt <<EOF
pankso@633 204 # SliTaz package receipt.
pankso@633 205
pankso@633 206 PACKAGE="linux-custom"
pankso@633 207 VERSION="$version"
pankso@633 208 CATEGORY="base-system"
pankso@633 209 SHORT_DESC="The Linux kernel and modules."
pankso@633 210 MAINTAINER="devel@slitaz.org"
pankso@633 211 WEB_SITE="http://www.kernel.org/"
pankso@633 212
pankso@633 213 DEPENDS="kmod"
pankso@633 214
pankso@633 215 ## Pre and post install commands for Tazpkg.
pankso@633 216 post_install()
pankso@633 217 {
pankso@633 218 echo "Processing post-install commands..."
pankso@633 219 depmod -a \$VERSION-custom
pankso@633 220 echo "Check your GRUB menu.lst to boot your new kernel"
pankso@633 221 }
pankso@633 222
pankso@633 223 EOF
pankso@633 224
pankso@633 225 ## Pre and post install commands for Tazpkg/Spk.
pankso@633 226 #post_install()
pankso@633 227 #{
pankso@633 228 #echo "Processing post-install commands..."
pankso@633 229 #chroot "\$1/" depmod -a \$VERSION
pankso@633 230 ## GRUB stuff.
pankso@633 231 #if [ -f "\$1/boot/grub/menu.lst" ]; then
pankso@633 232 #root_dev=\$(cat $1/boot/grub/menu.lst | grep root= | sed 's/.*root=\([^ ]*\).*/\1/' | head -n 1)
pankso@633 233 #grub_dev=\$(cat $1/boot/grub/menu.lst | grep "root (" | head -n 1)
pankso@633 234 ## Add new kernel entry in case of upgrade for installed system.
pankso@633 235 #if ! grep -q vmlinuz-\$VERSION \$1/boot/grub/menu.lst; then
pankso@633 236 #cat >> \$1/boot/grub/menu.lst << EOT
pankso@633 237
pankso@633 238 #title SliTaz GNU/Linux (Kernel \$VERSION)
pankso@633 239 #\$grub_dev
pankso@633 240 #kernel /boot/vmlinuz-\$VERSION root=\$root_dev
pankso@633 241 #EOT
pankso@633 242 #fi
pankso@633 243 #}
pankso@633 244
pankso@633 245 # Pack it.
pankso@633 246 tazpkg pack linux-custom-$version
pankso@633 247
pankso@633 248 # Install the new kernel.
al@728 249 if [ -n "$install" ]; then
pankso@633 250 cd $cookdir/linux-$version/slitaz
pankso@633 251 tazpkg -i linux-custom-$version.tazpkg --forced
pankso@633 252 fi
pankso@633 253
pankso@633 254 exit 0