index : archiso32 | |
Archlinux32 iso tools | gitolite user |
summaryrefslogtreecommitdiff |
author | Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> | 2012-10-13 14:40:41 -0300 |
---|---|---|
committer | Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> | 2012-10-13 14:40:41 -0300 |
commit | 753d2038024541ac2d10f74e6d408d6ed1a23f2a (patch) | |
tree | d9bd649845f00decd5e4fbcfd04ad8a04f147ce6 /README | |
parent | 1746e31049c50fb413cceeefcf21b2bda4e2de48 (diff) |
-rw-r--r-- | README | 487 |
@@ -1,487 +0,0 @@ -INDEX ------ - -* Boot parameters (initramfs stage) - * hooks/archiso - * hooks/archiso_pxe_common - * hooks/archiso_pxe_nbd - * hooks/archiso_pxe_http - * hooks/archiso_pxe_nfs - * hooks/archiso_loop_mnt -* Transfer ISO file to target medium (configs/releng) - * To -> CD / DVD / BD - * To -> USB-key / SD / HDD / SSD - * PC-BIOS (MBR) - * PC-BIOS (ISOHYBRID-MBR) - * PC-EFI (GPT) [x86_64 only] -* Alternative boot methods (configs/releng) - * ISO in loopback mode - * ISO in memdisk mode - * Network booting (PXE) [first stage] - * DHCP + TFTP - * DHCP + HTTP - * HTTP/NFS/NBD [second stage] -* Build requirements -* Image types generated by mkarchiso. -* File format for aitab. -* Why the /isolinux and /arch/boot/syslinux directories? -* Know issues -* Building the most basic Arch Linux live media. (configs/baseline) -* Building official Arch Linux live media. (configs/releng) - - - -*** Boot parameters (initramfs stage) - -** hooks/archiso - -* archisolabel= Set the filesystem label where archiso files reside. - Default: (unset) -* archisodevice= Set the device node where archiso medium is located. - Default: "/dev/disk/by-label/${archisolabel}" -* archisobasedir= Set the base directory where all files reside. - Default: "arch" -* aitab= Set the path for "aitab" file. - Default: ${archisobasedir}/aitab -* copytoram= If set to "y" or just "copytoram" without arguments, - all SquashFS are copied to "RAM". - Default: (unset) -* checksum= If set to "y" or just "checksum" without arguments, - performs a self-test of all files inside ${install_dir}, - and continue booting if ok. - Default: (unset) -* cow_label= Set the filesystem label where COW (dm-snapshot) - files must be stored. - Default: (unset) -* cow_device= Set the device node where COW (dm-snapshot) files - must be stored. - Default: (unset) or "/dev/disk/by-label/${cow_label}" -* cow_directory= Set a directory inside ${cow_device}. - Default: "/persistent_${archisolabel}/${arch}" -* cow_persistent= Set if snapshots are persistent "P" or non-persistent "N". - Default: "N" (if no ${cow_device} is used) otherwise "P". -* cowspace_size= Set the size of tmpfs /cowspace. This space is used for - Copy-On-Write files of dm-snapshot. - Size is in bytes (suffix with "k", "m" and "g") or - in percentage of available RAM. - Default: "75%" -* cowfile_size= Set the size for all files to be used as COW (dm-snapshot), - in percentage of the ro-device.fs file. This is mostly useful - when cow_device= is used and filesystem does not support - sparse files (ie VFAT). - Default: "100%" -* copytoram_size= Set the size of tmpfs. This space is used for - copy of all SquashFS images used, if copytoram=y. - Size is in bytes (suffix with "k", "m" and "g") or - in percentage of available RAM. - Default: "75%" -* dm_snap_prefix= Set a prefix for device-mapper snapshot node names. - Default: "arch" -* arch= Force an architecture type (i686 | x86_64). - Do not set it for normal operations. - Useful for running a 64 bit kernel / 32 bit userspace. - Default: (architecture of running kernel) - - -** hooks/archiso_pxe_common - -* ip= This parameter is setup automatically by PXELINUX - when option "IPAPPEND" is set to 1 or 2 in config. - ip=<client-ip>:<boot-server-ip>:<gw-ip>:<netmask> - Default: (set via PXE server) -* BOOTIF= This parameter is setup automatically by PXELINUX - when option "IPAPPEND" is set to 2 or 3 in config. - BOOTIF=<hardware-address-of-boot-interface> - Default: (set via PXELINUX) -* copy_resolvconf= Copy /etc/resolv.conf from initramfs to live-enviroment. - Set to "n" to skip them. - Default: "y" - - -** hooks/archiso_pxe_nbd - -* archiso_nbd_name= Set NBD export name used by the server. - Default: archiso -* archiso_nbd_srv= Set an IP address where NBD reside. - If ${pxeserver} is used, PXE IP will be used. - Default: (unset) - - -** hooks/archiso_pxe_http - -* archiso_http_srv= Set an HTTP URL (must end with /) where ${archisobasedir} - is found with all *.sfs files. - In the IP/domain part if ${pxeserver} is used, use PXE IP. - Default: (unset) -* archiso_http_spc= Set the size of tmpfs where *.sfs files are downloaded. - Default: "75%" - - -** hooks/archiso_pxe_nfs - -* archiso_nfs_srv= Set the NFS-IP:/path of the server - In the IP part if ${pxeserver} is used, PXE IP will be used. - Default: (unset) -* archiso_nfs_opt= Set NFS mount options separated by comma. - Default: (unset, see below) - These are the implicit options: - port = as given by server portmap daemon - rsize = 1024 - wsize = 1024 - timeo = 7 - retrans = 3 - acregmin = 3 - acregmax = 60 - acdirmin = 30 - acdirmax = 60 - flags = hard, nointr, noposix, cto, ac - - -** hooks/archiso_loop_mnt - -* img_label= Set the filesystem label where archiso-image.iso. - Default: (unset) -* img_dev= Device where archiso-image.iso reside. - Default: (unset) or "/dev/disk/by-label/${img_label}" -* img_loop= Full path where archiso-image.iso is located on ${img_dev} - Default: (unset) - - - -*** Transfer ISO image to target medium (configs/releng) - -ISO images names consist of: archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso - -Where: - <YYYY> Year - <MM> Month - <DD> Day - <ARCH> i686 | x86_64 | dual(*) - -(*) "dual" includes both i686 and x86_64 architectures. - - -** To -> CD / DVD / BD - -Note: All ISO images are booteable on a PC-BIOS via "El Torito" in no-emulation mode, - All x86_64 ISO images are booteable on a PC-EFI via "El Torito" in no-emulation mode. - -Nomeclature: - <B> scsibus number - <T> target number - <L> lun number - (Note: see cdrecord -scanbus, for these numbers) - - -1) Write it directly using your favorite recording program. -# cdrecord dev=<B>,<T>,<L> -dao archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso - - -** To -> USB Flash Drive (USB-key) / Memory card (SD) / - Hard-Disk Drive (HDD) / Solid-State Drive (SSD) - -Note: These steps are the general workflow, you can skip some of them, - using another filesystem if your bootloader supports it, - installing to another directory than "arch/" or using more than - one partition. Just ensure that main boot params options - (archisolabel= and archisobasedir=) are set correctly according to your setup. - -Nomeclature: -<DEV-TARGET>: Device node of the drive where ISO contents should be copied - (example: /dev/sdx) -<DEV-TARGET-N>: Device node of the partition on <DEV-TARGET> - (example: /dev/sdx1) -<MNT-TARGET-N>: Mount point path where <DEV-TARGET-N> is mounted - (example: /mnt/sdx/1) -<ISO-SOURCE>: Path to the ISO file archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso - (example: ~/archlinux-2012.07.22-x86_64.iso) -<FS-LABEL>: Represents the filesystem label of the <ISO-SOURCE> - (example: ARCH_201207 [for all ~/archlinux-2012.07.*.iso]) - - -* PC-BIOS (MBR): - -Note: Using here a MBR partition mode as example, but GPT should also works - if machine firmware is not broken. - Just ensure that partition is set with attribute "2: legacy BIOS bootable" - and use gptmbr.bin instead of mbr.bin for syslinux. - -1) Create one partition entry in MBR (of type "b" for FAT32 or "83" for EXTFS) - and mark it as "active" (bootable). -# fdisk <DEV-TARGET> - -2) Create a FAT32 or EXTFS filesystem on such partition and setup a label. -# mkfs.vfat -F 32 -n <FS-LABEL> <DEV-TARGET-N> -# mkfs.ext4 -L <FS-LABEL> <DEV-TARGET-N> - -3) Mount target filesystem. -# mount <DEV-TARGET-N> <MNT-TARGET-N> - -4) Extract ISO image on target filesystem. -# bsdtar -x --exclude=isolinux/ --exclude=EFI/ --exclude=loader/ -f <ISO-SOURCE> -C <MNT-TARGET-N> - -5) Install syslinux bootloader on target filesystem. (See know issue (2) if using FAT) -# extlinux -i <MNT-TARGET-N>/arch/boot/syslinux - -6) Unmount target filesystem. -# umount <MNT-TARGET-N> - -7) Install syslinux MBR boot code on target drive. -# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr.bin of=<DEV-TARGET> - - -* PC-BIOS (ISOHYBRID-MBR): - -Note: This method is the most easily, quick and dirty, but is the most limited - if you want to use your target medium for other purposes. - -1) Dump ISO file to target medium. -# dd if=<ISO-SOURCE> of=<DEV-TARGET> - - -* PC-EFI (GPT) [x86_64 only] - -Note: Using here a GPT partition mode as example, but MBR should also works - if machine firmware is not broken. - -1) Create one partition entry in GPT (of type "ef00") -# gdisk <DEV-TARGET> - -2) Create a FAT32 filesystem on such partition and setup a label. -# mkfs.vfat -F 32 -n <FS-LABEL> <DEV-TARGET-N> - -3) Mount target filesystem. -# mount <DEV-TARGET-N> <MNT-TARGET-N> - -4) Extract ISO image on target filesystem. -# bsdtar -x --exclude=isolinux/ --exclude=EFI/archiso/ --exclude=arch/boot/syslinux/ -f <ISO-SOURCE> -C <MNT-TARGET-N> - -5) Unmount target filesystem. -# umount <MNT-TARGET-N> - - - -*** Alternative boot methods (configs/releng) - -** ISO in loopback mode. - -Note: Described method is for using with GRUB2. - GRUB2 is installed on target media and archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso - is at path <TARGET-PATH> on disk <D> and partition <P>, - where filesystem is labeled as <TARGET-FS-LABEL>. - -menuentry "Arch Linux (x86_64)" { - set isofile="/<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso" - loopback loop (hd<D>,<P>)$isofile - linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=<FS-LABEL> img_label=<TARGET-FS-LABEL> img_loop=$isofile - initrd (loop)/arch/boot/x86_64/archiso.img -} - -menuentry "Arch Linux (i686)" { - set isofile="/<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso" - loopback loop (hd<D>,<P>)$isofile - linux (loop)/arch/boot/i686/vmlinuz archisolabel=<FS-LABEL> img_label=<TARGET-FS-LABEL> img_loop=$isofile - initrd (loop)/arch/boot/i686/archiso.img -} - - -** ISO in memdisk mode. - -Note: Described method is for using with SYSLINUX. Anyway MEMDISK from SYSLINUX can work - with other bootloaders. - SYSLINUX is installed on target media and archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso - is at path <TARGET-PATH>. - On 32-bit systems, is needed to pass vmalloc=nnM to the kernel, where nn is the size - of the ISO image plus 64 MiB (or 128 MiB). - - -LABEL arch_x64 - LINUX memdisk - INITRD /<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso - APPEND iso - -LABEL arch_x32 - LINUX memdisk - INITRD /<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-<ARCH>.iso - APPEND iso - - -** Network booting (PXE). - -All ISOs are ready to act as PXE server, some manual steps are needed -to setup the desired PXE boot mode. -Alternatively it is possible to use an existing PXE server following the same logic. -Note: Setup network first, adjust IP adresses, and respect all slashes "/". - -First stage is for loading kernel and initramfs via PXE, two methods described here: - -* DHCP + TFTP - -Note: All NIC firmwares should support this. - -# dnsmasq --port=0 \ - --enable-tftp \ - --tftp-root=/run/archiso/bootmnt \ - --dhcp-range=192.168.0.2,192.168.0.254,86400 \ - --dhcp-boot=/arch/boot/syslinux/gpxelinux.0 \ - --dhcp-option-force=209,boot/syslinux/archiso.cfg \ - --dhcp-option-force=210,/arch/ - -* DHCP + HTTP - -Note: Not all NIC firmware supports HTTP and DNS (if domain name is used). - At least this works with iPXE and gPXE. - -# dnsmasq --port=0 \ - --dhcp-range=192.168.0.2,192.168.0.254,86400 \ - --dhcp-boot=http://192.168.0.7/arch/boot/syslinux/gpxelinux.0 \ - --dhcp-option-force=209,boot/syslinux/archiso.cfg \ - --dhcp-option-force=210,http://192.168.0.7/arch/ - - -Once the kernel is started from PXE, SquashFS files and other misc files -inside "arch" directory must be loaded (second stage). One of the following -methods can be used to serve the rest of live-medium. - -* HTTP - -# darkhttpd /run/archiso/bootmnt - - -* NFS - -# echo "/run/archiso/bootmnt 192.168.0.*(ro,no_subtree_check,no_root_squash)" >> /etc/exports -# rc.d start rpcbind nfs-common nfs-server - - -* NBD - -Note: Adjust ARCH_201207 as needed. - -# cat << EOF > /tmp/nbd-server.conf -[generic] -[archiso] - readonly = true - exportname = /dev/disk/by-label/ARCH_201207 -EOF -# nbd-server -C /tmp/nbd-server.conf - - - -*** Build requirements - -** For mkarchiso script needs these packages (build host): - + squashfs-tools for mksquashfs - + libisoburn for xorriso - + btrfs-progs for mkfs.btrfs (optional) - -** For configs/releng build.sh needs theses packages (build host): - + dosfstools for mkfs.vfat - + patch for patch - + lynx for fetching the latest installation guide - -** For these hooks needs these packages (on target root-image) -* archiso - + (none) -* archiso_loop_mnt - + (none) -* archiso_pxe_common - + mkinitcpio-nfs-utils for ipconfig -* archiso_pxe_nbd - + nbd for nbd-client -* archiso_pxe_http - + curl for curl -* archiso_pxe_nfs - + mkinitcpio-nfs-utils for nfsmount -* archiso_shutdown - + (none) - - -*** Image types generated by mkarchiso. - -* image-name.sfs SquashFS image with all files directly on it. -* image-name.fs.sfs SquashFS with only one file inside (image-name.fs), - which is an image of some type of filesystem - (ext4, ext3, ext2, xfs), all files reside on it. - - -*** File format for aitab. - -The aitab file holds information about the filesystems images that must be -created by mkarchiso and mounted at initramfs stage from the archiso hook. -It consists of some fields which define the behaviour of images. - -# <img> <mnt> <arch> <sfs_comp> <fs_type> <fs_size> - -<img> Image name without extension (.fs .fs.sfs .sfs). -<mnt> Mount point. -<arch> Architecture { i686 | x86_64 | any }. -<sfs_comp> SquashFS compression type { gzip | lzo | xz }. -<fs_type> Set the filesystem type of the image - { ext4 | ext3 | ext2 | xfs | btrfs }. - A special value of "none" denotes no usage of a filesystem. - In that case all files are pushed directly to SquashFS filesystem. -<fs_size> An absolute value of file system image size in MiB. - (example: 100, 1000, 4096, etc) - A relative value of file system free space [in percent]. - {1%..99%} (example 50%, 10%, 7%). - This is an estimation, and calculated in a simple way. - Space used + 10% (estimated for metadata overhead) + desired % - - -*** Why the /isolinux and /arch/boot/syslinux directories? - -The /isolinux directory holds files needed for the ISOLINUX boot loader -module of SYSLINUX. ISOLINUX can not find config files on -/arch/boot/syslinux, like other boot loaders modules (EXTLINUX, SYSLINUX, etc). -When make your custom boot-pendrive, you need to copy /arch directory to it. -/isolinux/isolinux.cfg just holds /arch/boot/syslinux/syslinux.cfg - - -*** Know issues - -** (1) On shutdown lots of messages from systemd like: - - "Could not unmount /run/archiso/<ABC>: Device or resource busy" - "Could not delete loopback /dev/loop<N>: Device or resource busy" - This is not a real issue since, all mounted filesystem, loopback devices - and device mapper devices made by archiso will be "free" on "shutdown tmpfs" - (A.K.A deinitramfs), build at initramfs by [archiso_shutdown] initcpio hook. - Proper shutdown is mostly important when persistent is used. - -** (2) syslinux 4.05 bug with relative directories on FAT: - - "Could not find kernel image: boot/syslinux/whichsys.c32" - This should be fixed in 4.06. For now, workaround with: - sed -i "s|../../|/arch|" /<MNT-TARGET-N>/arch/boot/syslinux/syslinux.cfg - - -*** Building the most basic Arch Linux live media. (configs/baseline) - -* Install needed packages. - # pacman -S git make squashfs-tools libisoburn rsync --needed - -* Install archiso. - # git clone git://projects.archlinux.org/archiso.git - # make -C archiso install - -* Build a basic iso. - # /usr/share/archiso/configs/baseline/build.sh - -Note: If you want to customize, just see the configs/releng directory which is -used to build official images with much more things. - - -*** Building official Arch Linux live media. (configs/releng) - -* Install needed packages. - # pacman -S git make squashfs-tools libisoburn dosfstools lynx patch --needed - -* Install archiso. - # git clone git://projects.archlinux.org/archiso.git - # make -C archiso install - -* Build them! - # /usr/share/archiso/configs/releng/build.sh build all - -Note: See build.sh -h for more options. |