>>> one-context: Building main/one-context 0.9.0-r0 (using abuild 3.15.0-r0) started Wed, 17 Sep 2025 23:36:42 +0000 >>> one-context: Validating /home/udu/aports/main/one-context/APKBUILD... >>> one-context: Analyzing dependencies... >>> one-context: Installing for build: build-base blkid partx sfdisk WARNING: opening /home/udu/packages//main: No such file or directory fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/community/x86_64/APKINDEX.tar.gz (1/9) Installing libeconf (0.6.3-r0) (2/9) Installing libblkid (2.41-r9) (3/9) Installing blkid (2.41-r9) (4/9) Installing libsmartcols (2.41-r9) (5/9) Installing partx (2.41-r9) (6/9) Installing libuuid (2.41-r9) (7/9) Installing libfdisk (2.41-r9) (8/9) Installing sfdisk (2.41-r9) (9/9) Installing .makedepends-one-context (20250917.233646) Executing busybox-1.37.0-r19.trigger OK: 297 MiB in 98 packages >>> one-context: Cleaning up srcdir >>> one-context: Cleaning up pkgdir >>> one-context: Cleaning up tmpdir >>> one-context: Fetching https://github.com/jirutka/one-context/archive/v0.9.0/one-context-0.9.0.tar.gz >>> one-context: Fetching https://github.com/jirutka/one-context/archive/v0.9.0/one-context-0.9.0.tar.gz >>> one-context: Checking sha512sums... one-context-0.9.0.tar.gz: OK >>> one-context: Unpacking /var/cache/distfiles/one-context-0.9.0.tar.gz... (command.CommandList children:[ (C (w ) (w )) (ShFunction name_tok: name:dev_size_mb body:(BraceGroup left: children:[ (C (w ) (w child:(C (w ) (w ) (w (DQ ($ dev_path))) ) right: ) ) ) ) (C (w ) (w ($ bytes)) (w ) (w ) (w ) (w ) ) ] right: ) code_str:"dev_size_mb() {\n\tlocal dev_path=\"$1\"\n\n\tlocal bytes=\"$(blockdev --getsize64 \"$dev_path\")\"\n\texpr $bytes / 1024 / 1024\n}" ) (ShFunction name_tok: name:is_partition body:(BraceGroup left: children:[ (C (w ) (w name_tok: var_name:dev_path suffix_op:(suffix_op.Unary op: arg_word:(w ) ) right: ) ) ) ) ] right: ) code_str:"is_partition() {\n\tlocal dev_path=\"$1\"\n\ttest -e \"/sys/class/block/${dev_path##*/}/partition\"\n}" ) (ShFunction name_tok: name:is_last_partition body:(BraceGroup left: children:[ (C (w ) (w child:(C (w ) (w ) (w ) (w ) (w (DQ ($ part_path))) (w (DQ ($ disk_path))) ) right: ) ) ) ) (C (w ) (w child:(command.Pipeline children:[ (C (w ) (w ) (w ) (w ) (w (DQ ($ disk_path))) ) (C (w ) (w ) (w ) ) ] ops:[] ) right: ) ) ) ) (C (w ) (w (DQ ($ part_uuid))) (w ) ) ] right: ) code_str:"is_last_partition() {\n\tlocal part_path=\"$1\"\n\tlocal disk_path=\"$2\"\n\n\tlocal part_uuid=\"$(partx -sg -o UUID \"$part_path\" \"$disk_path\")\"\n\tlocal last_uuid=\"$(partx -sg -o UUID \"$disk_path\" | tail -n 1)\"\n\n\t[ \"$part_uuid\" = \"$last_uuid\" ]\n}" ) (ShFunction name_tok: name:part_resize body:(BraceGroup left: children:[ (C (w ) (w ) (w ) (w ) (w ] ) (C (w ) (w ) (w (DQ ($ disk_path))) ) ] right: ) code_str:"part_resize() {\n\tlocal disk_path=\"$1\"\n\tlocal partno=\"$2\"\n\n\t# Note: sfdisk prints \"Resource busy\" error if --no-tell-kernel is not used\n\t# and we must use 'partx --update' anyway.\n\techo ', +' | sfdisk --no-reread --no-tell-kernel --color=never --partno \"$partno\" \"$disk_path\"\n\n\t# Tell kernel that the partition table has been modified.\n\tpartx --update \"$disk_path\"\n}" ) (ShFunction name_tok: name:part_resize_if_needed body:(BraceGroup left: children:[ (C (w ) (w name_tok: var_name:dev_path suffix_op:(suffix_op.Unary op: arg_word:(w ) ) right: ) ) ) ) (C (w ) (w child:(C (w ) (w ) (w ($ part_name) ) ) right: ) ) ) ) (command.ShAssignment left: name_tok: var_name:disk_path suffix_op:(suffix_op.Unary op: arg_word:(w ) ) right: ) ) ) ) ] ) (C (w ) (w child:(C (w ) (w ) (w ) (w ) (w (DQ ($ part_path))) (w (DQ ($ disk_path))) ) right: ) ) ) ) (command.Case case_kw: to_match:(case_arg.Word w:(w (DQ ($ scheme)))) arms_start: arms:[ (CaseArm left: pattern:(pat.Words words:[(w ) (w )] ) middle: action:[] right: ) (CaseArm left: pattern:(pat.Words words:[(w )]) middle: action:[ (command.Sentence child:(C (w ) (w (DQ < Lit_Chars "WARN: Found unsupported partition table on " > ($ disk_path) ($ scheme) ) ) ) terminator: ) (command.ControlFlow keyword: arg_word:(w ) ) ] right: ) ] arms_end: ) (command.If if_kw: arms:[ (IfArm keyword:...0x232a cond:[ (command.Sentence child:(command.Pipeline negated: children:[ (C (w ) (w (DQ ($ part_path))) (w (DQ ($ disk_path))) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x229a ) ] else_action:[] fi_kw: ) (C (w ) (w child:(C (w ) (w ($ part_name) ) ) right: ) ) ) ) (C (w ) (w child:(C (w ) (w ) (w (DQ ($ disk_path))) ) right: ) ) ) ) (C (w ) (w child:(C (w ) (w ) (w ) (w ) (w ) (w ) (w (DQ ($ part_path))) ) right: ) ) ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x2a22 cond:[ (command.Sentence child:(C (w ) (w (DQ (word_part.ArithSub left: anode:(arith_expr.Binary op: left:(w ($ disk_size)) right:(w ($ last_part_end)) ) right: ) ) ) (w ) (w ) (w ) ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x296e ) ] else_action:[] fi_kw: ) (C (w ) (w (DQ ($ partno) ($ disk_path) ) ) ) (C (w ) (w (DQ ($ disk_path))) (w (DQ ($ partno))) ) ] right: ) code_str:"part_resize_if_needed() {\n\tlocal part_path=\"$1\"\n\n\tlocal part_name=\"${dev_path##*/}\"\n\tlocal disk_path=\"$(readlink -f /sys/class/block/$part_name/..)\"\n\tdisk_path=\"/dev/${disk_path##*/}\"\n\n\t# sfdisk supports only DOS and GPT partitions.\n\tlocal scheme=\"$(partx -sg -o SCHEME \"$part_path\" \"$disk_path\")\"\n\tcase \"$scheme\" in\n\t\tdos | gpt) ;; # continue\n\t\t*) echo \"WARN: Found unsupported partition table on $disk_path: $scheme\" >&2; return 0;;\n\tesac\n\n\t# Only the last partition can be expanded.\n\tif ! is_last_partition \"$part_path\" \"$disk_path\"; then\n\t\treturn 0\n\tfi\n\n\tlocal partno=\"$(cat /sys/class/block/$part_name/partition)\"\n\t# Size of the block device in sectors.\n\tlocal disk_size=\"$(blockdev --getsz \"$disk_path\")\"\n\t# The end of the last partition in sectors.\n\tlocal last_part_end=\"$(partx -sg --sector-size 512 -o END \"$part_path\")\"\n\n\t# Ignore difference that is less than ~4 MiB.\n\tif [ \"$(( $disk_size - $last_part_end ))\" -lt 8192 ]; then\n\t\treturn 0\n\tfi\n\n\techo \"Resizing partition no. $partno on disk $disk_path\" >&2\n\tpart_resize \"$disk_path\" \"$partno\"\n}" ) (ShFunction name_tok: name:fs_size_mb body:(BraceGroup left: children:[ (C (w ) (w action:[ (command.Pipeline children:[ (C (w ) (w ) (w ) (w ) (w (DQ ($ dev_path))) ) (C (w ) (w ) (w (DQ ($ dev_path) ) ) ) ] ops:[] ) ] right: ) (CaseArm left: pattern:(pat.Words words:[(w )]) middle: action:[ (command.Pipeline children:[ (C (w ) (w ) (w (DQ ($ dev_path))) ) (C (w ) (w ) (w (SQ "s/Block (count|size):\\s*([0-9]+)/\\2/p")) ) (C (w )) (C (w ) (w (SQ "{ print int($1 * $2 / 1024 / 1024) }")) ) ] ops:[ ] ) ] right: ) (CaseArm left: pattern:(pat.Words words:[(w )]) middle: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] right: ) ] arms_end: ) ] right: ) code_str:"fs_size_mb() {\n\tlocal fs_type=\"$1\"\n\tlocal dev_path=\"$2\"\n\n\tcase \"$fs_type\" in\n\t\tbtrfs)\n\t\t\tbtrfs filesystem show --mbytes \"$dev_path\" \\\n\t\t\t\t| sed -En \"s|.* size ([0-9]+).*path $dev_path$|\\1|p\"\n\t\t;;\n\t\text*)\n\t\t\t# Note: df doesn't count reserved blocks, that's why we use dumpe2fs.\n\t\t\tdumpe2fs -h \"$dev_path\" 2>/dev/null \\\n\t\t\t\t| sed -En 's/Block (count|size):\\s*([0-9]+)/\\2/p' \\\n\t\t\t\t| xargs \\\n\t\t\t\t| awk '{ print int($1 * $2 / 1024 / 1024) }'\n\t\t;;\n\t\t*) return 1;;\n\tesac\n}" ) (ShFunction name_tok: name:fs_mountpoint body:(BraceGroup left: children:[ (C (w ) (w ($ dev_path) )) ) (C (w ) (w (SQ " ")) (w ) ) (C (w ) (w )) ] ops:[ ] ) ] right: ) code_str:"fs_mountpoint() {\n\tlocal dev_path=\"$1\"\n\n\tmount | grep \"^$dev_path \" | cut -d' ' -f3 | head -n1\n}" ) (ShFunction name_tok: name:fs_resize body:(BraceGroup left: children:[ (C (w ) (w action:[ (C (w ) (w ) (w ) (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w (DQ ($ dev_path))) ) right: ) ) ) ) ] right: ) (CaseArm left: pattern:(pat.Words words:[(w )]) middle: action:[(C (w ) (w (DQ ($ dev_path))))] right: ) (CaseArm left: pattern:(pat.Words words:[(w )]) middle: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] right: ) ] arms_end: ) ] right: ) code_str:"fs_resize() {\n\tlocal fs_type=\"$1\"\n\tlocal dev_path=\"$2\"\n\n\tcase \"$fs_type\" in\n\t\tbtrfs) btrfs filesystem resize max \"$(fs_mountpoint \"$dev_path\")\";;\n\t\text*) resize2fs \"$dev_path\";;\n\t\t*) return 1;;\n\tesac\n}" ) (ShFunction name_tok: name:fs_resize_if_needed body:(BraceGroup left: children:[ (C (w ) (w child:(C (w ) (w (DQ ($ fs_type))) (w (DQ ($ dev_path))) ) right: ) ) ) ) (C (w ) (w child:(C (w ) (w (DQ ($ dev_path)))) right: ) ) ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x3072 cond:[ (command.Sentence child:(command.AndOr children:[ (C (w ) (w ) (w (DQ ($ fs_size))) (w ) ) (C (w ) (w ) (w (DQ ($ dev_size))) (w ) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (C (w ) (w (DQ ($ fs_type) ($ dev_path) ) ) ) ] then_tok:...0x3a3a ) (IfArm keyword: cond:[ (command.Sentence child:(C (w ) (w ($ fs_size)) (w ) (w ($ dev_size)) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w (DQ ($ fs_type) ($ dev_path) ($ fs_size) ($ dev_size) ) ) ) (C (w ) (w (DQ ($ fs_type))) (w (DQ ($ dev_path))) ) ] then_tok:...0x392e ) ] else_action:[] fi_kw: ) ] right: ) code_str:"fs_resize_if_needed() {\n\tlocal fs_type=\"$1\"\n\tlocal dev_path=\"$2\"\n\n\tlocal fs_size=\"$(fs_size_mb \"$fs_type\" \"$dev_path\")\"\n\tlocal dev_size=\"$(dev_size_mb \"$dev_path\")\"\n\n\tif [ -z \"$fs_size\" ] || [ -z \"$dev_size\" ]; then\n\t\techo \"WARN: Failed to get size of $fs_type FS or device on $dev_path\" >&2\n\n\telif [ $fs_size -lt $dev_size ]; then\n\t\techo \"Resizing $fs_type on $dev_path from $fs_size MiB to device size $dev_size MiB\" >&2\n\t\tfs_resize \"$fs_type\" \"$dev_path\"\n\tfi\n}" ) (C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w (DQ ($ 0))) ) right: ) ) ) ) right: ) ) ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x3696 cond:[ (command.Sentence child:(C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:GROWFS_DISABLE suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x3626 ) ] else_action:[] fi_kw: ) (command.Pipeline children:[ (C (w )) (C (w ) (w (SQ " ")) (w ) ) (C (w )) (C (w )) (command.WhileUntil keyword: cond:[ (command.Sentence child:(C (w ) (w ) (w ) ) terminator: ) ] body:(command.DoGroup left: children:[ (command.Case case_kw: to_match:(case_arg.Word w:(w (DQ ($ fs_type)))) arms_start: arms:[ (CaseArm left: pattern:(pat.Words words:[ (w ) (w ) (w ) ] ) middle: action:[ (command.AndOr children:[ (C (w ) (w (DQ ($ dev_path)))) (C (w ) (w (DQ ($ dev_path))) ) ] ops:[] ) (C (w ) (w (DQ ($ fs_type))) (w (DQ ($ dev_path))) ) ] right: ) ] arms_end: ) ] right: ) ) ] ops:[ ] ) ] ) scripts/grow-fs PASS (command.CommandList children:[ (C (w ) (w )) (command.If if_kw: arms:[ (IfArm keyword:...0x11d2 cond:[ (command.Sentence child:(C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:SET_HOSTNAME suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (command.Pipeline children:[ (C (w ) (w (SQ "%s\\n")) (w (DQ (BracedVarSub left: name_tok: var_name:SET_HOSTNAME suffix_op:(suffix_op.Unary op: arg_word:(w ) ) right: ) ) ) ) (C (w ) (w (SQ "s/[^-a-zA-Z0-9]/-/g; s/^-*//g; s/-*$//g")) ) ] ops:[] ) (C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w ) ) right: ) ) ) ) ] then_tok:...0x1156 ) ] else_action:[] fi_kw: ) ] ) scripts/hostname PASS (command.CommandList children:[ (C (w ) (w )) (C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w (DQ ($ 0))) ) right: ) ) ) ) right: ) ) ) ) (command.ShAssignment left: child:(C (w ) (w )) right: ) ) ) ) ] ) (command.ShAssignment left: child:(command.Pipeline children:[ (C (w ) (w (SQ "%s\\n")) (w (DQ (BracedVarSub left: name_tok: var_name:SET_FQDN suffix_op:(suffix_op.Unary op: arg_word:(w (BracedVarSub left: name_tok: var_name:SET_HOSTNAME suffix_op:(suffix_op.Unary op: arg_word:(w) ) right: ) ) ) right: ) ) ) ) (C (w ) (w (SQ "s/[^-a-zA-Z0-9\\.]/-/g; s/^[.-]*//g; s/[.-]*$//g") ) ) ] ops:[] ) right: ) ) ) ) ] ) (command.Case case_kw: to_match:(case_arg.Word w:(w (DQ ($ fqdn)))) arms_start: arms:[ (CaseArm left: pattern:(pat.Words words:[(w )] ) middle: action:[] right: ) (CaseArm left: pattern:(pat.Words words:[(w )]) middle: action:[ (command.ShAssignment left: ) ] arms_end: ) (C (w ) (w (SQ /etc/hosts)) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w (DQ ($ 0)))) right: ) ) ) ) ] ) scripts/hosts PASS (command.CommandList children:[ (C (w ) (w )) (C (w ) (w children:[ (C (w ) (w child:(command.Pipeline children:[ (C (w ) (w ($ ip))) (C (w ) (w ) (w ) ) ] ops:[] ) right: ) ) ) ) ] right: ) code_str:"gen_gateway_from_ipv4() {\n\tlocal ip=\"$1\"\n\n\techo \"$(echo $ip | cut -d. -f1-3).1\"\n}" ) (ShFunction name_tok: name:context_dev_by_mac body:(BraceGroup left: children:[ (C (w ) (w ) ) ) ] ops:[] ) ] right: ) code_str:"context_dev_by_mac() {\n\tlocal mac=\"$1\"\n\n\tenv | sed -En \"s/^(ETH[0-9]+)_MAC=$mac/\\1/p\"\n}" ) (ShFunction name_tok: name:getvals body:(BraceGroup left: children:[ (C (w ) (w ) (command.ForEach keyword: iter_names:[var] iterable:(for_iter.Words words:[ (w (CommandSub left_token: child:(command.Pipeline children:[ (C (w )) (C (w ) (w ) (w (DQ ($ regexp) ) ) ) (C (w )) ] ops:[ ] ) right: ) ) ] ) semi_tok: body:(command.DoGroup left: children:[(C (w ) (w (DQ ($ var))))] right: ) ) ] right: ) code_str:"getvals() {\n\tlocal regexp=\"$1\"\n\n\tlocal var; for var in $(env | sed -En \"s/^($regexp)=\\S.*/\\1/p\" | sort); do\n\t\tgetval \"$var\"\n\tdone\n}" ) (ShFunction name_tok: name:gen_iface_conf body:(BraceGroup left: children:[ (C (w ) (w child:(C (w ) (w (DQ ($ prefix)) ) ) right: ) ) ) ) (C (w ) (w child:(C (w ) (w (DQ ($ prefix)) ) (w (DQ (CommandSub left_token: child:(C (w ) (w (DQ ($ prefix)) ) ) right: ) ) ) ) right: ) ) ) ) (C (w ) (w child:(C (w ) (w (DQ ($ prefix)) ) ) right: ) ) ) ) (C (w ) (w (DQ ($ dev)))) (command.If if_kw: arms:[ (IfArm keyword:...0x1c02 cond:[ (command.Sentence child:(C (w ) (w (DQ ($ ip4))) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w child:(C (w ) (w (DQ ($ prefix)) ) (w (DQ ($ DEFAULT_MASK))) ) right: ) ) ) ) (C (w ) (w child:(C (w ) (w (DQ ($ prefix)) ) ) right: ) ) ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x24a6 cond:[ (command.Sentence child:(command.AndOr children:[ (C (w ) (w ) (w (DQ ($ gw4))) (w ) ) (C (w ) (w (DQ ($ prefix))) (w ) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (command.ShAssignment left: child:(C (w ) (w (DQ ($ ip4))) ) right: ) ) ) ) ] ) ] then_tok:...0x23a2 ) ] else_action:[] fi_kw: ) (C (w )) (command.AndOr children:[ (C (w ) (w ) (w (DQ ($ gw4))) (w ) ) (C (w ) (w (DQ ($ gw4))) ) ] ops:[] ) ] then_tok:...0x1b9a ) ] else_action:[] fi_kw: ) (command.If if_kw: arms:[ (IfArm keyword:...0x20fa cond:[ (command.Sentence child:(command.AndOr children:[ (C (w ) (w (DQ ($ ip6))) (w ) ) (C (w ) (w (DQ ($ gw6))) (w ) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (command.AndOr children:[ (C (w ) (w ) (w (DQ ($ ip4))) (w ) ) (C (w ) (w (SQ "\\n"))) ] ops:[] ) (C (w )) (command.AndOr children:[ (C (w ) (w ) (w (DQ ($ gw6))) (w ) ) (C (w ) (w (DQ ($ gw6))) ) ] ops:[] ) (C (w ) (w (DQ < Lit_Chars " pre-up echo 0 > /proc/sys/net/ipv6/conf/" > ($ dev) ) ) ) ] then_tok:...0x2032 ) ] else_action:[] fi_kw: ) (command.If if_kw: arms:[ (IfArm keyword:...0x27be cond:[ (command.Sentence child:(C (w ) (w ) (w (DQ (${ VSub_Name ip4) (${ VSub_Name ip6) (${ VSub_Name gw6) ) ) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w (DQ ($ dev) ) ) ) ] then_tok:...0x272a ) ] else_action:[] fi_kw: ) ] right: ) code_str:"gen_iface_conf() {\n\tlocal dev=\"$1\"\n\tlocal prefix=\"$2\"\n\n\tlocal ip4=\"$(getval \"$prefix\"_IP)\"\n\tlocal ip6=\"$(getval \"$prefix\"_IP6 \"$(getval \"$prefix\"_IPV6)\")\" # _IPV6 is deprecated\n\tlocal gw6=\"$(getval \"$prefix\"_GATEWAY6)\"\n\n\techo \"auto $dev\"\n\n\tif [ \"$ip4\" ]; then\n\t\tlocal netmask4=\"$(getval \"$prefix\"_MASK \"$DEFAULT_MASK\")\"\n\n\t\tlocal gw4=\"$(getval \"$prefix\"_GATEWAY)\"\n\t\tif [ -z \"$gw4\" ] && [ \"$prefix\" = 'ETH0' ]; then\n\t\t\tgw4=\"$(gen_gateway_from_ipv4 \"$ip4\")\"\n\t\tfi\n\n\t\tcat <<-EOF\n\t\t\tiface $dev inet static\n\t\t\t address $ip4\n\t\t\t netmask $netmask4\n\t\tEOF\n\t\t[ -z \"$gw4\" ] || echo \" gateway $gw4\"\n\tfi\n\n\tif [ \"$ip6\" ] && [ \"$gw6\" ]; then\n\t\t[ -z \"$ip4\" ] || printf '\\n'\n\t\tcat <<-EOF\n\t\t\tiface $dev inet6 static\n\t\t\t address ${ip6%/*}\n\t\t\t netmask ${ip6#*/}\n\t\tEOF\n\t\t[ -z \"$gw6\" ] || echo \" gateway $gw6\"\n\t\techo \" pre-up echo 0 > /proc/sys/net/ipv6/conf/$dev/accept_ra\"\n\tfi\n\n\tif [ -z \"${ip4}${ip6}${gw6}\" ]; then\n\t\techo \"iface $dev inet dhcp\" # fallback to DHCP\n\tfi\n}" ) (ShFunction name_tok: name:gen_network_conf body:(BraceGroup left: children:[ (C (w ) (w ) (w ) (w ) ) (command.ForEach keyword: iter_names:[dev] iterable:(for_iter.Words words:[ (w (CommandSub left_token: child:(C (w ) (w ) ) right: ) ) ] ) semi_tok: body:(command.DoGroup left: children:[ (command.AndOr children:[ (command.Redirect child:(command.ShAssignment left: child:(C (w ) (w ($ dev) ) ) right: ) ) ) ) ] ) redirects:[ (Redir op:"> loc:(redir_loc.Fd fd:2) arg:(w ) ) ] ) (command.ControlFlow keyword: ) ] ops:[] ) (command.ShAssignment left: child:(C (w ) (w (DQ ($ mac))) ) right: ) ) ) ) ] ) (command.If if_kw: arms:[ (IfArm keyword:...0x2db6 cond:[ (command.Sentence child:(C (w ) (w (DQ ($ prefix))) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w (DQ ($ dev))) (w (DQ ($ prefix))) ) (C (w ) (w (SQ ""))) ] then_tok:...0x2d4e ) ] else_action:[] fi_kw: ) ] right: ) ) ] right: ) code_str:"gen_network_conf() {\n\tlocal dev mac prefix\n\n\tfor dev in $(ls /sys/class/net); do\n\t\tmac=\"$(cat /sys/class/net/$dev/address)\" 2>/dev/null || continue\n\t\tprefix=\"$(context_dev_by_mac \"$mac\")\"\n\n\t\tif [ \"$prefix\" ]; then\n\t\t\tgen_iface_conf \"$dev\" \"$prefix\"\n\t\t\techo ''\n\t\tfi\n\tdone\n}" ) (ShFunction name_tok: name:gen_resolv_conf body:(BraceGroup left: children:[ (C (w ) (w ) (w iter_names:[item] iterable:(for_iter.Words words:[ (w (BracedVarSub left: name_tok: var_name:SEARCH_DOMAIN suffix_op:(suffix_op.Unary op: arg_word:(w) ) right: ) ) (w (CommandSub left_token: child:(C (w ) (w (SQ "ETH[0-9]+_SEARCH_DOMAIN")) ) right: ) ) ] ) semi_tok: body:(command.DoGroup left: children:[ (command.ShAssignment left: ($ item))) ) ] ) ] right: ) ) (command.AndOr children:[ (C (w ) (w ) (w (DQ ($ search))) (w ) ) (C (w ) (w (DQ ($ search)))) ] ops:[] ) (command.ForEach keyword: iter_names:[item] iterable:(for_iter.Words words:[ (w (BracedVarSub left: name_tok: var_name:DNS suffix_op:(suffix_op.Unary op: arg_word:(w) ) right: ) ) (w (CommandSub left_token: child:(C (w ) (w (SQ "ETH[0-9]+_DNS"))) right: ) ) ] ) semi_tok: body:(command.DoGroup left: children:[ (C (w ) (w (DQ ($ item))) ) ] right: ) ) ] right: ) code_str:"gen_resolv_conf() {\n\tlocal item search=''\n\n\tfor item in ${SEARCH_DOMAIN:-} $(getvals 'ETH[0-9]+_SEARCH_DOMAIN'); do\n\t\tsearch=\"$search $item\"\n\tdone\n\t[ -z \"$search\" ] || echo \"search $search\"\n\n\tfor item in ${DNS:-} $(getvals 'ETH[0-9]+_DNS'); do\n\t\techo \"nameserver $item\"\n\tdone\n}" ) (C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w (DQ ($ 0))) ) right: ) ) ) ) right: ) ) ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x3112 cond:[ (command.Sentence child:(command.Pipeline negated: children:[ (C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:NETWORK suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x3096 ) ] else_action:[] fi_kw: ) (C (w ) (w (SQ /etc/network/interfaces)) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w ($ 0))) right: ) ) ) (w (DQ (CommandSub left_token: child:(C (w )) right: ) ) ) ) (command.ShAssignment left: child:(C (w )) right: ) ) ) ) ] ) (command.If if_kw: arms:[ (IfArm keyword:...0x38e6 cond:[ (command.Sentence child:(C (w ) (w (DQ ($ resolv_conf))) (w ) ) terminator: ) ] then_kw: action:[ (command.AndOr children:[ (C (w ) (w ) (w ) (w ) ) (C (w ) (w ) ) ] ops:[] ) (C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w ($ 0)) ) right: ) ) ) ) (C (w ) (w (DQ ($ resolv_conf)))) ] then_tok:...0x387a ) ] else_action:[] fi_kw: ) (C (w ) (w ) ) ] ) scripts/network PASS (command.CommandList children:[ (C (w ) (w )) (C (w ) (w arms:[ (IfArm keyword:...0x114e cond:[ (command.Sentence child:(C (w ) (w ) (w (DQ (BracedVarSub left: name_tok: var_name:NTP suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x10ca ) ] else_action:[] fi_kw: ) (C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w (DQ ($ 0))) ) right: ) ) ) ) right: ) ) ) ) (command.ShAssignment left: child:(command.Pipeline children:[ (C (w ) (w (DQ ($ NTP)))) (C (w ) (w ) (w (SQ " \\t")) (w (SQ "\\n\\n")) ) (C (w ) (w ) (w ) (w (SQ "server %\\n")) ) ] ops:[ ] ) right: ) ) ) ] ) (command.ForEach keyword: iter_names:[file] iterable:(for_iter.Words words:[(w ($ CONF_FILES))]) semi_tok: body:(command.DoGroup left: children:[ (command.If if_kw: arms:[ (IfArm keyword:...0x17a2 cond:[ (command.Sentence child:(C (w ) (w ) (w (DQ ($ file))) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w (DQ ($ file))) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w (DQ ($ 0))) ) right: ) ) ) (w (DQ ($ ntp_conf))) ) ] then_tok:...0x172e ) ] else_action:[] fi_kw: ) ] right: ) ) ] ) scripts/ntp PASS (command.CommandList children:[ (C (w ) (w )) (command.If if_kw: arms:[ (IfArm keyword:...0x11d6 cond:[ (command.Sentence child:(C (w ) (w ) (w (DQ (BracedVarSub left: name_tok: var_name:SSH_PUBLIC_KEY suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x114e ) ] else_action:[] fi_kw: ) (command.If if_kw: arms:[ (IfArm keyword:...0x10d6 cond:[ (command.Sentence child:(command.Pipeline negated: children:[ (C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:USERNAME suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (command.ShAssignment left: child:(command.Pipeline children:[ (C (w ) (w ) (w (DQ ($ USERNAME))) ) (C (w ) (w ) (w ) ) ] ops:[] ) right: ) ) ) ) ] ) (command.ShAssignment left: name_tok: var_name:user_home suffix_op:(suffix_op.Unary op: arg_word:(w ) ) right: ) ) ) ) ] ) (C (w ) (w ) (w ) (w (DQ ($ USERNAME))) (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w (DQ ($ auth_file)))) right: ) ) ) ) (C (w ) (w (DQ ($ auth_file)))) (C (w ) (w ) (w (DQ ($ auth_file)))) (C (w ) (w (DQ ($ USERNAME))) (w (DQ ($ auth_file)))) (command.Pipeline children:[ (C (w ) (w (DQ ($ SSH_PUBLIC_KEY)))) (command.WhileUntil keyword: cond:[ (command.Sentence child:(C (w ) (w ) (w ) ) terminator: ) ] body:(command.DoGroup left: children:[ (command.If if_kw: arms:[ (IfArm keyword:...0x15ba cond:[ (command.Sentence child:(command.Pipeline negated: children:[ (C (w ) (w ) (w (DQ ($ pubkey))) (w (DQ ($ auth_file))) ) ] ops:[] ) terminator: ) ] then_kw: action:[(C (w ) (w (DQ ($ pubkey))))] then_tok:...0x1fce ) ] else_action:[] fi_kw: ) ] right: ) ) ] ops:[] ) ] ) scripts/ssh-public-key PASS (command.CommandList children:[ (C (w ) (w )) (C (w ) (w ) (w ) (w ) (w (DQ ($ SSMTP_CONF))) (w ) ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x10de ) ] else_action:[] fi_kw: ) (command.If if_kw: arms:[ (IfArm keyword:...0x1062 cond:[ (command.Sentence child:(C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:ROOT_EMAIL suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w ) (w (DQ ($ ROOT_EMAIL) ) ) (w (DQ ($ SSMTP_CONF))) ) ] then_tok:...0x1a8e ) ] else_action:[] fi_kw: ) (command.If if_kw: arms:[ (IfArm keyword:...0x19ca cond:[ (command.Sentence child:(C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:SMTP suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w ) (w (DQ ($ SMTP) ) ) (w (DQ ($ SSMTP_CONF))) ) ] then_tok:...0x1952 ) ] else_action:[] fi_kw: ) ] ) scripts/ssmtp PASS (command.CommandList children:[ (C (w ) (w )) (command.AndOr children:[ (C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:START_SCRIPT_BASE64 suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) (C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:START_SCRIPT suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) (command.ControlFlow keyword: arg_word:(w ) ) ] ops:[ ] ) (command.ShAssignment left: child:(C (w )) right: ) ) ) ) ] ) (C (w ) (w (DQ ($ tmpfile) )) (w ) (w ) (w ) (w ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x1a42 cond:[ (command.Sentence child:(C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:START_SCRIPT_BASE64 suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (command.Pipeline children:[ (C (w ) (w (SQ "%s\\n")) (w (DQ ($ START_SCRIPT_BASE64))) ) (C (w ) (w )) ] ops:[] ) ] then_tok:...0x19c6 ) (IfArm keyword: cond:[ (command.Sentence child:(C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:START_SCRIPT suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w (SQ "%s\\n")) (w (DQ ($ START_SCRIPT))) ) ] then_tok:...0x1852 ) ] else_action:[] fi_kw: ) (C (w ) (w (DQ ($ MOUNT_DIR)))) (C (w ) (w (SQ "Executing start script"))) (command.If if_kw: arms:[ (IfArm keyword:...0x16a6 cond:[ (command.Sentence child:(command.Pipeline children:[ (C (w ) (w ) (w (DQ ($ tmpfile))) ) (C (w ) (w ) (w (SQ "^#!\\s*\\w\\+")) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (C (w ) (w ) (w (DQ ($ tmpfile))) ) (C (w (DQ ($ tmpfile)))) ] then_tok:...0x15d2 ) ] else_kw: else_action:[ (C (w ) (w (DQ ($ tmpfile))) ) ] fi_kw: ) ] ) scripts/start-script PASS (command.CommandList children:[ (C (w ) (w )) (C (w ) (w ) (w (BracedVarSub left: name_tok: var_name:USER_SHELL suffix_op:(suffix_op.Unary op: name_tok: var_name:USERNAME_SHELL suffix_op:(suffix_op.Unary op: arg_word:(w (DQ )) ) right: ) ) ) right: ) ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x10da cond:[ (command.Sentence child:(C (w ) (w ) (w (DQ (BracedVarSub left: name_tok: var_name:USERNAME suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x1052 ) ] else_action:[] fi_kw: ) (C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w (DQ (CommandSub left_token: child:(C (w ) (w ) (w (DQ ($ 0))) ) right: ) ) ) ) right: ) ) ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x1956 cond:[ (command.Sentence child:(command.Pipeline negated: children:[(C (w ) (w (DQ ($ USERNAME))))] ops:[] ) terminator: ) ] then_kw: action:[ (C (w ) (w (DQ ($ USERNAME))) ) (command.If if_kw: arms:[ (IfArm keyword:...0x1822 cond:[ (command.Sentence child:(C (w ) (w ) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w ) (w ) (w ) (w (DQ ($ USER_SHELL))) (w (BracedVarSub left: name_tok: var_name:USER_UID suffix_op:(suffix_op.Unary op: arg_word:(w (DQ ($ USER_UID))) ) right: ) ) (w (DQ ($ USERNAME))) ) ] then_tok:...0x17a2 ) ] else_kw: else_action:[ (C (w ) (w ) (w ) (w ) (w ) (w (DQ ($ USER_SHELL))) (w (BracedVarSub left: name_tok: var_name:USER_UID suffix_op:(suffix_op.Unary op: arg_word:(w (DQ ($ USER_UID))) ) right: ) ) (w (DQ ($ USERNAME))) ) (C (w ) (w ) (w (DQ ($ USERNAME))) ) ] fi_kw: ) ] then_tok:...0x18ae ) ] else_action:[] fi_kw: ) (command.If if_kw: arms:[ (IfArm keyword:...0x1f72 cond:[ (command.Sentence child:(command.Pipeline negated: children:[ (C (w ) (w ) (w (DQ ($ USERNAME))) ) (C (w ) (w ) (w ($ ADMIN_GROUP)) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (C (w ) (w (DQ ($ USERNAME) ($ ADMIN_GROUP) ) ) ) (command.If if_kw: arms:[ (IfArm keyword:...0x1df6 cond:[ (command.Sentence child:(C (w ) (w ) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w ) (w ) (w ($ ADMIN_GROUP)) (w (DQ ($ USERNAME))) ) ] then_tok:...0x1d76 ) ] else_kw: else_action:[ (C (w ) (w (DQ ($ USERNAME))) (w ($ ADMIN_GROUP)) ) ] fi_kw: ) ] then_tok:...0x1e8a ) ] else_action:[] fi_kw: ) (command.If if_kw: arms:[ (IfArm keyword:...0x1c26 cond:[ (command.Sentence child:(C (w ) (w (DQ (BracedVarSub left: name_tok: var_name:USERNAME_SUDO suffix_op:(suffix_op.Unary op: arg_word:(w ) ) right: ) ) ) ) terminator: ) ] then_kw: action:[ (command.If if_kw: arms:[ (IfArm keyword:...0x1b92 cond:[ (command.Sentence child:(C (w ) (w ) (w ) ) terminator: ) ] then_kw: action:[ (command.ShAssignment left: ($ ADMIN_GROUP)) ) ) ] ) ] then_tok:...0x1b16 ) (IfArm keyword: cond:[ (command.Sentence child:(C (w ) (w ) (w ) ) terminator: ) ] then_kw: action:[ (command.ShAssignment left: ($ ADMIN_GROUP) ) ) ) ] ) ] then_tok:...0x246e ) ] else_kw: else_action:[ (C (w ) (w (DQ < Lit_Chars "WARNING: neither doas nor sudo is installed, doas/sudo rule for " > ($ ADMIN_GROUP) ) ) ) (command.ControlFlow keyword: arg_word:(w ) ) ] fi_kw: ) (command.If if_kw: arms:[ (IfArm keyword:...0x22be cond:[ (command.Sentence child:(command.Pipeline negated: children:[ (C (w ) (w ) (w (DQ ($ cfgfile))) (w ) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (C (w ) (w (DQ ($ cfgfile))) ) (C (w )) (C (w ) (w ) (w (DQ ($ cfgfile))) ) ] then_tok:...0x2236 ) ] else_action:[] fi_kw: ) ] then_tok:...0x1bae ) ] else_action:[] fi_kw: ) ] ) scripts/sudo-user PASS (command.CommandList children:[ (C (w ) (w )) (command.If if_kw: arms:[ (IfArm keyword:...0x11d2 cond:[ (command.Sentence child:(C (w ) (w ) (w (DQ (BracedVarSub left: name_tok: var_name:TIMEZONE suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) (w ) ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x114a ) ] else_action:[] fi_kw: ) (command.AndOr children:[ (command.ShAssignment left: child:(C (w ) (w ) ) right: ) ) ) ] ) (C (w )) ] ops:[] ) (command.ShAssignment left: name_tok: var_name:timezone suffix_op:(suffix_op.Unary op: arg_word:(w ) ) right: ) ) ) ] ) (command.If if_kw: arms:[ (IfArm keyword:...0x1a2a cond:[ (command.Sentence child:(C (w ) (w (DQ ($ timezone))) (w ) ) terminator: ) ] then_kw: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] then_tok:...0x1996 ) ] else_action:[] fi_kw: ) (C (w ) (w (DQ ($ TIMEZONE)))) ] ) scripts/timezone PASS (command.CommandList children:[ (C (w ) (w child:(C (w ) (w ) (w ) ) right: is_last_cmd:F ) terminator: ) ] then_kw: action:[ (C (w ) (w ) (w )) ] then_tok:...0x10e6 ) ] else_action:[] fi_kw: ) (ShFunction name_tok: name:update_config body:(BraceGroup left: children:[ (C (w ) (w name_tok: var_name:3 suffix_op:(suffix_op.Unary op: arg_word:(w (DQ (CommandSub left_token: child:(C (w ) (w )) right: ) ) ) ) right: ) ) ) ) (C (w ) (w ) (w ) (w ) (w (DQ ($ content))) (w ) ) (command.ShAssignment left: child:(C (w )) right: ) ) ) ] ) ] ops:[] ) (command.If if_kw: arms:[ (IfArm keyword:...0x165e cond:[ (command.Sentence child:(command.AndOr children:[ (C (w ) (w ) (w (DQ ($ conf_file))) (w ) ) (C (w ) (w ) (w (DQ ($ start_tag))) (w (DQ ($ conf_file))) ) ] ops:[] ) terminator: ) ] then_kw: action:[ (command.If if_kw: arms:[ (IfArm keyword:...0x1fea cond:[ (command.Sentence child:(C (w ) (w (DQ ($ content))) (w ) ) terminator: ) ] then_kw: action:[ (command.ShAssignment left: name_tok: var_name:content suffix_op:(suffix_op.PatSub pat:(w (SingleQuoted left: sval:"\n" right: ) ) replace:(w (word_part.EscapedLiteral token: ch:"\\" ) (SingleQuoted left: sval:"\n" right: ) ) replace_mode:Lit_Slash slash_tok: ) right: ) ) ) ] ) (C (w ) (w ) (w (DQ ($ start_tag) (word_part.EscapedLiteral token: ch:"\\" ) ($ content) < Lit_Chars "\t\t\t\t\t# read and discard next line and repeat until " > ($ end_tag) ($ end_tag) ) ) (w (DQ ($ conf_file))) ) ] then_tok:...0x1f82 ) ] else_kw: else_action:[ (C (w ) (w ) (w (DQ ($ start_tag) ($ end_tag) ) ) (w (DQ ($ conf_file))) ) ] fi_kw: ) ] then_tok:...0x156a ) (IfArm keyword: cond:[ (command.Sentence child:(C (w ) (w (DQ ($ content))) (w ) ) terminator: ) ] then_kw: action:[ (C (w ) (w (SQ "\\n%s\\n")) (w (DQ ($ content))) ) ] then_tok:...0x1ca6 ) ] else_action:[] fi_kw: ) ] right: ) code_str:"update_config() {\n\tlocal conf_file=\"$1\"\n\tlocal generated_by=\"$2\"\n\tlocal content=\"${3-\"$(cat -)\"}\" # if $3 is *not set*, read from STDIN\n\n\tlocal start_tag='# BEGIN generated'\n\tlocal end_tag='# END generated'\n\n\t[ -z \"$content\" ] || content=$(\n\t\tcat <<-EOF\n\t\t\t$start_tag by $generated_by\n\t\t\t# Do not modify this block, any modifications will be lost after reboot!\n\t\t\t$content\n\t\t\t$end_tag\n\t\tEOF\n\t)\n\n\tif [ -f \"$conf_file\" ] && grep -q \"^$start_tag\" \"$conf_file\"; then\n\n\t\tif [ \"$content\" ]; then\n\t\t\tcontent=${content//$'\\n'/\\\\$'\\n'} # escape \\n, busybox sed doesn't like them\n\t\t\tsed -ni \"/^$start_tag/ {\n\t\t\t\t\ta\\\\$content\n\t\t\t\t\t# read and discard next line and repeat until $end_tag or EOF\n\t\t\t\t\t:a; n; /^$end_tag/!ba; n\n\t\t\t\t}; p\" \"$conf_file\"\n\t\telse\n\t\t\t# Remove start/end tags and everything between them.\n\t\t\tsed -i \"/^$start_tag/,/^$end_tag/d\" \"$conf_file\"\n\t\tfi\n\n\telif [ \"$content\" ]; then\n\t\tprintf '\\n%s\\n' \"$content\" >> \"$conf_file\"\n\tfi\n}" ) (ShFunction name_tok: name:getval body:(BraceGroup left: children:[ (C (w ) (w name_tok: var_name:2 suffix_op:(suffix_op.Unary op: arg_word:(rhs_word.Empty) ) right: ) ) ) ) (C (w ) (w (DQ (word_part.EscapedLiteral token: ch:"$") ($ var_name) ($ default) ) ) ) ] right: ) code_str:"getval() {\n\tlocal var_name=\"$1\"\n\tlocal default=\"${2:-}\"\n\n\teval \"printf '%s\\n' \\${$var_name:-$default}\"\n}" ) (ShFunction name_tok: name:yesno body:(BraceGroup left: children:[ (command.Case case_kw: to_match:(case_arg.Word w:(w (DQ ($ 1)))) arms_start: arms:[ (CaseArm left: pattern:(pat.Words words:[ (w ) ] ) middle: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] right: ) (CaseArm left: pattern:(pat.Words words:[(w )]) middle: action:[ (command.ControlFlow keyword: arg_word:(w ) ) ] right: ) ] arms_end: ) ] right: ) code_str:"yesno() {\n\tcase \"$1\" in\n\t\t[yY][eE][sS]) return 0;;\n\t\t*) return 1;;\n\tesac\n}" ) ] ) scripts/utils.sh PASS >>> one-context: Entering fakeroot... created directory: '/home/udu/aports/main/one-context/pkg/' created directory: '/home/udu/aports/main/one-context/pkg/one-context/etc/' created directory: '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d' created directory: '/home/udu/aports/main/one-context/pkg/one-context/' created directory: '/home/udu/aports/main/one-context/pkg/one-context/usr/' created directory: '/home/udu/aports/main/one-context/pkg/one-context/usr/share/' created directory: '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/' created directory: '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts' 'scripts/utils.sh' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/utils.sh' created directory: '/home/udu/aports/main/one-context/pkg/one-context/etc/init.d' 'init.d/vmcontext' -> '/home/udu/aports/main/one-context/pkg/one-context/etc/init.d/vmcontext' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/00-network' -> '/usr/share/one-context/scripts/network' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/05-hostname' -> '/usr/share/one-context/scripts/hostname' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/10-hosts' -> '/usr/share/one-context/scripts/hosts' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/15-ntp' -> '/usr/share/one-context/scripts/ntp' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/20-timezone' -> '/usr/share/one-context/scripts/timezone' 'scripts/network' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/network' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/50-sudo-user' -> '/usr/share/one-context/scripts/sudo-user' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/55-ssh-public-key' -> '/usr/share/one-context/scripts/ssh-public-key' 'scripts/hostname' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/hostname' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/60-grow-fs' -> '/usr/share/one-context/scripts/grow-fs' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/65-ssmtp' -> '/usr/share/one-context/scripts/ssmtp' '/home/udu/aports/main/one-context/pkg/one-context/etc/one-context.d/90-start-script' -> '/usr/share/one-context/scripts/start-script' 'scripts/hosts' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/hosts' 'scripts/ntp' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/ntp' 'scripts/timezone' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/timezone' 'scripts/sudo-user' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/sudo-user' 'scripts/ssh-public-key' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/ssh-public-key' 'scripts/grow-fs' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/grow-fs' 'scripts/ssmtp' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/ssmtp' 'scripts/start-script' -> '/home/udu/aports/main/one-context/pkg/one-context/usr/share/one-context/scripts/start-script' >>> one-context*: Running postcheck for one-context >>> WARNING: one-context*: Found OpenRC directory (/etc/conf.d or /etc/init.d) but name doesn't end with -openrc >>> one-context*: Preparing package one-context... >>> one-context*: Tracing dependencies... blkid partx sfdisk >>> one-context*: Package size: 14.6 KB >>> one-context*: Compressing data... >>> one-context*: Create checksum... >>> one-context*: Create one-context-0.9.0-r0.apk >>> one-context: Build complete at Wed, 17 Sep 2025 23:36:49 +0000 elapsed time 0h 0m 7s >>> one-context: Cleaning up srcdir >>> one-context: Cleaning up pkgdir >>> one-context: Uninstalling dependencies... (1/9) Purging .makedepends-one-context (20250917.233646) (2/9) Purging blkid (2.41-r9) (3/9) Purging partx (2.41-r9) (4/9) Purging sfdisk (2.41-r9) (5/9) Purging libfdisk (2.41-r9) (6/9) Purging libsmartcols (2.41-r9) (7/9) Purging libuuid (2.41-r9) (8/9) Purging libblkid (2.41-r9) (9/9) Purging libeconf (0.6.3-r0) Executing busybox-1.37.0-r19.trigger OK: 296 MiB in 89 packages >>> one-context: Updating the main/x86_64 repository index... >>> one-context: Signing the index...