HOWTO create your USB stick from a CRK ISO file inside a Linux environment


1. We use the `Manage disk partitions' util from Mandriva or Mageia 
   (/usr/sbin/diskdrake --hd) . Place your USB stick in your computer 
   running Mandriva or Mageia and launch diskdrake. Your USB stick will 
   showup in a new tab in this example sdc :


2. Later we mount your fresh formatted USB stick on /cdrom. First we need 
   to analyse the CrashRecoveryKit iso. Mount your iso file using losetup :

[acer30:root]:(~)# ll /data1/VirtualBox\ VMs/crash263212-mdk101-x86_64.iso 
-rw-r--r-- 1 stock stock 144535552 Feb  2  2014 /data1/VirtualBox VMs/crash263212-mdk101-x86_64.iso
[acer30:root]:(~)# 
[acer30:root]:(~)# losetup /dev/loop0 /data1/VirtualBox\ VMs/crash263212-mdk101-x86_64.iso 
[acer30:root]:(~)# losetup /dev/loop0 
/dev/loop0: [0802]:10092568 (/data1/VirtualBox VMs/crash263212-mdk101-x86_64.iso)
[acer30:root]:(~)# mount /dev/loop0 /cdrom  
mount: warning: /cdrom seems to be mounted read-only.
[acer30:root]:(~)# ls /cdrom/
boot/      extlinux/  images/    modules/    ossdvd/  sbin/
console/   hotplug/   isolinux/  ntfs-3g/    pcmcia/  smartmon/
dhclient/  hwdata/    lvm/       ntfsprogs/  README   utils/
[acer30:root]:(~)# cd /cdrom/
[acer30:root]:(/cdrom)# find . -type l -print
./console/usr/bin/unicode_start
./console/usr/lib64/libcfont.so.0
./console/usr/lib64/libconsole.so.0
./console/usr/lib64/libctutils.so.0
./hotplug/etc/hotplug/usb/hp1000fw
./hotplug/etc/hotplug.d/default/udev.hotplug
./hotplug/usr/lib/hotplug
./modules/2.6.32.12/build
./modules/2.6.32.12/source
./ntfsprogs/usr/lib64/libntfs.so
./ntfsprogs/usr/lib64/libntfs.so.7
./ntfs-3g/lib64/libntfs-3g.so.36
./ntfs-3g/usr/share/man/man8/mount.ntfs-3g.8.bz2
./ossdvd/usr/bin/mkhybrid
./utils/bin/awk
./utils/lib64/libnsl.so.1
./utils/lib64/libnss_nisplus.so.2
./utils/lib64/libnss_nis.so.2
./utils/lib64/libpam_misc.so.0
./utils/lib64/libpam.so.0
./utils/lib64/libpopt.so.0
./utils/lib64/libresolv.so.2
./utils/lib64/security/pam_unix_acct.so
./utils/lib64/security/pam_unix_auth.so
./utils/lib64/security/pam_unix_passwd.so
./utils/lib64/security/pam_unix_session.so
./utils/sbin/fsck.reiserfs
./utils/sbin/kallsyms
./utils/sbin/ksyms
./utils/sbin/mkfs.reiserfs
./utils/usr/bin/slogin
./utils/usr/bin/ssleay
./utils/usr/lib64/libcrack.so.2
./utils/usr/lib64/libcrypto.so
./utils/usr/lib64/libglib-2.0.so.0
./utils/usr/lib64/libgmodule-2.0.so.0
./utils/usr/lib64/libgobject-2.0.so.0
./utils/usr/lib64/libgpm.so
./utils/usr/lib64/libgpm.so.1
./utils/usr/lib64/libncurses.so
./utils/usr/lib64/libncurses.so.5
./utils/usr/lib64/libpci.so.3
./utils/usr/lib64/libreadline.so
./utils/usr/lib64/libreadline.so.4
./utils/usr/lib64/libreadline.so.4.1
./utils/usr/lib64/libreadline.so.4.2
./utils/usr/lib64/libssl.so
./utils/usr/lib64/libuser.so.1
[acer30:root]:(/cdrom)# find . -type l -print | wc -l
48
[acer30:root]:(/cdrom)# 

   It turns out this iso has 48 symbolic links which will later be 
   restored on the ext2 filesystem of the USB stick. I created a script 
   for this, symlinks.acl.sh .

3. But first you need to transfer the permissions layout of the mounted 
   iso to the ext2 filesystem on the USB stick. For that we use a rather 
   unknown tool getfacl [1], which comes with the 
   acl-2.2.51-1-mdv2011.0.x86_64 rpm package. 

[acer30:root]:(~)# getfacl -R /cdrom > /root/perms.acl 
getfacl: Removing leading '/' from absolute path names
[acer30:root]:(~)#
[acer30:root]:(~)# ll perms.acl
-rw-r--r-- 1 root root 514370 Jan 15 19:03 perms.acl
[acer30:root]:(~)# wc -l perms.acl
30310 perms.acl
[acer30:root]:(~)#
[acer30:root]:(~)# df
Filesystem      Size  Used Avail Use% Mounted on
rootfs          612G  465G  116G  81% /
udev            3.9G     0  3.9G   0% /dev
tmpfs           3.9G   16M  3.9G   1% /dev/shm
tmpfs           3.9G  2.2M  3.9G   1% /run
/dev/sda3       612G  465G  116G  81% /
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs           3.9G     0  3.9G   0% /media
/dev/sda2       276G  168G   94G  65% /data1
/dev/loop0      138M  138M     0 100% /cdrom
[acer30:root]:(~)# 
[acer30:root]:(~)# umount /cdrom 
[acer30:root]:(~)# fdisk -l /dev/sdc

Disk /dev/sdc: 15.5 GB, 15504900096 bytes
64 heads, 32 sectors/track, 14786 cylinders, total 30283008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *          32    16777215     8388592   83  Linux
[acer30:root]:(~)# mount /dev/sdc1 /cdrom
[acer30:root]:(~)# df
Filesystem      Size  Used Avail Use% Mounted on
rootfs          612G  465G  116G  81% /
udev            3.9G     0  3.9G   0% /dev
tmpfs           3.9G   16M  3.9G   1% /dev/shm
tmpfs           3.9G  2.2M  3.9G   1% /run
/dev/sda3       612G  465G  116G  81% /
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs           3.9G     0  3.9G   0% /media
/dev/sda2       276G  168G   94G  65% /data1
/dev/sdc1       7.9G   18M  7.5G   1% /cdrom
[acer30:root]:(~)#

4. Now fire up unetbootin, which can create bootable Live USB drives for a 
   variety of Linux distributions. According the screenshots select 
   crash263212-mdk101-x86_64.iso and transfer it to /cdrom (/dev/sdc1) 
   using unetbootin. If you have a newer type USB 3.0 stick this will go 
   quite fast. Older USB versions like 1.0, 1.1 and even 2.0 take their 
   time.

5.
  a. Restore permissions /root/perms.acl from the iso to the USB stick (/dev/sdc1).

[acer30:root]:(~)# ll perms.acl
-rw-r--r-- 1 root root 514370 Jan 15 19:03 perms.acl
[acer30:root]:(~)# cd /
[acer30:root]:(/)# setfacl --restore=/root/perms.acl
setfacl: cdrom/.rr_moved: No such file or directory
[acer30:root]:(/)# 

  b. Create the symbolic links on the USB stick (/dev/sdc1).

[acer30:root]:(~)# ll symlinks.acl.sh 
-rwxr-xr-x 1 root root 5824 Jan 15 16:14 symlinks.acl.sh*
[acer30:root]:(~)# sh symlinks.acl.sh
[acer30:root]:(~)# umount /cdrom
[acer30:root]:(~)# 

   And we are done. Used programs here are :

[acer30:root]:(~)# rpm -q -a | grep extlinux
extlinux-6.04-0.2-mdv2011.0.x86_64
[acer30:root]:(~)# rpm -q -a | grep 6.04-0.2
syslinux-6.04-0.2-mdv2011.0.x86_64
pxelinux-6.04-0.2-mdv2011.0.x86_64
extlinux-6.04-0.2-mdv2011.0.x86_64
syslinux-devel-6.04-0.2-mdv2011.0.x86_64
syslinux-efi-6.04-0.2-mdv2011.0.x86_64
[acer30:root]:(~)# 
[acer30:root]:(~)# rpm -q -a | grep unetbootin
unetbootin-661-1-mdv2011.0.x86_64
[acer30:root]:(~)#

Robert M. Stockmann
Sun Jan 15 20:01:32 CET 2023

References :
[1] Copy permissions to identical tree on linux / unix
    Asked 13 years, 4 months ago
    Modified 5 years, 5 months ago
    Viewed 22k times
   https://serverfault.com/questions/58277/copy-permissions-to-identical-tree-on-linux-unix

--------------->8------------- symlinks.acl.sh --------------8<--------
#!/bin/bash
#

CRASH_PATH=/cdrom
cd $CRASH_PATH/console/usr/bin
#./console/usr/bin/unicode_start -> ../../bin/unicode_start
rm -f unicode_start
ln -s ../../bin/unicode_start unicode_start
#
cd $CRASH_PATH/console/usr/lib64
#./console/usr/lib64/libcfont.so.0 -> libcfont.so.0.0.0
rm -f libcfont.so.0
ln -s libcfont.so.0.0.0 libcfont.so.0
#./console/usr/lib64/libconsole.so.0 -> libconsole.so.0.0.0
rm -f libconsole.so.0
ln -s libconsole.so.0.0.0 libconsole.so.0
#./console/usr/lib64/libctutils.so.0 -> libctutils.so.0.0.0
rm -f libctutils.so.0
ln -s libctutils.so.0.0.0 libctutils.so.0
#
cd $CRASH_PATH/hotplug/etc/hotplug/usb
#./hotplug/etc/hotplug/usb/hp1000fw -> ../../../usr/bin/hp1000fw
rm -f hp1000fw
ln -s ../../../usr/bin/hp1000fw hp1000fw
#
cd $CRASH_PATH/hotplug/etc/hotplug.d/default
#./hotplug/etc/hotplug.d/default/udev.hotplug -> ../../../sbin/udevsend
rm -f udev.hotplug
ln -s ../../../sbin/udevsend udev.hotplug
#
cd $CRASH_PATH/hotplug/usr/lib
#./hotplug/usr/lib/hotplug -> ../../lib/hotplug
rm -f hotplug
ln -s ../../lib/hotplug hotplug
#
cd $CRASH_PATH/modules/2.6.32.12
#./modules/2.6.32.12/build -> /usr/src/linux-2.6.32.12
rm -f build
ln -s /usr/src/linux-2.6.32.12 build
#./modules/2.6.32.12/source -> /usr/src/linux-2.6.32.12
rm -f source
ln -s /usr/src/linux-2.6.32.12 source
#
cd $CRASH_PATH/ntfsprogs/usr/lib64
#./ntfsprogs/usr/lib64/libntfs.so -> libntfs.so.7.0.0
rm -f libntfs.so
ln -s libntfs.so.7.0.0 libntfs.so
#./ntfsprogs/usr/lib64/libntfs.so.7 -> libntfs.so.7.0.0
rm -f libntfs.so.7
ln -s libntfs.so.7.0.0 libntfs.so.7
#
cd $CRASH_PATH/ntfs-3g/lib64
#./ntfs-3g/lib64/libntfs-3g.so.36 -> libntfs-3g.so.36.0.0
rm -f libntfs-3g.so.36
ln -s libntfs-3g.so.36.0.0 libntfs-3g.so.36
#
cd $CRASH_PATH/ntfs-3g/usr/share/man/man8
#./ntfs-3g/usr/share/man/man8/mount.ntfs-3g.8.bz2 -> ntfs-3g.8.bz2
rm -f mount.ntfs-3g.8.bz2
ln -s ntfs-3g.8.bz2 mount.ntfs-3g.8.bz2
#
cd $CRASH_PATH/ossdvd/usr/bin
#./ossdvd/usr/bin/mkhybrid -> mkisofs
rm -f mkhybrid
ln -s mkisofs mkhybrid
#
cd $CRASH_PATH/utils/bin
#./utils/bin/awk -> gawk
rm -f awk
ln -s gawk awk
#
cd $CRASH_PATH/utils/lib64
#./utils/lib64/libnsl.so.1 -> libnsl-2.3.3.so
rm -f libnsl.so.1
ln -s libnsl-2.3.3.so libnsl.so.1
#./utils/lib64/libnss_nisplus.so.2 -> libnss_nisplus-2.3.3.so
rm -f libnss_nisplus.so.2
ln -s libnss_nisplus-2.3.3.so libnss_nisplus.so.2
#./utils/lib64/libnss_nis.so.2 -> libnss_nis-2.3.3.so
rm -f libnss_nis.so.2
ln -s libnss_nis-2.3.3.so libnss_nis.so.2
#./utils/lib64/libpam_misc.so.0 -> libpam_misc.so.0.77
rm -f libpam_misc.so.0
ln -s libpam_misc.so.0.77 libpam_misc.so.0
#./utils/lib64/libpam.so.0 -> libpam.so.0.77
rm -f libpam.so.0
ln -s libpam.so.0.77 libpam.so.0
#./utils/lib64/libpopt.so.0 -> libpopt.so.0.0.0
rm -f libpopt.so.0
ln -s libpopt.so.0.0.0 libpopt.so.0
#./utils/lib64/libresolv.so.2 -> libresolv-2.3.3.so
rm -f libresolv.so.2
ln -s libresolv-2.3.3.so libresolv.so.2
#
cd $CRASH_PATH/utils/lib64/security
#./utils/lib64/security/pam_unix_acct.so -> pam_unix.so
rm -f pam_unix_acct.so
ln -s pam_unix.so pam_unix_acct.so
#./utils/lib64/security/pam_unix_auth.so -> pam_unix.so
rm -f pam_unix_auth.so
ln -s pam_unix.so pam_unix_auth.so
#./utils/lib64/security/pam_unix_passwd.so -> pam_unix.so
rm -f pam_unix_passwd.so
ln -s pam_unix.so pam_unix_passwd.so
#./utils/lib64/security/pam_unix_session.so -> pam_unix.so
rm -f pam_unix_session.so
ln -s pam_unix.so pam_unix_session.so
#
cd $CRASH_PATH/utils/sbin
#./utils/sbin/fsck.reiserfs -> reiserfsck
rm -f fsck.reiserfs
ln -s reiserfsck fsck.reiserfs
#./utils/sbin/kallsyms -> insmod
rm -f kallsyms
ln -s insmod kallsyms
#./utils/sbin/ksyms -> insmod
rm -f ksyms
ln -s insmod ksyms
#./utils/sbin/mkfs.reiserfs -> mkreiserfs
rm -f mkfs.reiserfs
ln -s mkreiserfs mkfs.reiserfs
#
cd $CRASH_PATH/utils/usr/bin
#./utils/usr/bin/slogin -> ./ssh
rm -f slogin
ln -s ./ssh slogin
#./utils/usr/bin/ssleay -> openssl
rm -f ssleay
ln -s openssl ssleay
#
cd $CRASH_PATH/utils/usr/lib64
#./utils/usr/lib64/libcrack.so.2 -> libcrack.so.2.7
rm -f libcrack.so.2
ln -s libcrack.so.2.7 libcrack.so.2
#./utils/usr/lib64/libcrypto.so -> libcrypto.so.0.9.7
rm -f libcrypto.so
ln -s libcrypto.so.0.9.7 libcrypto.so
#./utils/usr/lib64/libglib-2.0.so.0 -> libglib-2.0.so.0.600.3
rm -f libglib-2.0.so.0
ln -s libglib-2.0.so.0.600.3 libglib-2.0.so.0
#./utils/usr/lib64/libgmodule-2.0.so.0 -> libgmodule-2.0.so.0.600.3
rm -f libgmodule-2.0.so.0
ln -s libgmodule-2.0.so.0.600.3 libgmodule-2.0.so.0
#./utils/usr/lib64/libgobject-2.0.so.0 -> libgobject-2.0.so.0.600.3
rm -f libgobject-2.0.so.0
ln -s libgobject-2.0.so.0.600.3 libgobject-2.0.so.0
#./utils/usr/lib64/libgpm.so -> libgpm.so.1.19.0
rm -f libgpm.so
ln -s libgpm.so.1.19.0 libgpm.so
#./utils/usr/lib64/libgpm.so.1 -> libgpm.so.1.19.0
rm -f libgpm.so.1
ln -s libgpm.so.1.19.0 libgpm.so.1
#./utils/usr/lib64/libncurses.so -> libncurses.so.5.4
rm -f libncurses.so
ln -s libncurses.so.5.4 libncurses.so
#./utils/usr/lib64/libncurses.so.5 -> libncurses.so.5.4
rm -f libncurses.so.5
ln -s libncurses.so.5.4 libncurses.so.5
#./utils/usr/lib64/libpci.so.3 -> libpci.so.3.1.7
rm -f libpci.so.3
ln -s libpci.so.3.1.7 libpci.so.3
#./utils/usr/lib64/libreadline.so -> libreadline.so.4.3
rm -f libreadline.so
ln -s libreadline.so.4.3 libreadline.so
#./utils/usr/lib64/libreadline.so.4 -> libreadline.so.4.3
rm -f libreadline.so.4
ln -s libreadline.so.4.3 libreadline.so.4
#./utils/usr/lib64/libreadline.so.4.1 -> libreadline.so.4.3
rm -f libreadline.so.4.1
ln -s libreadline.so.4.3 libreadline.so.4.1
#./utils/usr/lib64/libreadline.so.4.2 -> libreadline.so.4.3
rm -f libreadline.so.4.2
ln -s libreadline.so.4.3 libreadline.so.4.2
#./utils/usr/lib64/libssl.so -> libssl.so.0.9.7
rm -f libssl.so
ln -s libssl.so.0.9.7 libssl.so
#./utils/usr/lib64/libuser.so.1 -> libuser.so.1.1.1
rm -f libuser.so.1
ln -s libuser.so.1.1.1 libuser.so.1

exit 0
--------------->8---------- end of symlinks.acl.sh ------------8<-------