Commit graph

45 commits

Author SHA1 Message Date
Gábor Stefanik
b45e1f81ae Fix failure with --external-sources 2023-12-22 13:07:45 +01:00
Gábor Stefanik
32dc4c702b More verbose error message on HTTP errors 2023-12-22 13:07:45 +01:00
Gábor Stefanik
55d3c36e09 Move kernel-bootstrap source image out of the directory it's generated from
This way, an incomplete version of the image itself won't get included
in srcfs anymore.
2023-12-22 13:07:45 +01:00
Gábor Stefanik
3305f2a41b Use manifest to deduce pre-network sources list
No need to maintain a separate pre-network-sources file anymore,
the list is instead derived from the bootstrap manifest via the
source manifest.
2023-12-22 13:07:04 +01:00
Gábor Stefanik
a68ae62f9e Download distfiles only when needed, based on manifest
Unless --external-sources is given, only download distfiles that
need to be included in srcfs. The rest will be downloaded anyway
by the bootstrap system once it gets network access.

To accomplish this, instead of searching steps for sources files,
we now parse steps/manifest. As a side effect, source_manifest.py
now outputs source files in the order they appear in the manifest.
2023-12-22 13:07:04 +01:00
Gábor Stefanik
b4d9c5e7cb Disk creation improvements
* Support specifying the size of the target disk image for qemu
* For bare metal, only pad the image to the next megabyte
* Use truncate() to extend images, instead of writing zeros (faster)
* Return None from get_disk() with nonexistent name
* Leave 1MiB on non-boot disks, or 1GiB on boot disks, unpartitioned
  (for proper 4K alignment and to help preserve the srcfs or boot
  partition creation)
* Fix qemu invocation when an external.img is not used
* Make -qr work with kernel bootstrap (will need kexec-fiwix fix)
2023-12-22 13:06:19 +01:00
Gábor Stefanik
dc62d8242c Create external.img only when needed 2023-12-22 12:10:09 +01:00
fosslinux
ab47483a51 Linters & CI updates 2023-12-15 21:44:43 +11:00
fosslinux
05c13dd64e Modify rootfs.py infrastructure to support the new layout 2023-12-15 21:43:21 +11:00
rick-masters
4cf2b860ef Fix lint warning for unnecessary else block. 2023-11-27 14:10:37 +00:00
rick-masters
4d20284f85 Return process from run_as_root. 2023-11-27 13:55:05 +00:00
Seppo Yli-Olli
f893df52fe Add a wrapper for commmands needing sudo that checks if you are euid 0 2023-11-08 17:34:56 +02:00
Andrius Štikonas
26552a928f Increase disk size to 16G. 2023-05-20 12:46:22 +01:00
Eduardo Sánchez Muñoz
c143e65154 Pass --unshare-net to bwrap when building with --external-sources
Ensures that when `--external-sources` is used, the build does not require a working internet connection.

`--unshare-net` is always passed for the sysa phase.
2023-04-13 18:52:37 +02:00
Andrius Štikonas
d83f810773 Pylint fixes. 2023-02-01 22:17:57 +00:00
fosslinux
51b0bf8405 Rework tmpdir & associated a bit.
- Split out tmpdir logic into a separate entity & add the appropriate
  arguments and checks.
- sysb can be removed since there is now no associated logic.
- Move disk/etc logic into tmpdir.py.
2023-01-28 16:51:00 +11:00
Andrius Štikonas
77b64a0585 parts.rst: add more verbose description of stage0-posix. 2023-01-21 01:26:36 +00:00
Dor Askayo
a1c8c0312c Download source files using a source manifest 2023-01-13 23:38:18 +02:00
Dor Askayo
425beee8dd Always pass file name to download_file()
Move the file name decision to get_packages() when a file name is not
specified in the package source file.
2023-01-13 19:41:32 +02:00
Dor Askayo
38e5dfe35b Pass destination directory to download_file() 2023-01-13 16:21:56 +02:00
fosslinux
10a55522a2 Change sources getting method.
- Rather than defining the urls where they are gotten (python sysa,
  python sysc, inside sysc), a spec file is now used that is easily
  interpretable and tool-independent.
- This is interpreted by rootfs.py and inside sysc.
- This is also used to make sources available and extract sources.
- Manual dirname selection is no longer required as is tarball renaming
  upon download - all of this is handled automatically.

Fixes #188
2022-10-02 09:48:20 +11:00
Dor Askayo
43a8cc6b50 Add a timeout in requests.get() 2022-09-07 22:35:43 +03:00
fosslinux
25f37ba926 Various fixes from rebase
This took a while so a bunch of stuff got broken in rebase.
2022-06-18 09:10:11 +10:00
fosslinux
0ce50a6393 Add options for;
- disk to be created (blank disk given to live-bootstrap) (default)
- disk to already exist but sources downloaded within live-bootstrap
- sources to be downloaded outside live-bootstrap (non-blank disk given
  to live-bootstrap)

