cookutils annotate cooklinux @ rev 633

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