[arch-releng] [RFC] [PATCH] [archiso] Make a list of used block devices

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Wed Feb 22 20:59:27 EST 2012


On 02/22/2012 12:48 PM, Gerardo Exequiel Pozzi wrote:
> On 02/22/2012 08:22 AM, Dieter Plaetinck wrote:
>> On Wed, 22 Feb 2012 08:08:10 -0300
>> Gerardo Exequiel Pozzi<vmlinuz386 at yahoo.com.ar>  wrote:
>>
>>> On 02/22/2012 04:39 AM, Dieter Plaetinck wrote:
>>>> On Tue, 21 Feb 2012 20:01:30 -0300
>>>> Gerardo Exequiel Pozzi<vmlinuz386 at yahoo.com.ar>   wrote:
>>>>
>>>>> NOTE: Not tested yet, but should work(tm).
>>>>>
>>>>> This list includes block devices of ( 
>>>>> /run/archiso/used_block_devices ):
>>>>> * Boot medium [archisodevice] (only if no copytoram= is used)
>>>>> * Loop medium [img_dev] (only if no copytoram= is used)
>>>>> * COW space [cowdevice] (only if cowdevice= is used (no tmpfs is 
>>>>> used))
>>>>> * Loop devices used for SquashFS images.
>>>>> * Loop devices used for device-mapper devices (two per each 
>>>>> dm-device, one RO{*.fs} and one RW{*.cow})
>>>>>
>>>>> Aditionally all loop devices except for backing COW files, all are 
>>>>> setup as read-only.
>>>>>
>>>>> In configs/releng profile, a symlink is made at boot-time for AIF:
>>>>> /run/aif/ignore_devs ->   /run/archiso/used_block_devices
>>>>> ---
>>>>>    archiso/hooks/archiso                              |   20 
>>>>> ++++++++++++++++----
>>>>>    archiso/hooks/archiso_loop_mnt                     |    3 ++-
>>>>>    .../rc.d/functions.d/symlink_used_block_devices    |    7 +++++++
>>>>>    3 files changed, 25 insertions(+), 5 deletions(-)
>>>>>    create mode 100644 
>>>>> configs/releng/root-image/etc/rc.d/functions.d/symlink_used_block_devices
>>>>>
>>>>> diff --git a/archiso/hooks/archiso b/archiso/hooks/archiso
>>>>> index 3518d16..22b67e9 100644
>>>>> --- a/archiso/hooks/archiso
>>>>> +++ b/archiso/hooks/archiso
>>>>> @@ -10,7 +10,8 @@ _mnt_fs() {
>>>>>
>>>>>        mkdir -p "${newroot}${mnt}"
>>>>>
>>>>> -    ro_dev=$(losetup --find --show "${img}")
>>>>> +    ro_dev=$(losetup --find --show --read-only "${img}")
>>>>> +    echo ${ro_dev}>>   /run/archiso/used_block_devices
>>>>>        ro_dev_size=$(blockdev --getsz ${ro_dev})
>>>>>
>>>>>        if [[ "${cow_persistent}" == "P" ]]; then
>>>>> @@ -30,6 +31,7 @@ _mnt_fs() {
>>>>>        fi
>>>>>
>>>>>        rw_dev=$(losetup --find --show 
>>>>> "/run/archiso/cowspace/${cow_directory}/${img_name}.cow")
>>>>> +    echo ${rw_dev}>>   /run/archiso/used_block_devices
>>>>>
>>>>>        echo "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} 
>>>>> ${cow_persistent} 8" | dmsetup create ${dm_snap_name}
>>>>>
>>>>> @@ -39,6 +41,7 @@ _mnt_fs() {
>>>>>            launch_interactive_shell
>>>>>        else
>>>>>            echo "/dev/mapper/${dm_snap_name} ${mnt} auto defaults 
>>>>> 0 0">>   ${newroot}/etc/fstab
>>>>> +        echo /dev/mapper/${dm_snap_name}>>   
>>>>> /run/archiso/used_block_devices
>>>>>        fi
>>>>>    }
>>>>>
>>>>> @@ -46,7 +49,8 @@ _mnt_fs() {
>>>>>    _mnt_sfs() {
>>>>>        local img="${1}"
>>>>>        local mnt="${2}"
>>>>> -    local img_fullname="${img##*/}";
>>>>> +    local img_fullname="${img##*/}"
>>>>> +    local sfs_dev
>>>>>
>>>>>        mkdir -p "${mnt}"
>>>>>
>>>>> @@ -60,7 +64,9 @@ _mnt_sfs() {
>>>>>            msg "done."
>>>>>        fi
>>>>>        msg ":: Mounting '${img}' (SquashFS) to '${mnt}'"
>>>>> -    if ! mount -r "${img}" "${mnt}"&>   /dev/null ; then
>>>>> +    sfs_dev=$(losetup --find --show --read-only "${img}")
>>>>> +    echo ${sfs_dev}>>   /run/archiso/used_block_devices
>>>>> +    if ! mount -r "${sfs_dev}" "${mnt}"&>   /dev/null ; then
>>>>>            echo "ERROR: while mounting '${img}' to '${mnt}'"
>>>>>            launch_interactive_shell
>>>>>        fi
>>>>> @@ -137,7 +143,12 @@ run_hook() {
>>>>>    archiso_mount_handler() {
>>>>>        local newroot="${1}"
>>>>>
>>>>> -    mountpoint -q "/run/archiso/bootmnt" || _mnt_dev 
>>>>> "${archisodevice}" "/run/archiso/bootmnt" "-r"
>>>>> +    if ! mountpoint -q "/run/archiso/bootmnt"; then
>>>>> +        _mnt_dev "${archisodevice}" "/run/archiso/bootmnt" "-r"
>>>>> +        if [[ "${copytoram}" != "y" ]]; then
>>>>> +            echo $(readlink -f ${archisodevice})>>   
>>>>> /run/archiso/used_block_devices
>>>>> +        fi
>>>>> +    fi
>>>>>
>>>>>        if [[ ! -f "${aitab}" ]]; then
>>>>>            echo "ERROR: '${aitab}' file does not exist."
>>>>> @@ -170,6 +181,7 @@ archiso_mount_handler() {
>>>>>
>>>>>        if [[ -n "${cow_device}" ]]; then
>>>>>            _mnt_dev "${cow_device}" "/run/archiso/cowspace" "-r"
>>>>> +        echo $(readlink -f ${cow_device})>>   
>>>>> /run/archiso/used_block_devices
>>>>>            mount -o remount,rw "/run/archiso/cowspace"
>>>>>        else
>>>>>            msg ":: Mounting /run/archiso/cowspace (tmpfs) 
>>>>> filesystem, size=${cowspace_size}..."
>>>>> diff --git a/archiso/hooks/archiso_loop_mnt 
>>>>> b/archiso/hooks/archiso_loop_mnt
>>>>> index 664f3a5..808100d 100644
>>>>> --- a/archiso/hooks/archiso_loop_mnt
>>>>> +++ b/archiso/hooks/archiso_loop_mnt
>>>>> @@ -15,7 +15,7 @@ archiso_loop_mount_handler () {
>>>>>        msg ":: Setup a loop device from ${img_loop} located at 
>>>>> device ${img_dev}"
>>>>>        _mnt_dev "${img_dev}" "/run/archiso/img_dev" "-r"
>>>>>
>>>>> -    if ! _dev_loop=$(losetup --find --show 
>>>>> "/run/archiso/img_dev/${img_loop}"); then
>>>>> +    if ! _dev_loop=$(losetup --find --show --read-only 
>>>>> "/run/archiso/img_dev/${img_loop}"); then
>>>>>            echo "ERROR: Setting loopback device for file 
>>>>> '/run/archiso/img_dev/${img_loop}'"
>>>>>            launch_interactive_shell
>>>>>        fi
>>>>> @@ -27,5 +27,6 @@ archiso_loop_mount_handler () {
>>>>>            umount /run/archiso/img_dev
>>>>>        else
>>>>>            echo ${_dev_loop}>   /run/archiso/img_dev_loop
>>>>> +        echo $(readlink -f ${img_dev})>>   
>>>>> /run/archiso/used_block_devices
>>>>>        fi
>>>>>    }
>>>>> diff --git 
>>>>> a/configs/releng/root-image/etc/rc.d/functions.d/symlink_used_block_devices 
>>>>> b/configs/releng/root-image/etc/rc.d/functions.d/symlink_used_block_devices 
>>>>>
>>>>> new file mode 100644
>>>>> index 0000000..e2b9fc1
>>>>> --- /dev/null
>>>>> +++ 
>>>>> b/configs/releng/root-image/etc/rc.d/functions.d/symlink_used_block_devices
>>>>> @@ -0,0 +1,7 @@
>>>>> +symlink_used_block_devices()
>>>>> +{
>>>>> +    mkdir /run/aif
>>>>> +    ln -s /run/archiso/used_block_devices /run/aif/ignore_devs
>>>>> +}
>>>>> +
>>>>> +add_hook multi_end symlink_used_block_devices
>>>> Hey G,
>>>> seems like there's some small edits in here that have nothing to do 
>>>> with the actual block device listing changeset?
>>>>
>>>> Dieter
>>>>
>>> Yes, --read-only loops.
>>>
>> seems to me like you need 3 commits:
>> 1) for syntactical changes, only this:
>> -    local img_fullname="${img##*/}";
>> +    local img_fullname="${img##*/}"
>> 2) for the read only loop devices
>> 3) for the used_block_devices stuff
>>
>> Dieter
>>
>
> Any relevant comment about /run/aif/ignore_devs ? I think is more 
> important than how tell the history.
>
This is how finally looks booting core.iso from cdrom.

[root at archiso ~]# cat /run/aif/ignore_block_devices
/dev/sr0
/dev/loop0
/dev/loop1
/dev/loop2
/dev/mapper/arch_root-image
/dev/loop3
/dev/loop4
/dev/loop5
/dev/mapper/arch_lib-modules
/dev/loop6
/dev/loop7
/dev/loop8
/dev/mapper/arch_usr-share
/dev/loop9
/dev/loop10
[root at archiso ~]#

I done some more changes/fixes so... a rain of RFC patches is comming.

-- 
Gerardo Exequiel Pozzi
\cos^2\alpha + \sin^2\alpha = 1



More information about the arch-releng mailing list