diff options
author | Michael Neves | 2013-02-27 19:12:16 +0100 |
---|---|---|
committer | Michael Neves | 2013-02-27 19:12:16 +0100 |
commit | 15bbf3bd4c500415490f2b0e879b6bb14a9e62fa (patch) | |
tree | d4052d1cae80009602bc5646cd2146404b8f0554 /server | |
parent | add squashfstools to build (diff) | |
download | tm-scripts-15bbf3bd4c500415490f2b0e879b6bb14a9e62fa.tar.gz tm-scripts-15bbf3bd4c500415490f2b0e879b6bb14a9e62fa.tar.xz tm-scripts-15bbf3bd4c500415490f2b0e879b6bb14a9e62fa.zip |
copy modules/firmware to stage31, generate separate initramfs for squashfs
Diffstat (limited to 'server')
-rwxr-xr-x | server/build_core | 90 |
1 files changed, 51 insertions, 39 deletions
diff --git a/server/build_core b/server/build_core index 6d975984..a0725bec 100755 --- a/server/build_core +++ b/server/build_core @@ -30,28 +30,16 @@ initial_checks() { [ -e ${STAGE32_DIR}/openslx/bin/busybox ] || perror "Busybox not found, run './mltk tools build busybox' first." - # shouldn't squashfs-tools be automatically installed as we need them nevertheless!? - # what if it is already on the machine? faster to check with which than the apt-get check? if [ -z $(which mksquashfs) ] && perror "mksquashfs not found, please install squashfs-tools first." - - #check for kernel modules, if not present copy from system - if [ ! -d ${STAGE32_DIR}/lib/modules ]; - then - pinfo "Couldn't find kernel modules in stage3.2." - pinfo "Copying modules for kernel $(uname -r)..." - mkdir -p "${STAGE32_DIR}/lib/modules" || perror "Cannot create '${STAGE32_DIR}/lib/modules'" - cp -r "/lib/modules/$(uname -r)" "${STAGE32_DIR}/lib/modules/" || perror "Cannot copy kernel modules from '/lib/modules/$(uname -r)' '${STAGE32_DIR}/lib/modules/'" - else - pinfo "Not copying kernel modules from system, as '${STAGE32_DIR}/lib/modules/' already exists." - fi - - # TODO: check for aufs and squaskfs modules } generate_rootfs() { # produce stage3.1 mkdir -p "${STAGE31_DIR}" || perror "Cannot create stage3.1 dir '${STAGE31_DIR}'" + + # produce openslx dir + mkdir -p "${MODULE_DIR}/openslx/mnt" || perror "Cannot create openslx dir '${MODULE_DIR}/openslx/mnt'" # create basic directory structure mkdir -p "${STAGE31_DIR}"/{bin,dev,proc,run,etc,mnt,sys} || perror "Cannot create basic directory structure in '${STAGE31_DIR}'" @@ -63,11 +51,6 @@ generate_rootfs() { # copy busybox, its libs and static data to stage3.1 cp -r "${STAGE32_DIR}/openslx/*" "${STAGE31_STATIC_DIR}/*" "${STAGE31_DIR}" || perror "Copying busybox, its libs and static data failed." - # fix for aufs & squashfs modules needed for stage 3.1 - mkdir -p "${STAGE31_DIR}/lib/modules.0/" || perror "Creating modules.0 dir for aufs & squashfs in stage 3.1 failed." - cp "/lib/modules/$(uname -r)/kernel/fs/squashfs/squashfs.ko" "${STAGE31_DIR}/lib/modules.0/" || perror "Copying squashfs.ko failed." - cp "/lib/modules/$(uname -r)/kernel/ubuntu/aufs/aufs.ko" "${STAGE31_DIR}/lib/modules.0/" || perror "Copying aufs.ko failed." - # fetch the libraries needed for busybox BASICLIBS="" for i in $(ldd "${STAGE31_DIR}/bin/busybox"); @@ -79,42 +62,71 @@ generate_rootfs() { fi done tarcopy "$BASICLIBS" "${STAGE31_DIR}" -} - -generate_squashfs() { - # finalize the initramfs target - [ -e "${STAGE31_DIR}/mnt/openslx.sqfs" ] && rm "${STAGE31_DIR}/mnt/openslx.sqfs" - mksquashfs "${STAGE32_DIR}" "${STAGE31_DIR}/mnt/openslx.sqfs" -comp xz -b 1M -no-recovery || perror "mksquashfs failed ($?)." + #check for kernel modules, if not present copy from system + if [ ! -d ${STAGE31_DIR}/lib/modules ]; + then + pinfo "Couldn't find kernel modules in stage3.1." + pinfo "Copying modules for kernel $(uname -r)..." + mkdir -p "${STAGE31_DIR}/lib/modules/$(uname -r)/kernel" || perror "Cannot create '${STAGE31_DIR}/lib/modules/$(uname -r)/kernel'" + cd /lib/modules/$(uname -r)/kernel || perror "No Directory /lib/modules/$(uname -r)/kernel found." + tarcopy "$(cat stage31.modules)" "${STAGE31_DIR}/lib/modules/$(uname -r)/kernel" + cd - + else + pinfo "Not copying kernel modules from system, as '${STAGE31_DIR}/lib/modules' already exists." + fi + #check for firmware, if not present copy from system + if [ ! -d ${STAGE31_DIR}/lib/firmware ]; + then + pinfo "Couldn't find firmware in stage3.1." + pinfo "Copying firmware for kernel $(uname -r)..." + mkdir -p "${STAGE31_DIR}/lib/firmware/$(uname -r)" || perror "Cannot create '${STAGE31_DIR}/lib/firmware/$(uname -r)'" + cd /lib/firmware || perror "No Directory /lib/firmware found." + tarcopy "$(cat stage31.firmware)" "${STAGE31_DIR}/lib/firmware" + cd - + cd /lib/firmware/$(uname -r) || perror "No Directory /lib/firmware/$(uname -r) found." + tarcopy "$(cat stage31.firmware)" "${STAGE31_DIR}/lib/firmware/$(uname -r)" + cd - + else + pinfo "Not copying firmware from system, as '${STAGE31_DIR}/lib/firmware' already exists." + fi + + #generate initramfs + generate_initramfs "initramfs" "${STAGE31_DIR}" } -generate_initramfs() { - cd "${STAGE31_DIR}" || perror "Cannot cd to '${STAGE31_DIR}'" - find . | cpio --format="newc" --create | gzip -9 > "${MODULE_DIR}/initramfs" - local PS=($PIPESTATUS[*]) - [ "x${PS[0]}" != "x0" ] && perror "'find .' failed." - [ "x${PS[1]}" != "x0" ] && perror "cpio create failed." - [ "x${PS[2]}" != "x0" ] && perror "gzip to '${MODULE_DIR}/initramfs' failed." - cd - - pinfo "initramfs created at ${MODULE_DIR}/initramfs" +generate_squashfs() { + # finalize the initramfs target + [ -e "${MODULE_DIR}/openslx/mnt/openslx.sqfs" ] && rm "${MODULE_DIR}/openslx/mnt/openslx.sqfs" + pinfo "Writing openslx.sqfs to '${MODULE_DIR}/openslx/mnt/'" + mksquashfs "${STAGE32_DIR}" "${MODULE_DIR}/openslx/mnt/openslx.sqfs" -comp xz -b 1M -no-recovery || perror "mksquashfs failed ($?)." + generate_initramfs "initramfs2" "${MODULE_DIR}/openslx" } generate_stage31() { initial_checks generate_rootfs + generate_squashfs - generate_initramfs - # TODO better kernel copy - cp "/boot/vmlinuz-$(uname -r)" "${MODULE_DIR}/kernel" || perror "Cannot copy kernel from '/boot/vmlinuz-$(uname -r)' to '${MODULE_DIR}/kernel'" - pinfo "[core] kernel $(uname -r) copied to ${MODULE_DIR}/kernel" + if [ ! -e ${MODULE_DIR}/kernel ]; then + pinfo "Couldn't find kernel in '${MODULE_DIR}'" + pinfo "Copying Kernel $(uname -r) to ${MODULE_DIR}/kernel" + cp "/boot/vmlinuz-$(uname -r)" "${MODULE_DIR}/kernel" || perror "Cannot copy kernel from '/boot/vmlinuz-$(uname -r)' to '${MODULE_DIR}/kernel'" + fi } clean_core() { pinfo "Cleaning '${STAGE31_DIR}'..." [ -d ${STAGE31_DIR} ] && { rm -rf ${STAGE31_DIR} || perror "rm -rf failed." } + pinfo "Cleaning '${MODULE_DIR}/kernel'..." + [ -e ${MODULE_DIR}/kernel ] && { rm ${MODULE_DIR}/kernel || perror "rm failed." } pinfo "Cleaning '${MODULE_DIR}/initramfs'..." [ -e ${MODULE_DIR}/initramfs ] && { rm ${MODULE_DIR}/initramfs || perror "rm failed." } + pinfo "Cleaning '${MODULE_DIR}/openslx'..." + [ -d ${MODULE_DIR}/openslx ] && { rm -rf ${MODULE_DIR}/openslx || perror "rm failed." } + pinfo "Cleaning '${MODULE_DIR}/initramfs2'..." + [ -d ${MODULE_DIR}/initramfs2 ] && { rm ${MODULE_DIR}/initramfs2 || perror "rm failed." } } |