#!/bin/sh set -e SCRIPT_DIR= ARCH= PLAT= main() { SCRIPT_DIR="$(cd "${0%/*}" && pwd)" setup_arch_plat prepare_packages stage1 } setup_arch_plat() { ARCH="$(cat /etc/proteanos_arch)" PLAT="$(cat /etc/proteanos_plat)" } prepare_packages() { local repo pkg src_opk path dir [ -d pkg ] || mkdir pkg cd pkg for repo in zlib toolchains/binutils linux-libre eglibc \ gmp toolchains/gcc-4.7 toolchains/gcc-defaults \ busybox gmake; do if [ ! -d "${repo##*/}" ]; then git clone --depth 1 \ "git://git.proteanos.com/pkg/${repo}.git" fi cd "${repo##*/}" git pull origin master if [ -x config ]; then ./config clean PKG_TARGETS="${ARCH}" ./config fi if [ -f source.mk -a ! -f "${repo##*/}"*.orig.tar* ]; then opkbuild -bCT source fi opkbuild -SC cd .. done for pkg in mpc mpfr; do if [ ! -d "${pkg}" ]; then src_opk="src-${pkg}_*_src_all.opk" path="pub/pkg/${pkg}/${src_opk}" wget "ftp://files.proteanos.com/${path}" tar -xzOf ${src_opk} data.tar.gz | tar -xz mv "usr/src/${pkg}_"* "${pkg}" fi done [ -d usr/src ] && rmdir usr/src [ -d usr ] && rmdir usr for dir in */; do if [ -d "${SCRIPT_DIR}/patches/${dir}" ]; then for patch in "${SCRIPT_DIR}/patches/${dir}"*; do patch -N -p 1 -u -d "${dir}" -i "${patch}" done fi done cd .. } stage1() { local dir opk elf_interp zlib_upstream_ver cd pkg for dir in */; do cd "${dir}" opkbuild -bC cd .. done cd .. [ -d "root_${ARCH}" ] && rm -Rf "root_${ARCH}" mkdir "root_${ARCH}" cd "root_${ARCH}" for opk in ../pkg/*_${ARCH}_${PLAT}.opk ../pkg/*_${ARCH}_all.opk \ ../pkg/*_all_${PLAT}.opk ../pkg/*_all_all.opk; do [ -f "${opk}" ] || continue tar -xzOf "${opk}" data.tar.gz | tar -xz done elf_interp="$(readelf -l bin/busybox | sed -n \ 's|^.*\[Requesting program interpreter: /\(.*\)\].*$|\1|p')" mkdir -p "${elf_interp%/*}" ln -sf "/lib/${ARCH}/${elf_interp##*/}" "${elf_interp}" sudo chroot . true sudo chroot . readelf -hl /usr/bin/readelf zlib_upstream_ver="$(printf '%s' ../pkg/zlib/zlib-*.orig.tar* | sed \ 's|^.*/zlib-\([a-z0-9.~]*\).*\.orig\.tar.*$|\1|')" tar -xjOf ../pkg/zlib/zlib-*.orig.tar* \ "zlib-${zlib_upstream_ver}/examples/fitblk.c" >fitblk.c sudo chroot . "${ARCH}-gcc" -lz -o /fitblk /fitblk.c sudo chroot . /fitblk | grep -F 'fitblk abort' >/dev/null cd .. } main "${@}"