Also migrate sysb to use sys_transfer in QEMU mode also.

Note that this means copy_sysc is now irrelevant. sysc is *always*
sourced from sysa.
2022-06-10 13:33:16 +10:00
fosslinux
6ea1b8e295 Add e2fsprogs 1.45.7
Additionally, fix downloading in chunks for some files.
2022-06-10 13:30:58 +10:00
Andrius Štikonas
625c844779 Fix pylint. 2022-06-03 21:43:49 +01:00
Dor Askayo
8330ab4504 Add an option to avoid creating a tmpfs in prepare()
Root access is required for creating tmpfs mounts in the context of
the current mount namespace, and creating a tmpfs in the context of a
new mount namespace is less useful because a process in the parent
namespace can't easily access it.

So add an option to avoid creating tmpfs mounts, which will be used by
the rootless bootstrap mode for now.

In addition, when tmp directories aren't mounted as tmpfs, their
contents can't be removed using os.umount(). So instead remove them
recursively using shutil.rmtree().
2022-05-27 11:45:09 +03:00
Andrius Štikonas
9d15314ebc Checksum source tarballs during bootstrap. 2022-05-21 23:49:37 +01:00
Dor Askayo
c9868f4312 Add -P to the losetup command
It seems to be required for partitions to be recognized.
2022-05-10 22:37:52 +03:00
fosslinux
f1600467a7 Variety of improvements
- Rename sources to distfiles for clarity.
- Per sys(a/c) distfiles to reduce rootfs.py processing and reduce RAM
  usage in sysa.
- Canonicalise early kaem mes/tcc files to kaem script conventions.
- Cleanup unused setup in python.
2022-05-05 17:44:47 +10:00
Andrius Štikonas
5b032cb46c rootfs.py refactoring.
Switch to bzip2 packages
Move most of the preprocessing done by rootfs.py
into kaem and bash scripts inside live-bootstrap.
2022-04-21 00:49:56 +01:00
fosslinux
9543a47f1b Fix up checksums + other fixes 2022-03-12 16:23:24 +11:00
fosslinux
4fb8efafe2 Use sudo for losetup -f.
This is required in some environments.
2022-03-07 19:02:12 +11:00
Andrius Štikonas
6e3fab4da2 Remove mkbuild parameter. 2021-12-26 01:10:32 +00:00
Andrius Štikonas
3bb72fb0f2 Use recursive umount to unmount volumes mounted during bootstrap in chroot mode. 2021-12-23 00:52:30 +00:00
Gabriel Wicki
65c7d78620 fix mescc alias in mes.kaem script
delete --no-auto-compile : useless in this case (MES doesn't compile)
delete -- : this starts an interactive scheme session (which is not the case here)
2021-12-22 17:14:51 +01:00
Gabriel Wicki
4cde51df49 add both hashes to "Checksum mismatch"-Exception message 2021-12-22 16:23:00 +01:00
Andrius Štikonas
32ec57d62d Unhardcode x86 from initial steps. 2021-10-20 21:16:05 +01:00
fosslinux
306dac7ba6 Add prompts when particular options are not given in config files 2021-10-13 00:42:21 +01:00
Andrius Štikonas
e3d0191949 Update stage0-posix. 2021-10-08 20:55:06 +01:00
fosslinux
a8a9056f1d Change some formats to f-strings
As pylint recommends.
2021-09-20 14:31:10 +10:00
fosslinux
04180f5672 Various fixes + cleanup.
- Add parts.rst documentation for Linux kernel.
- Completely fix problems caused by new bootstrap, update checksums for
  /usr.
- Globalise populate_device_nodes.
- Enable deblobbing.
2021-09-14 14:59:08 +10:00
fosslinux
5c88f1c87f Add sysb and sysc scaffolding.
Now that we have the Linux Kernel built, we move to a full-disk (rather
than initramfs) setup in sysc. However, we cannot assume the seed kernel
has support for mounting hard drives. So, first we need to kexec into
sysb, which is used as a jumping off point to create the hard drive for
sysc.

Additionally, since 2.6.16 does not have support for on-demand initramfs
(initramfs must be built into kernel), we will have to rebuild the linux
kernel within sysb without the initramfs.

All of this process is not performed for chroot mode. Instead, we skip
sysb and jump straight to sysc, copying over appropriate data.

The python scripts have been changed slightly. Each sys* inherits
SysGeneral, which contains various functions which are not specific to
any sys* and simplifies those files. rootfs now also handles sysb and
sysc.

bootstrap.cfg also gives an indication whether we are running in a
chroot to avoid attempting to kexec/mount within a chroot.
2021-08-27 14:54:08 +10:00
Andrius Štikonas
8406399f47 Do not require chroot to be in PATH of non-root user. 2021-04-22 21:55:52 +01:00
Andrius Štikonas
713fd9143f Port rootfs.sh to Python 2021-04-11 00:06:24 +01:00