Hello all I want to know opinions about my recent work to archiso, since there are lots of changes. If someone can do some tests, they are very welcomed. Sugestions are very appreciated. Thanks :) TODO: details to current work and archiso2dual. https://github.com/djgera/archiso/tree/dm-snapshot (single commit) (sorry for the grammar, my english is poor) Some highlights: ----- First, aufs2 is not used anymore. The new approach is using device mapper with a snapshot feature, it has some advantages and disadvantages. Basically this is a filesystem image that is read-only associated to a loopback device and another file with an special format (copy on write[COW]) associated to another loopback device. From these two loop dev, a dev-mapper is created, that is writeable. ------ [images] There are three types of images: (*.sqfs renamed to a more standard *.sfs) a) *.sfs: Classic SquashFS compressed images. [no COW used] b) *.fs.sfs: SquashFS with only one file. This file is an image of some filesystem (ext4, ext3, ...). [COW is used] c) *.fs: A filesystem (ext4, ext3, ...) without compressing with SquashFS. Can be useful for doing some test... [COW is used] ------ [aitab] The "isomounts" file is now called "aitab", since a new format is used. #img mnt arch sfs_comp fs_type fs_size img = filename of the image _without_ the extension mnt = mount point of the image arch = architecture of the image (valid options: i686 | x86_64 | any) sfs_comp = SquashFS compression type of the image (valid options gzip | lzo | xz) or "none" if no SquashFS. fs_type = Filesystem of the image (valid options: ext4 | ext3 | ext2 | xfs) or "none" if no filesystem is used. COW mode is only if this is used. fs_size = Total size of the image (absolute value in MiB) or percent of amount of free space (aproximated) in the image (valid values from 1% to 99%). [Ignored if fs_type=none] Of course some options are invalid sfs_comp=none, fs_type=none -------- [initcpio] How archiso hook works now (resume): 1) mount boot device where all images reside 2) mount a tmpfs filesystem to store all cow images (/cowspace) 3) mount all images listed in "aitab" For *.sfs: * assing the image to a loop dev, and mount it. For *.fs.sfs: * assing the image to a loop dev, and mount it to /sfs/$image_name * assing the image inside (*.fs) to a loop dev (A) (ro) * create an empty and sparse file of the same size of the loop dev (A), in the /cowspace * assing that file to a loop dev (B) (rw) * create a dm-snapshot from both loop devs (A) and (B), and mount it to desired location For *.fs * Same as previous without the first step. Note: copytoram does not work with *.fs images (TODO low priority). ------ While in the union mount approach, if "tmpfs" (rw_branch) is full a ENOSPC is reported, and nothing more. In this case, if in the device where the "cow" file reside is full, and you write to the dev-mapper, the system will crash, no ENOSPC is reported. OK? ------- [mkarchiso] NOTE: need an available loop device. (warning when run on chroot created by mkarchroot, since it does not create any loopback device node) * set -e -u * _msg_info and _msg_error functions _show_config => better (more clear) info / error messages :) * Some command line options remove since become obsolete (squashfs compression type, home dir, force) * New command "prepare", make all needed images (except iso). * Filesystem (*.fs) are created with space used plus 10% more (take care (aproximated for most cases) of metadata). * All directories (future images) listed on aitab should exists (aitab is parsed instead of using find) ----------- [configs/releng] (was syslinux-iso) * The build now uses a bash script instead of Makefile, we can take a better control of the build process. * There is no more "overlay" concept like with union mounts, all changes now are merged at build time in root-image. * directory scheme is more "dual-iso" friendly.. * Warning: Do not build net_iso after core_iso! (TODO stop with error) * download-repo.sh discarded, this process is now done in the same build.sh script (can exclude packages listed on a file) * core-pkgs.sfs (mounted at /repo/pkg): core.db + core_$arch_packages + core_any_symlinks (relative ../any/ ) * core-any-pkgs.sfs (mounted at /repo/any): core_any_pkgs * Warning: neither /repo/pkg and /repo/any is writeable (previously /src/... was) * .iso sizes: 382M archlinux-2011.06.14-core-i686.iso 392M archlinux-2011.06.14-core-x86_64.iso 195M archlinux-2011.06.14-netinstall-i686.iso 200M archlinux-2011.06.14-netinstall-x86_64.iso * Directory scheme or core-iso. ??? arch ? ??? aitab ? ??? any ? ? ??? core-any-pkgs.sfs ? ? ??? usr-share.fs.sfs ? ??? boot ? ? ??? i686 ? ? ? ??? archiso.img ? ? ? ??? vmlinuz26 ? ? ??? memtest ? ? ??? memtest.COPYING ? ??? i686 ? ??? core-pkgs.sfs ? ??? lib-modules.fs.sfs ? ??? root-image.fs.sfs ??? syslinux ??? boot.cat ??? *.com ??? *.c32 ??? *.0 ??? hdt ? ??? modalias.gz ? ??? pciids.gz ??? isolinux.bin ??? memdisk ??? splash.png ??? syslinux.cfg ------------- [configs/baseline] * A minimal working profile as example, booteable, just to do tests or use as template for other projects, etc. 145M archlinux-2011.06.14-i686.iso ??? arch ? ??? aitab ? ??? boot ? ? ??? i686 ? ? ??? archiso.img ? ? ??? vmlinuz26 ? ??? i686 ? ??? root-image.fs.sfs ??? syslinux ??? boot.cat ??? isolinux.bin ??? menu.c32 ??? syslinux.cfg -------- Make releng images / how to build: pacman -S devtools --noconfirm --needed mkarchroot /tmp/pichicho base mkarchroot -r bash /tmp/pichicho echo 'Server = ftp://192.168.0.66/archlinux/$repo/os/$arch' >> /etc/pacman.d/mirrorlist #your mirror! pacman -S make git squashfs-tools syslinux devtools cdrkit mkinitcpio-nfs-utils nbd --noconfirm --needed cd /tmp git clone git://github.com/djgera/archiso.git -b dm-snapshot cd archiso/archiso make install cd ../configs/releng/ ./build.sh all_iso #or net_iso | core_iso Enjoy! -- Gerardo Exequiel Pozzi \cos^2\alpha + \sin^2\alpha = 1