Teach mkroot to cross compile additional packages, with dropbear as example.
scripts/mkroot.sh CROSS=sh4 LINUX=~/linux dropbear No, I'm not going down the rathole of adding lots of packages, but this shows _how_ to do it if you want to. The hooks are there. They don't have to be in scripts/root, that's just a default search location, you can provide a path on the command line or have them be in the $PATH.
This commit is contained in:
parent
eae46378f7
commit
99dfb77035
2
Makefile
2
Makefile
@ -70,7 +70,7 @@ clean::
|
||||
|
||||
# If singlemake was in generated/ "make clean; make test_ls" wouldn't work.
|
||||
distclean: clean root_clean
|
||||
@rm -f toybox* .config* .singlemake
|
||||
@rm -f toybox* .config* .singlemake root_download
|
||||
@echo removed .config
|
||||
|
||||
tests:
|
||||
|
@ -11,7 +11,8 @@ getcross() { X="$(echo "$CCC/$1"-*cross/bin/"$1"*-cc)"; echo "${X%cc}"; }
|
||||
|
||||
# assign command line NAME=VALUE args to env vars
|
||||
while [ $# -ne 0 ]; do
|
||||
[ "${1/=/}" != "$1" ] && eval "export ${1/=*/}=\"\${1#*=}\"" || PKG="$PKG $i"
|
||||
[ "${1/=/}" != "$1" ] && eval "export ${1/=*/}=\"\${1#*=}\"" ||
|
||||
{ [ "$1" != '--' ] && PKG="${PKG:-plumbing} $1"; }
|
||||
shift
|
||||
done
|
||||
|
||||
@ -48,7 +49,7 @@ else
|
||||
fi
|
||||
echo "Building for ${CROSS:=host}"
|
||||
|
||||
: ${OUTPUT:=$TOP/$CROSS}
|
||||
: ${OUTPUT:=$TOP/$CROSS} ${PKGDIR:=$PWD/scripts/root}
|
||||
[ -z "$ROOT" ] && ROOT="$OUTPUT/fs" && rm -rf "$ROOT"
|
||||
MYBUILD="$BUILD/${CROSS_BASE:-host-}tmp"
|
||||
rm -rf "$MYBUILD" && mkdir -p "$MYBUILD" || exit 1
|
||||
@ -228,7 +229,7 @@ else
|
||||
fi
|
||||
|
||||
# Build any modules, clean up, and package root filesystem for initramfs.
|
||||
for i in $PKG; do announce "$i"; ./$i; done
|
||||
for i in $PKG; do announce "$i"; PATH="$PKGDIR:$PATH" source $i; done
|
||||
rmdir "$MYBUILD" "$BUILD" 2>/dev/null
|
||||
announce "${CROSS_BASE}root.cpio.gz"
|
||||
(cd "$ROOT" && find .|cpio -o -H newc|gzip) > "$OUTPUT/$CROSS_BASE"root.cpio.gz
|
||||
|
44
scripts/root/dropbear
Executable file
44
scripts/root/dropbear
Executable file
@ -0,0 +1,44 @@
|
||||
#!/bin/echo Try "scripts/mkroot.sh dropbear"
|
||||
|
||||
# Example overlay file, adding dropbear (which requires zlib)
|
||||
|
||||
echo === download source
|
||||
|
||||
download a4d316c404ff54ca545ea71a27af7dbc29817088 \
|
||||
http://downloads.sf.net/libpng/zlib-1.2.8.tar.gz
|
||||
|
||||
download 820ec2b8c869edbcf5ad1138777fc0f54349505c \
|
||||
https://matt.ucc.asn.au/dropbear/releases/dropbear-2019.78.tar.bz2
|
||||
|
||||
echo === Native build static zlib
|
||||
|
||||
setupfor zlib
|
||||
# They keep checking in broken generated files.
|
||||
rm -f Makefile zconf.h &&
|
||||
CC=${CROSS_COMPILE}cc LD=${CROSS_COMPILE}ld AS=${CROSS_COMPILE}as ./configure &&
|
||||
make -j $(nproc) || exit 1
|
||||
|
||||
# do _not_ cleanup zlib, we need the files we just built for dropbear
|
||||
cd ..
|
||||
|
||||
echo === $HOST Native build static dropbear
|
||||
|
||||
setupfor dropbear
|
||||
# Repeat after me: "autoconf is useless"
|
||||
echo 'echo "$@"' > config.sub &&
|
||||
ZLIB="$(echo ../zlib*)" &&
|
||||
CFLAGS="-I $ZLIB -O2" LDFLAGS="-L $ZLIB" ./configure --enable-static \
|
||||
--host=${CROSS_BASE%-} &&
|
||||
sed -i 's@/usr/bin/dbclient@ssh@' options.h &&
|
||||
sed -i 's@\(#define NON_INETD_MODE\) 1@\1 0@' default_options.h &&
|
||||
make -j $(nproc) PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" MULTI=1 SCPPROGRESS=1 &&
|
||||
${CROSS_COMPILE}strip dropbearmulti &&
|
||||
mkdir -p "$ROOT/bin" &&
|
||||
cp dropbearmulti "$ROOT"/bin || exit 1
|
||||
for i in "$ROOT"/bin/{ssh,sshd,scp,dropbearkey}
|
||||
do
|
||||
ln -s dropbearmulti $i || exit 1
|
||||
done
|
||||
cleanup
|
||||
|
||||
rm -rf zlib-*
|
45
scripts/root/plumbing
Executable file
45
scripts/root/plumbing
Executable file
@ -0,0 +1,45 @@
|
||||
#!/bin/echo run this from "make root"
|
||||
|
||||
# Plumbing to download files
|
||||
|
||||
[ -z "$ROOT" ] && echo "no" && exit 1
|
||||
mkdir -p "${DOWNLOAD:=$PWD/root_download}" || exit 1
|
||||
|
||||
### Functions to download, extract, and clean up after source packages.
|
||||
|
||||
# Usage: download HASH URL
|
||||
# Grabs source from URL confirming SHA1 hash (Basically == "wget $2")
|
||||
# You can stick extracted source in $DOWNLOAD and build will use that instead
|
||||
download() {
|
||||
FILE="$(basename "$2")"
|
||||
[ -d "$DOWNLOAD/${FILE/-*/}" ] && echo "$FILE" local && return 0
|
||||
X=0; while true; do
|
||||
[ "$(sha1sum < "$DOWNLOAD/$FILE" 2>/dev/null)" == "$1 -" ] &&
|
||||
echo "$FILE" confirmed && break
|
||||
rm -f $DOWNLOAD/${FILE/-[0-9]*/}-[0-9]* || break
|
||||
[ $X -eq 0 ] && X=1 || exit 1
|
||||
wget "$2" -O "$DOWNLOAD/$FILE"
|
||||
done
|
||||
}
|
||||
|
||||
# Usage: setupfor PACKAGE
|
||||
# Extracts source tarball (or snapshot a repo) to create disposable build dir.
|
||||
# Basically "tar xvzCf $MYBUILD $DOWNLOAD/$1.tar.gz && cd $NEWDIR"
|
||||
setupfor() {
|
||||
PACKAGE="$(basename "$1")"
|
||||
announce "$PACKAGE" && cd "$MYBUILD" && rm -rf "$PACKAGE" || exit 1
|
||||
if [ -d "$DOWNLOAD/$PACKAGE" ]; then
|
||||
cp -la "$DOWNLOAD/$PACKAGE/." "$PACKAGE" && cd "$PACKAGE" || exit 1
|
||||
else
|
||||
tar xvaf "$DOWNLOAD/$PACKAGE"-*.t* && cd "$PACKAGE"-* || exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Usage: cleanup
|
||||
# Delete setupfor's dir, exiting if build failed (basically "rm -rf $PACKAGE")
|
||||
cleanup() {
|
||||
[ $? -ne 0 ] && exit 1
|
||||
[ -z "$PACKAGE" ] && exit 1
|
||||
[ ! -z "$NO_CLEANUP" ] && return
|
||||
cd .. && rm -rf "$PACKAGE"* || exit 1
|
||||
}
|
Loading…
Reference in New Issue
Block a user