diff --git a/rootfs.py b/rootfs.py index 5a9e798..bce02ac 100755 --- a/rootfs.py +++ b/rootfs.py @@ -12,6 +12,7 @@ you can run bootstap inside chroot. # SPDX-FileCopyrightText: 2021 Bastian Bittorf # SPDX-FileCopyrightText: 2021 Melg Eight # SPDX-FileCopyrightText: 2021-23 fosslinux +# SPDX-FileCopyrightText: 2023-24 Gábor Stefanik import argparse import os @@ -31,6 +32,7 @@ def create_configuration_file(args): config.write(f"CHROOT={args.chroot or args.bwrap}\n") config.write(f"UPDATE_CHECKSUMS={args.update_checksums}\n") config.write(f"JOBS={args.cores}\n") + config.write(f"SWAP_SIZE={args.swap}\n") config.write(f"INTERNAL_CI={args.internal_ci or False}\n") config.write(f"BARE_METAL={args.bare_metal}\n") if (args.bare_metal or args.qemu) and not args.kernel: @@ -44,7 +46,7 @@ def create_configuration_file(args): config.write("KERNEL_BOOTSTRAP=False\n") config.write(f"BUILD_KERNELS={args.update_checksums or args.build_kernels}\n") -# pylint: disable=too-many-statements +# pylint: disable=too-many-statements,too-many-branches def main(): """ A few command line arguments to customize bootstrap. @@ -86,6 +88,8 @@ def main(): parser.add_argument("--early-preseed", help="Skip early stages of live-bootstrap.", nargs=None) parser.add_argument("--internal-ci", help="INTERNAL for github CI") + parser.add_argument("-s", "--swap", help="Swap space to allocate in Linux", + default=0) # QEMU arguments parser.add_argument("-q", "--qemu", help="Use QEMU", @@ -143,6 +147,13 @@ def main(): else: args.target_size = 0 + # Swap file size validation + if args.qemu or args.bare_metal: + args.swap = (int(str(args.swap).rstrip('gGmM')) * + (1024 if str(args.swap).lower().endswith('g') else 1)) + else: + args.swap = 0 + # bootstrap.cfg try: os.remove(os.path.join('steps', 'bootstrap.cfg')) diff --git a/seed/script-generator.c b/seed/script-generator.c index 65daa38..a02f656 100644 --- a/seed/script-generator.c +++ b/seed/script-generator.c @@ -214,11 +214,12 @@ Token *logic(Token *tok, char **val) { /* logic = "(" * (name | * (name "==" value) | + * (name "!=" value) | * (logic "||" logic) | * (logic "&&" logic)) * ")" */ - + char *lhs = tok->val; char *rhs; tok = tok->next; @@ -235,8 +236,17 @@ Token *logic(Token *tok, char **val) { } else { lhs = "False"; } - } else { - fputs("Expected == after ", stderr); + } else if (strcmp(tok->val, "!=") == 0) { + /* Case for inequality. */ + rhs = tok->next->val; + tok = tok->next->next; + if (strcmp(get_var(lhs), rhs) == 0) { + lhs = "False"; + } else { + lhs = "True"; + } + } else { + fputs("Expected == or != after ", stderr); fputs(lhs, stderr); fputs(" in logic\n", stderr); exit(1); diff --git a/steps/improve/swap.sh b/steps/improve/swap.sh new file mode 100644 index 0000000..6dea7a4 --- /dev/null +++ b/steps/improve/swap.sh @@ -0,0 +1,19 @@ + +#!/bin/sh +# +# SPDX-FileCopyrightText: 2024 Gábor Stefanik +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# Set up swap + +. /steps/bootstrap.cfg +. /steps/env + +if ! test -f /swapfile +then + echo "Making swap..." + dd if=/dev/zero of=/swapfile bs=1M count=${SWAP_SIZE} + mkswap /swapfile +fi +swapon /swapfile diff --git a/steps/manifest b/steps/manifest index 91cc455..653d8da 100644 --- a/steps/manifest +++ b/steps/manifest @@ -119,6 +119,7 @@ build: linux-4.9.10 ( BUILD_LINUX == True ) jump: break ( INTERNAL_CI == pass1 ) jump: linux ( CHROOT == False ) improve: finalize_fhs +improve: swap ( SWAP_SIZE != 0 ) build: musl-1.2.4 build: curl-8.5.0 improve: populate_device_nodes