From a74a4d5840bf541f604bca297d1dd90043d20d2f Mon Sep 17 00:00:00 2001 From: Thierry Laurion Date: Thu, 11 May 2023 17:56:32 -0400 Subject: [PATCH] Prerequisites to have CGROUPS and such, wget from u-root under /bbin/wget without removing busybox's, and environement variables setuped correctly. As of now, only works from qemu-coreboot-whiptail-tpm1 on host's console since qemu has a bug and doesn;t refresh don't know why --- .../qemu-coreboot-whiptail-tpm1.config | 11 +- config/busybox.config | 114 +++++++++++------- initrd/bin/network-init-recovery | 55 ++++++--- initrd/init | 3 +- modules/busybox | 4 +- modules/u-root | 70 +++++++---- 6 files changed, 165 insertions(+), 92 deletions(-) diff --git a/boards/qemu-coreboot-whiptail-tpm1/qemu-coreboot-whiptail-tpm1.config b/boards/qemu-coreboot-whiptail-tpm1/qemu-coreboot-whiptail-tpm1.config index 832d004a8..4986c04b3 100644 --- a/boards/qemu-coreboot-whiptail-tpm1/qemu-coreboot-whiptail-tpm1.config +++ b/boards/qemu-coreboot-whiptail-tpm1/qemu-coreboot-whiptail-tpm1.config @@ -13,9 +13,12 @@ export CONFIG_ENABLE_FUNCTION_TRACING_OUTPUT=y CONFIG_COREBOOT_CONFIG=config/coreboot-qemu-tpm1.config CONFIG_LINUX_CONFIG=config/linux-qemu.config -ifeq "$(CONFIG_UROOT)" "y" -CONFIG_BUSYBOX=n -else +#Testing +CONFIG_UROOT=y +#CONFIG_TINYCORE_ROOTFS=y +export CONFIG_SYNC_TIME_ON_NETWORK_INIT=n + + CONFIG_KEXEC=y CONFIG_QRENCODE=y CONFIG_TPMTOTP=y @@ -41,8 +44,6 @@ CONFIG_MSRTOOLS=y CONFIG_NEWT=y CONFIG_SLANG=y -endif - export CONFIG_LINUX_USB_COMPANION_CONTROLLER=y CONFIG_LINUX_USB=y CONFIG_LINUX_E1000=y diff --git a/config/busybox.config b/config/busybox.config index 23c8fd3fd..28ca8684d 100644 --- a/config/busybox.config +++ b/config/busybox.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Busybox version: 1.33.2 -# Fri Jan 7 12:33:00 2022 +# Busybox version: 1.36.0 +# Mon May 1 16:17:04 2023 # CONFIG_HAVE_DOT_CONFIG=y @@ -93,10 +93,16 @@ CONFIG_FEATURE_BUFFERS_USE_MALLOC=y # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set CONFIG_PASSWORD_MINLEN=6 CONFIG_MD5_SMALL=1 +CONFIG_SHA1_SMALL=3 +CONFIG_SHA1_HWACCEL=y +CONFIG_SHA256_HWACCEL=y CONFIG_SHA3_SMALL=1 -# CONFIG_FEATURE_FAST_TOP is not set -# CONFIG_FEATURE_ETC_NETWORKS is not set -# CONFIG_FEATURE_ETC_SERVICES is not set +CONFIG_FEATURE_NON_POSIX_CP=y +# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_FEATURE_USE_SENDFILE=y +CONFIG_FEATURE_COPYBUF_KB=4 +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y CONFIG_FEATURE_EDITING=y CONFIG_FEATURE_EDITING_MAX_LEN=1024 # CONFIG_FEATURE_EDITING_VI is not set @@ -120,14 +126,9 @@ CONFIG_LAST_SUPPORTED_WCHAR=767 # CONFIG_UNICODE_BIDI_SUPPORT is not set # CONFIG_UNICODE_NEUTRAL_TABLE is not set # CONFIG_UNICODE_PRESERVE_BROKEN is not set -CONFIG_FEATURE_NON_POSIX_CP=y -# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set -CONFIG_FEATURE_USE_SENDFILE=y -CONFIG_FEATURE_COPYBUF_KB=4 -CONFIG_FEATURE_SKIP_ROOTFS=y -CONFIG_MONOTONIC_SYSCALL=y -CONFIG_IOCTL_HEX2STR_ERROR=y -CONFIG_FEATURE_HWIB=y +# CONFIG_LOOP_CONFIGURE is not set +# CONFIG_NO_LOOP_CONFIGURE is not set +CONFIG_TRY_LOOP_CONFIGURE=y # # Applets @@ -162,6 +163,8 @@ CONFIG_FEATURE_BZIP2_DECOMPRESS=y CONFIG_CPIO=y CONFIG_FEATURE_CPIO_O=y CONFIG_FEATURE_CPIO_P=y +CONFIG_FEATURE_CPIO_IGNORE_DEVNO=y +CONFIG_FEATURE_CPIO_RENUMBER_INODES=y # CONFIG_DPKG is not set # CONFIG_DPKG_DEB is not set CONFIG_GZIP=y @@ -197,6 +200,22 @@ CONFIG_FEATURE_UNZIP_CDF=y # # Coreutils # +CONFIG_FEATURE_VERBOSE=y + +# +# Common options for date and touch +# +# CONFIG_FEATURE_TIMEZONE is not set + +# +# Common options for cp and mv +# +CONFIG_FEATURE_PRESERVE_HARDLINKS=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y CONFIG_BASENAME=y CONFIG_CAT=y CONFIG_FEATURE_CATN=y @@ -207,11 +226,13 @@ CONFIG_CHMOD=y # CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set CONFIG_CHROOT=y # CONFIG_CKSUM is not set +CONFIG_CRC32=y # CONFIG_COMM is not set CONFIG_CP=y CONFIG_FEATURE_CP_LONG_OPTIONS=y CONFIG_FEATURE_CP_REFLINK=y CONFIG_CUT=y +CONFIG_FEATURE_CUT_REGEX=y CONFIG_DATE=y CONFIG_FEATURE_DATE_ISOFMT=y # CONFIG_FEATURE_DATE_NANO is not set @@ -223,6 +244,7 @@ CONFIG_FEATURE_DD_IBS_OBS=y CONFIG_FEATURE_DD_STATUS=y CONFIG_DF=y CONFIG_FEATURE_DF_FANCY=y +CONFIG_FEATURE_SKIP_ROOTFS=y CONFIG_DIRNAME=y # CONFIG_DOS2UNIX is not set # CONFIG_UNIX2DOS is not set @@ -316,13 +338,13 @@ CONFIG_TEST2=y CONFIG_FEATURE_TEST_64=y # CONFIG_TIMEOUT is not set CONFIG_TOUCH=y -CONFIG_FEATURE_TOUCH_NODEREF=y CONFIG_FEATURE_TOUCH_SUSV3=y CONFIG_TR=y CONFIG_FEATURE_TR_CLASSES=y CONFIG_FEATURE_TR_EQUIV=y CONFIG_TRUE=y # CONFIG_TRUNCATE is not set +CONFIG_TSORT=y CONFIG_TTY=y CONFIG_UNAME=y CONFIG_UNAME_OSNAME="GNU/Linux" @@ -332,7 +354,7 @@ CONFIG_UNIQ=y CONFIG_USLEEP=y # CONFIG_UUDECODE is not set CONFIG_BASE32=y -CONFIG_BASE64=n +# CONFIG_BASE64 is not set # CONFIG_UUENCODE is not set CONFIG_WC=y CONFIG_FEATURE_WC_LARGE=y @@ -342,21 +364,6 @@ CONFIG_FEATURE_WC_LARGE=y # CONFIG_WHOAMI is not set # CONFIG_YES is not set -# -# Common options -# -CONFIG_FEATURE_VERBOSE=y - -# -# Common options for cp and mv -# -CONFIG_FEATURE_PRESERVE_HARDLINKS=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - # # Console Utilities # @@ -420,6 +427,7 @@ CONFIG_VI=y CONFIG_FEATURE_VI_MAX_LEN=4096 # CONFIG_FEATURE_VI_8BIT is not set CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_COLON_EXPAND=y CONFIG_FEATURE_VI_YANKMARK=y CONFIG_FEATURE_VI_SEARCH=y # CONFIG_FEATURE_VI_REGEX_SEARCH is not set @@ -433,6 +441,7 @@ CONFIG_FEATURE_VI_ASK_TERMINAL=y CONFIG_FEATURE_VI_UNDO=y CONFIG_FEATURE_VI_UNDO_QUEUE=y CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 +CONFIG_FEATURE_VI_VERBOSE_STATUS=y CONFIG_FEATURE_ALLOW_EXEC=y # @@ -441,7 +450,11 @@ CONFIG_FEATURE_ALLOW_EXEC=y CONFIG_FIND=y CONFIG_FEATURE_FIND_PRINT0=y CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_ATIME=y +CONFIG_FEATURE_FIND_CTIME=y CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_AMIN=y +CONFIG_FEATURE_FIND_CMIN=y CONFIG_FEATURE_FIND_PERM=y CONFIG_FEATURE_FIND_TYPE=y CONFIG_FEATURE_FIND_EXECUTABLE=y @@ -449,6 +462,7 @@ CONFIG_FEATURE_FIND_XDEV=y CONFIG_FEATURE_FIND_MAXDEPTH=y CONFIG_FEATURE_FIND_NEWER=y CONFIG_FEATURE_FIND_INUM=y +CONFIG_FEATURE_FIND_SAMEFILE=y CONFIG_FEATURE_FIND_EXEC=y CONFIG_FEATURE_FIND_EXEC_PLUS=y CONFIG_FEATURE_FIND_USER=y @@ -512,20 +526,20 @@ CONFIG_INIT_TERMINAL_TYPE="" # CONFIG_USE_BB_CRYPT_SHA is not set # CONFIG_ADD_SHELL is not set # CONFIG_REMOVE_SHELL is not set -# CONFIG_ADDGROUP is not set -# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set -# CONFIG_ADDUSER is not set +CONFIG_ADDGROUP=y +CONFIG_FEATURE_ADDUSER_TO_GROUP=y +CONFIG_ADDUSER=y # CONFIG_FEATURE_CHECK_NAMES is not set -CONFIG_LAST_ID=0 -CONFIG_FIRST_SYSTEM_ID=0 -CONFIG_LAST_SYSTEM_ID=0 +CONFIG_LAST_ID=60000 +CONFIG_FIRST_SYSTEM_ID=100 +CONFIG_LAST_SYSTEM_ID=999 # CONFIG_CHPASSWD is not set CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="" # CONFIG_CRYPTPW is not set # CONFIG_MKPASSWD is not set -# CONFIG_DELUSER is not set -# CONFIG_DELGROUP is not set -# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set +CONFIG_DELUSER=y +CONFIG_DELGROUP=y +CONFIG_FEATURE_DEL_USER_FROM_GROUP=y # CONFIG_GETTY is not set # CONFIG_LOGIN is not set # CONFIG_LOGIN_SESSION_AS_CHILD is not set @@ -739,6 +753,7 @@ CONFIG_FEATURE_VOLUMEID_XFS=y # Miscellaneous Utilities # # CONFIG_ADJTIMEX is not set +CONFIG_ASCII=y # CONFIG_BBCONFIG is not set # CONFIG_FEATURE_COMPRESS_BBCONFIG is not set # CONFIG_BC is not set @@ -819,10 +834,12 @@ CONFIG_PARTPROBE=y # CONFIG_RFKILL is not set # CONFIG_RUNLEVEL is not set # CONFIG_RX is not set +CONFIG_SEEDRNG=y CONFIG_SETFATTR=y CONFIG_SETSERIAL=y CONFIG_STRINGS=y CONFIG_TIME=y +CONFIG_TREE=y # CONFIG_TS is not set # CONFIG_TTYSIZE is not set # CONFIG_UBIATTACH is not set @@ -834,6 +851,7 @@ CONFIG_TIME=y # CONFIG_UBIRENAME is not set # CONFIG_VOLNAME is not set # CONFIG_WATCHDOG is not set +# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set # # Networking Utilities @@ -842,6 +860,9 @@ CONFIG_TIME=y # CONFIG_FEATURE_UNIX_LOCAL is not set # CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set # CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_FEATURE_ETC_NETWORKS is not set +# CONFIG_FEATURE_ETC_SERVICES is not set +CONFIG_FEATURE_HWIB=y # CONFIG_FEATURE_TLS_SHA1 is not set CONFIG_ARP=y # CONFIG_ARPING is not set @@ -860,6 +881,7 @@ CONFIG_ARP=y # CONFIG_HOSTNAME is not set # CONFIG_DNSDOMAINNAME is not set # CONFIG_HTTPD is not set +CONFIG_FEATURE_HTTPD_PORT_DEFAULT=0 # CONFIG_FEATURE_HTTPD_RANGES is not set # CONFIG_FEATURE_HTTPD_SETUID is not set # CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set @@ -952,6 +974,7 @@ CONFIG_SSL_CLIENT=y # CONFIG_FEATURE_TELNET_WIDTH is not set # CONFIG_TELNETD is not set # CONFIG_FEATURE_TELNETD_STANDALONE is not set +CONFIG_FEATURE_TELNETD_PORT_DEFAULT=0 # CONFIG_FEATURE_TELNETD_INETD_WAIT is not set CONFIG_TFTP=y CONFIG_FEATURE_TFTP_PROGRESS_BAR=y @@ -972,6 +995,7 @@ CONFIG_VCONFIG=y CONFIG_WGET=y CONFIG_FEATURE_WGET_LONG_OPTIONS=y # CONFIG_FEATURE_WGET_STATUSBAR is not set +CONFIG_FEATURE_WGET_FTP=y # CONFIG_FEATURE_WGET_AUTHENTICATION is not set CONFIG_FEATURE_WGET_TIMEOUT=y CONFIG_FEATURE_WGET_HTTPS=y @@ -988,6 +1012,7 @@ CONFIG_UDHCPC=y CONFIG_FEATURE_UDHCPC_ARPING=y CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y CONFIG_UDHCPC_DEFAULT_SCRIPT="/sbin/config-dhcp.sh" +CONFIG_UDHCPC6_DEFAULT_SCRIPT="" # CONFIG_UDHCPC6 is not set # CONFIG_FEATURE_UDHCPC6_RFC3646 is not set # CONFIG_FEATURE_UDHCPC6_RFC4704 is not set @@ -997,6 +1022,7 @@ CONFIG_UDHCPC_DEFAULT_SCRIPT="/sbin/config-dhcp.sh" # # Common options for DHCP applets # +CONFIG_UDHCPC_DEFAULT_INTERFACE="eth0" # CONFIG_FEATURE_UDHCP_PORT is not set CONFIG_UDHCP_DEBUG=9 CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 @@ -1014,17 +1040,19 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" # # Mail Utilities # +CONFIG_FEATURE_MIME_CHARSET="" # CONFIG_MAKEMIME is not set # CONFIG_POPMAILDIR is not set # CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set # CONFIG_REFORMIME is not set # CONFIG_FEATURE_REFORMIME_COMPAT is not set # CONFIG_SENDMAIL is not set -CONFIG_FEATURE_MIME_CHARSET="" # # Process Utilities # +# CONFIG_FEATURE_FAST_TOP is not set +CONFIG_FEATURE_SHOW_THREADS=y # CONFIG_FREE is not set # CONFIG_FUSER is not set # CONFIG_IOSTAT is not set @@ -1063,7 +1091,6 @@ CONFIG_FEATURE_TOPMEM=y # CONFIG_UPTIME is not set # CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set # CONFIG_WATCH is not set -CONFIG_FEATURE_SHOW_THREADS=y # # Runit Utilities @@ -1103,7 +1130,7 @@ CONFIG_SH_IS_ASH=y # CONFIG_SH_IS_NONE is not set # CONFIG_BASH_IS_ASH is not set # CONFIG_BASH_IS_HUSH is not set -# CONFIG_BASH_IS_NONE is not set +CONFIG_BASH_IS_NONE=y CONFIG_SHELL_ASH=y CONFIG_ASH=y CONFIG_ASH_OPTIMIZE_FOR_SIZE=y @@ -1120,6 +1147,7 @@ CONFIG_ASH_EXPAND_PRMT=y CONFIG_ASH_ECHO=y CONFIG_ASH_PRINTF=y CONFIG_ASH_TEST=y +CONFIG_ASH_SLEEP=y CONFIG_ASH_HELP=y CONFIG_ASH_GETOPTS=y CONFIG_ASH_CMDCMD=y @@ -1128,8 +1156,8 @@ CONFIG_ASH_CMDCMD=y # CONFIG_SHELL_HUSH is not set # CONFIG_HUSH_BASH_COMPAT is not set # CONFIG_HUSH_BRACE_EXPANSION is not set -# CONFIG_HUSH_LINENO_VAR is not set # CONFIG_HUSH_BASH_SOURCE_CURDIR is not set +# CONFIG_HUSH_LINENO_VAR is not set # CONFIG_HUSH_INTERACTIVE is not set # CONFIG_HUSH_SAVEHISTORY is not set # CONFIG_HUSH_JOB is not set diff --git a/initrd/bin/network-init-recovery b/initrd/bin/network-init-recovery index c7b93b84f..dc678ef26 100755 --- a/initrd/bin/network-init-recovery +++ b/initrd/bin/network-init-recovery @@ -14,7 +14,24 @@ for module in `echo $network_modules`; do fi done -if [ -e /sys/class/net/eth0 ]; then +#Tethering over Android 11+ PoC +if [ -e /lib/modules/rndis_host.ko ]; then + #first enable USB controllers + enable_usb + network_modules="mii usbnet cdc_eem cdc_ether rndis_host" + + for module in `echo $network_modules`; do + if [ -f /lib/modules/$module.ko ]; then + insmod /lib/modules/$module.ko + fi + done + #other prep needed +fi + +if [ -e /sys/class/net/usb0 ]; then + echo "Tethering on..." + dev=usb0 +elif [ -e /sys/class/net/eth0 ]; then #Randomize eth0 MAC address of maximized boards if echo "$CONFIG_BOARD" | grep -q maximized; then ifconfig eth0 down @@ -28,15 +45,21 @@ if [ -e /sys/class/net/eth0 ]; then # Set up static IP if [ ! -z "$CONFIG_BOOT_STATIC_IP" ]; then ifconfig eth0 $CONFIG_BOOT_STATIC_IP - #Get ip from DHCP - elif [ -e /sbin/udhcpc ];then - if udhcpc -T 1 -q; then - if [ -e /sbin/ntpd ]; then + fi + dev=eth0 +fi + +#Get ip from DHCP +if [ -e /sbin/udhcpc ];then + if udhcpc -T 1 -i $dev -q; then + if [ -e /sbin/ntpd ]; then + if [ ! "$CONFIG_SYNC_TIME_ON_NETWORK_INIT" == "n" ]; then DNS_SERVER=$(grep nameserver /etc/resolv.conf|awk -F " " {'print $2'}) killall ntpd 2&>1 > /dev/null if ! ntpd -d -N -n -q -p $DNS_SERVER > /dev/ttyprintk; then if ! ntpd -d -d -N -n -q -p ntp.pool.org> /dev/ttyprintk; then echo "NTP sync unsuccessful." > /dev/tty0 + #TODO: clean time sync. Not always successful fi fi hwclock -w @@ -44,18 +67,16 @@ if [ -e /sys/class/net/eth0 ]; then date=`date "+%Y-%m-%d %H:%M:%S %Z"` echo "Time: $date" > /dev/tty0 fi - fi - fi - - ifconfig eth0 > /dev/ttyprintk - - if [ -e /bin/dropbear ]; then - # Set up the ssh server, allow root logins and log to stderr - if [ ! -d /etc/dropbear ]; then - mkdir /etc/dropbear fi - dropbear -B -R 2>/dev/ttyprintk + fi +fi + +if [ -e /bin/dropbear ]; then + # Set up the ssh server, allow root logins and log to stderr + if [ ! -d /etc/dropbear ]; then + mkdir /etc/dropbear fi - echo "" > /dev/tty0 - ifconfig eth0 | head -2 > /dev/tty0 + dropbear -B -R 2>/dev/ttyprintk fi +echo "" > /dev/tty0 +ifconfig > /dev/tty0 diff --git a/initrd/init b/initrd/init index a92557450..8d1ba5c7c 100755 --- a/initrd/init +++ b/initrd/init @@ -6,7 +6,8 @@ mknod /dev/ttyprintk c 5 3 echo "hello world" > /dev/ttyprintk # Setup our path -export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/bbin:/usr/local/sbin +export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib # This is the very first script invoked by the Linux kernel and is # running out of the ram disk. There are no fileysstems mounted. diff --git a/modules/busybox b/modules/busybox index 03ec0a41d..2429f057c 100644 --- a/modules/busybox +++ b/modules/busybox @@ -2,11 +2,11 @@ CONFIG_BUSYBOX ?= y modules-$(CONFIG_BUSYBOX) += busybox -busybox_version := 1.33.2 +busybox_version := 1.36.0 busybox_dir := busybox-$(busybox_version) busybox_tar := busybox-$(busybox_version).tar.bz2 busybox_url := https://busybox.net/downloads/$(busybox_tar) -busybox_hash := 6843ba7977081e735fa0fdb05893e3c002c8c5ad7c9c80da206e603cc0ac47e7 +busybox_hash := 542750c8af7cb2630e201780b4f99f3dcceeb06f505b479ec68241c1e6af61a5 busybox_configure := $(MAKE) CC="$(heads_cc)" oldconfig busybox_config := config/busybox.config diff --git a/modules/u-root b/modules/u-root index c943bef43..adbc73791 100644 --- a/modules/u-root +++ b/modules/u-root @@ -1,53 +1,75 @@ -# # u-root go runtime # # This is not a normal Heads module, since it builds all of its # own dependencies. # -u-root_url := github.com/u-root/u-root +u-root_url := https://github.com/u-root/u-root u-root_output := $(build)/$(BOARD)/u-root.cpio -UROOT_CMDS ?= +tinycore_lib_path=$(build)/tinycorelibs +tinycore_core_gz=$(tinycore_lib_path)/rootfs64.gz +tinycore_rootfs_files=lib/ld-linux-x86-64.so.2 lib/libanl.so.1 lib/libc.so.6 lib/libdl.so.2 lib/libm.so.6 lib/libpthread.so.0 lib/librt.so.1 usr/lib/libgcc_s.so.1 lib/libcrypt.so.1 lib/libutil.so.1 +# +# + -export GOPATH=$(build)/go +#UROOT_CMDS ?= exp/tcz +UROOT_CMDS ?= core/wget + +export GOPATH=$(build)/u-root +UROOT_PATH=$(GOPATH)/src/github.com/u-root +UROOT_BUILT_PATH=$(GOPATH)/src/github.com/u-root/u-root + +#Substitutions +#translate paths so that user can only specify what is found under u-root/cmds/ directory under UROOT_CMDS from board config to overwrite default above u-root_src_cmds := $(foreach cmd,$(UROOT_CMDS),github.com/u-root/u-root/cmds/$(cmd)) +#translate tinycore extracted rootfs real path into initramfs desired path. tinycore embeds lib/xyz already +#tinycore_libs_to_path := $(foreach libfile,$(tinycore_rootfs_files),$(tinycore_lib_path)/$(libfile):$(libfile)) +#translate each libs from tinycore_lib_path to usable u-root -files tuple (/real/local/path:desired/initramfs/path) +#u-root_files_statement:= $(foreach libfile,$(tinycore_rootfs_files),-files $(tinycore_lib_path)/$(libfile):$(libfile)) +u-root_files_statement:= -files /etc/ssl/certs/ca-certificates.crt -u-root_build := $(GOPATH)/bin/u-root -$(GOPATH)/bin/u-root: - go get github.com/u-root/u-root/... -# +u-root_build := $(UROOT_BUILT_PATH) + +$(UROOT_BUILT_PATH): + mkdir -p $(GOPATH)/src/github.com/u-root/ + git clone https://github.com/u-root/u-root.git $(UROOT_PATH) + cd $(UROOT_PATH) && go build + # If the board directory has its own go commands, copy them # into the u-root tree so that they will be bundled into the go initrd # TODO: generalize this to support more commands # TODO: fix this sort that it doesn't leave commands lying around -# +# ifeq "y" "$(shell [ -r 'boards/$(BOARD)/uinit.go' ] && echo y)" u-root_uinit := $(GOPATH)/src/github.com/u-root/u-root/cmds/uinit/uinit.go $(u-root_uinit): $(u-root_build) boards/$(BOARD)/uinit.go $(call install,boards/$(BOARD)/uinit.go,$@) endif -$(u-root_output): $(u-root_build) $(u-root_uinit) - $(call do,U-ROOT,$@,\ - $(GOPATH)/bin/u-root \ - -build=bb \ - -format=cpio \ - -o $@ \ - $(u-root_src_cmds)\ - ) +#TODO: put anchor here for rootfs download path to download if not present +$(tinycore_core_gz): + mkdir -p $(tinycore_lib_path) + cd $(tinycore_lib_path) \ + && wget http://tinycorelinux.net/14.x/x86_64/release/distribution_files/rootfs64.gz \ + && zcat rootfs64.gz | cpio -i > /dev/null 2>&1 || true + +$(u-root_output): $(u-root_build) $(u-root_uinit) $(tinycore_core_gz) + $(UROOT_BUILT_PATH) \ + -uroot-source $(UROOT_PATH) \ + -initcmd="" \ + -build=gbb \ + -defaultsh="" \ + $(u-root_files_statement) \ + -format=cpio \ + -o $@ \ + $(u-root_src_cmds) # Override the initrd inputs and add in the kernel modules initrd-$(CONFIG_UROOT) += $(u-root_output) - -ifeq "$(CONFIG_UROOT)" "y" -# If we are building for u-root, disable the default CONFIG_HEADS -# so that the heads/initrd/etc directories will not be included -CONFIG_HEADS=n - # Since we do not include u-root in modules-y, we have to define our # own intermediate and clean targets here $(build)/$(u-root_dir)/.build: $(u-root_output) u-root.clean: $(RM) $(u-root_output) -endif