#!/bin/sh global SRC_DIR := $[pwd] # Read the 'JOB_FACTOR' property from '.config' global JOB_FACTOR := $[grep -i ^JOB_FACTOR .config | cut -f2 -d'=] # Find the number of available CPU cores. global NUM_CORES := $[grep ^processor /proc/cpuinfo | wc -l] # Calculate the number of 'make' jobs to be used later. global NUM_JOBS := $(NUM_CORES * JOB_FACTOR) if test ! -d $SRC_DIR/work/glibc/glibc_prepared { echo "Cannot continue - Dropbear SSH depends on GLIBC. Please buld GLIBC first." exit 1 } cd work/overlay/dropbear # Change to the Dropbear source directory which ls finds, e.g. 'dropbear-2016.73'. cd $[ls -d dropbear-*] echo "Preparing Dropbear work area. This may take a while..." make clean -j $NUM_JOBS !2 >/dev/null rm -rf ../dropbear_installed echo "Configuring Dropbear..." ./configure \ --prefix=$SRC_DIR/work/overlay/dropbear/dropbear_installed \ --disable-zlib \ --disable-loginfunc \ CFLAGS="-Os -s -fno-stack-protector -U_FORTIFY_SOURCE" echo "Building Dropbear..." make -j $NUM_JOBS echo "Installing Dropbear..." make install -j $NUM_JOBS mkdir -p ../dropbear_installed/lib # Copy all dependent GLIBC libraries. cp $SRC_DIR/work/glibc/glibc_prepared/lib/libnsl.so.1 ../dropbear_installed/lib cp $SRC_DIR/work/glibc/glibc_prepared/lib/libnss_compat.so.2 ../dropbear_installed/lib cp $SRC_DIR/work/glibc/glibc_prepared/lib/libutil.so.1 ../dropbear_installed/lib cp $SRC_DIR/work/glibc/glibc_prepared/lib/libcrypt.so.1 ../dropbear_installed/lib mkdir -p ../dropbear_installed/etc/dropbear # Create Dropbear SSH configuration BEGIN # Create RSA key. ../dropbear_installed/bin/dropbearkey \ -t rsa \ -f ../dropbear_installed/etc/dropbear/dropbear_rsa_host_key # Create DSS key. ../dropbear_installed/bin/dropbearkey \ -t dss \ -f ../dropbear_installed/etc/dropbear/dropbear_dss_host_key # Create ECDSA key. ../dropbear_installed/bin/dropbearkey \ -t ecdsa \ -f ../dropbear_installed/etc/dropbear/dropbear_ecdsa_host_key # Create user/group configuration files. touch ../dropbear_installed/etc/passwd touch ../dropbear_installed/etc/group # Add group 0 for root. echo "root:x:0:" \ > ../dropbear_installed/etc/group # Add user root with password 'toor'. echo "root:AprZpdBUhZXss:0:0:Minimal Root,,,:/root:/bin/sh" \ > ../dropbear_installed/etc/passwd # Create home folder for root user. mkdir -p ../dropbear_installed/root # Create Dropbear SSH configuration END echo "Reducing Dropbear size..." strip -g \ ../dropbear_installed/bin/* \ ../dropbear_installed/sbin/* \ ../dropbear_installed/lib/* cp -r \ ../dropbear_installed/etc \ ../dropbear_installed/bin \ ../dropbear_installed/sbin \ ../dropbear_installed/lib \ $SRC_DIR/work/src/minimal_overlay echo "Dropbear has been installed." cd $SRC_DIR (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:SRC_DIR) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(pwd)})]) left_token: spids: [5 7] ) } spids: [4] ) ] spids: [4] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:JOB_FACTOR) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(grep)} {(-i)} {(Lit_Other "^") (JOB_FACTOR)} {(.config)}) (C {(cut)} {(-f2)} {(-d) (SQ <"=">)}) ] negated: False ) ] ) left_token: spids: [15 35] ) ) } spids: [13] ) ] spids: [13] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:NUM_CORES) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(grep)} {(Lit_Other "^") (processor)} {(/proc/cpuinfo)}) (C {(wc)} {(-l)}) ] negated: False ) ] ) left_token: spids: [43 56] ) } spids: [42] ) ] spids: [42] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:NUM_JOBS) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Star left: (ArithVarRef name:NUM_CORES) right: (ArithVarRef name:JOB_FACTOR) ) spids: [63 70] ) } spids: [62] ) ] spids: [62] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-d)} {($ VSub_Name "$SRC_DIR") (/work/glibc/glibc_prepared)} {(Lit_Other "]")} ) terminator: ) ] action: [ (C {(echo)} {(DQ ("Cannot continue - Dropbear SSH depends on GLIBC. Please buld GLIBC first."))} ) (C {(exit)} {(1)}) ] spids: [-1 88] ) ] spids: [-1 102] ) (C {(cd)} {(work/overlay/dropbear)}) (C {(cd)} { (CommandSubPart command_list: (CommandList children:[(C {(ls)} {(-d)} {(dropbear-) (Lit_Other "*")})]) left_token: spids: [115 122] ) } ) (C {(echo)} {(DQ ("Preparing Dropbear work area. This may take a while..."))}) (SimpleCommand words: [{(make)} {(clean)} {(-j)} {($ VSub_Name "$NUM_JOBS")}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[139])] ) (C {(rm)} {(-rf)} {(../dropbear_installed)}) (C {(echo)} {(DQ ("Configuring Dropbear..."))}) (C {(./configure)} {(--prefix) (Lit_Other "=") ($ VSub_Name "$SRC_DIR") (/work/overlay/dropbear/dropbear_installed)} {(--disable-zlib)} {(--disable-loginfunc)} {(Lit_VarLike "CFLAGS=") (DQ ("-Os -s -fno-stack-protector -U_FORTIFY_SOURCE"))} ) (C {(echo)} {(DQ ("Building Dropbear..."))}) (C {(make)} {(-j)} {($ VSub_Name "$NUM_JOBS")}) (C {(echo)} {(DQ ("Installing Dropbear..."))}) (C {(make)} {(install)} {(-j)} {($ VSub_Name "$NUM_JOBS")}) (C {(mkdir)} {(-p)} {(../dropbear_installed/lib)}) (C {(cp)} {($ VSub_Name "$SRC_DIR") (/work/glibc/glibc_prepared/lib/libnsl.so.1)} {(../dropbear_installed/lib)} ) (C {(cp)} {($ VSub_Name "$SRC_DIR") (/work/glibc/glibc_prepared/lib/libnss_compat.so.2)} {(../dropbear_installed/lib)} ) (C {(cp)} {($ VSub_Name "$SRC_DIR") (/work/glibc/glibc_prepared/lib/libutil.so.1)} {(../dropbear_installed/lib)} ) (C {(cp)} {($ VSub_Name "$SRC_DIR") (/work/glibc/glibc_prepared/lib/libcrypt.so.1)} {(../dropbear_installed/lib)} ) (C {(mkdir)} {(-p)} {(../dropbear_installed/etc/dropbear)}) (C {(../dropbear_installed/bin/dropbearkey)} {(-t)} {(rsa)} {(-f)} {(../dropbear_installed/etc/dropbear/dropbear_rsa_host_key)} ) (C {(../dropbear_installed/bin/dropbearkey)} {(-t)} {(dss)} {(-f)} {(../dropbear_installed/etc/dropbear/dropbear_dss_host_key)} ) (C {(../dropbear_installed/bin/dropbearkey)} {(-t)} {(ecdsa)} {(-f)} {(../dropbear_installed/etc/dropbear/dropbear_ecdsa_host_key)} ) (C {(touch)} {(../dropbear_installed/etc/passwd)}) (C {(touch)} {(../dropbear_installed/etc/group)}) (SimpleCommand words: [{(echo)} {(DQ ("root:x:0:"))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(../dropbear_installed/etc/group)} spids: [339] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ("root:AprZpdBUhZXss:0:0:Minimal Root,,,:/root:/bin/sh"))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(../dropbear_installed/etc/passwd)} spids: [355] ) ] ) (C {(mkdir)} {(-p)} {(../dropbear_installed/root)}) (C {(echo)} {(DQ ("Reducing Dropbear size..."))}) (C {(strip)} {(-g)} {(../dropbear_installed/bin/) (Lit_Other "*")} {(../dropbear_installed/sbin/) (Lit_Other "*")} {(../dropbear_installed/lib/) (Lit_Other "*")} ) (C {(cp)} {(-r)} {(../dropbear_installed/etc)} {(../dropbear_installed/bin)} {(../dropbear_installed/sbin)} {(../dropbear_installed/lib)} {($ VSub_Name "$SRC_DIR") (/work/src/minimal_overlay)} ) (C {(echo)} {(DQ ("Dropbear has been installed."))}) (C {(cd)} {($ VSub_Name "$SRC_DIR")}) ] )