четверг, 28 марта 2013 г.

Сборка ядра в раме

Сваял скриптик для сборки ядра в оперативке(tmpfs).
в оперативу попадают только ссылки на сорсы, что и быстрей копирования и экономит место.
все временный файлы создаются в раме.
на винт после сборки падают только необходимые файлы, а весь треш пропадает в /dev/null.
В случае моего ядра это 6000+ файлов на овер 150 метров

#!/bin/bash

RAM_DIR="${PWD%/*}/RAM"
mkdir "${RAM_DIR}"
SOURCE_DIR="${PWD}"
mount -t tmpfs tmpfs ${RAM_DIR}

#####################################################
##### copy sources over symlinks into RAM_DIR #######
for i in $(ls -A);do
 cp -Rs ${SOURCE_DIR}/${i} ${RAM_DIR}/${i}
done
cd "${RAM_DIR}"

#####################################################
##### config ########################################
[[ ! -f .config ]] && zcat /proc/config.gz > .config
if [[ -z "${1}" ]];then
 make oldconfig
else
 make ${1}
fi

#####################################################
##### compiling #####################################
threads="$(( $(awk '/^cpu cores/ {print $4}' /proc/cpuinfo | uniq) + 1 ))"
make -j${threads}

#####################################################
##### copy generated files back into SOURCE_DIR #####
rsync --checksum --recursive --links --safe-links \
 --exclude='*.o' \
 --exclude='*.cmd' \
 --exclude='*.builtin' \
 --exclude='*.order' \
 --exclude='*.mod' \
${RAM_DIR}/ ${SOURCE_DIR}/

cd "${SOURCE_DIR}"
umount "${RAM_DIR}"
rm -rf "${RAM_DIR}"