Feature #317
Загрузка с LiveCD/LiveFlash при ином расположении файлов систеы
Status: | New | Start: | 06/25/2011 | |
---|---|---|---|---|
Priority: | Normal | Due date: | ||
Assignee: | Mikhail Hiretsky | % Done: | 0% |
|
Category: | Calculate Linux | Spent time: | - | |
Target version: | - | |||
Votes: | 1 |
Description
Давно уже не видел флешки меньше 2G
В связи с этим на своей флешке храню несколько версий кальки в разных директориях следующим образом
# ls -lA /mnt/cdrom/ итого 32 lrwxrwxrwx 1 root root 1 Ноя 13 2010 boot -> . lrwxrwxrwx 1 root root 17 Май 12 17:58 CDS-11.3-i686 -> CDS-20110512-i686 dr-xr-xr-x 5 root root 4096 Май 12 14:08 CDS-20110512-i686 lrwxrwxrwx 1 root root 13 Май 12 17:59 CDS-i686 -> CDS-11.3-i686 lrwxrwxrwx 1 root root 18 Май 29 15:24 CLDG-11.6-i686 -> cldg-20110519-i686 dr-xr-xr-x 5 root root 4096 Май 19 12:59 cldg-20110519-i686 lrwxrwxrwx 1 root root 14 Май 29 15:24 CLDG-i686 -> CLDG-11.6-i686 drwxr-xr-x 2 root root 4096 Сен 22 2010 grub -rw-r--r-- 1 root root 9 Янв 20 01:02 livecd drwx------ 2 root root 16384 Май 20 12:43 lost+found # ls -lA /mnt/cdrom/cldg-20110519-i686/ итого 1390432 dr-xr-xr-x 2 root root 4096 Май 19 12:59 boot dr-xr-xr-x 2 root root 4096 Май 19 12:59 isolinux -r-xr-xr-x 1 root root 9 Май 19 12:59 livecd -r-xr-xr-x 1 root root 1422389248 Май 19 12:59 livecd.squashfs dr-xr-xr-x 2 root root 4096 Май 19 12:59 syslinux # # Тут банально распакованные iso-образы кальки # cat /mnt/cdrom/livecd calculate
это позволяет загружаться с одной флешки в разные системы, а также (в перспективе) упрощает обновление системы на флешке при scratch-загрузке - достаточно будет указать директорию на флешке (к приеру /mnt/flash/cldg-$(date '%Y%m%d')i686) в которую собирать новый образ и изменить симлинк на нее (в данном случае ln --symbolic --force cldg$(date '%Y%m%d')-i686 /mnt/flash/CLDG-i686) не трогая конфиг grub-а
- В утилиту cl-install путь до squash-файла забит жестко, чтоб это побороть необходимо путь брать следующей python-командой
filter((lambda x: 'loop=' == x[:5]) ,open('/proc/cmdline').readline().split() )[0][5:]
Не особо заморачиваясь обошел это ограничение следующим образомmount -v --bind /mnt/cdrom/{CLDG-i686/,}
- Параметр docache не работает.
Связано это с тем, что среди прочего в init-скрипте происходит (в моем случае) попытка выполнить следующееcp -a ${NEW_ROOT}/mnt/cdrom/${LOOP} ${NEW_ROOT}/mnt/squash/${LOOP} ## что равносильно cp -a /newroot/mnt/cdrom//CLDG-i686/livecd.squashfs /mnt/squash//CLDG-i686/livecd.squashfs
и поскольку директории /mnt/squash//CLDG-i686/ пока не существует, это действие заканчивается ошибкой
С этим побороться не внося изменения в код не удалось, так что пришлось слегка поковырять genkernel/calckernel , результаты этого и выкладываю:
# diff -su /usr/share/genkernel/defaults/initrd.scripts{_orig,} --- /usr/share/genkernel/defaults/initrd.scripts_orig 2011-06-25 17:37:37.095401886 +0300 +++ /usr/share/genkernel/defaults/initrd.scripts 2011-06-25 18:33:34.302526754 +0300 @@ -210,10 +210,10 @@ if [[ $((${imagesize} + $addon)) -lt ${allmemory} ]]; then mount -o remount,size=${addon}000 -t tmpfs tmpfs ${NEW_ROOT} - mkdir ${NEW_ROOT}/mnt/squash - mount -o size=${imagesize}000 -t tmpfs tmpfs ${NEW_ROOT}/mnt/squash + mkdir -pv "${NEW_ROOT}/mnt/squash/`dirname "${LOOP}"`" + mount -o size=${imagesize}000 -t tmpfs tmpfs "${NEW_ROOT}/mnt/squash/`dirname "${LOOP}"`" good_msg "Copying loop file for caching..." - cp -a ${NEW_ROOT}/mnt/cdrom/${LOOP} ${NEW_ROOT}/mnt/squash/${LOOP} + cp -a "${NEW_ROOT}/mnt/cdrom/${LOOP}" "${NEW_ROOT}/mnt/squash/${LOOP}" if [ $? -ne 0 ] then bad_msg "Failed to cache the loop file! Lack of space?"
К сожалению ПОКА проверить работоспособность этого варианта я не могу (загрузился с той самой флешки в обычном режиме и пока перезагрузиться нельзя), но выкладываю сюда решение (как минимум чтоб не изобретать эти две строки поновому) т.к. уверен в его работоспособности на 100%. Тем не менее проверю и отпишусь поновому.
PS
на всякий случай прикладываю конфиг grub-а с моей флешки, чтоб было понятнее о чем разговор.
History
Updated by Михаил Гагауз over 13 years ago
ПОЧТИ оказался прав.
К сожалению mkdir из busybox не знает ключа -v Поэтому правильный вариант такой
1 # diff -su /usr/share/genkernel/defaults/initrd.scripts{_orig,}
2 --- /usr/share/genkernel/defaults/initrd.scripts_orig 2011-06-28 18:48:17.000000000 +0300
3 +++ /usr/share/genkernel/defaults/initrd.scripts 2011-06-28 18:50:10.000000000 +0300
4 @@ -210,10 +210,10 @@
5 if [[ $((${imagesize} + $addon)) -lt ${allmemory} ]];
6 then
7 mount -o remount,size=${addon}000 -t tmpfs tmpfs ${NEW_ROOT}
8 - mkdir ${NEW_ROOT}/mnt/squash
9 - mount -o size=${imagesize}000 -t tmpfs tmpfs ${NEW_ROOT}/mnt/squash
10 + mkdir -p "${NEW_ROOT}/mnt/squash/`dirname "${LOOP}"`"
11 + mount -o size=${imagesize}000 -t tmpfs tmpfs "${NEW_ROOT}/mnt/squash/`dirname "${LOOP}"`"
12 good_msg "Copying loop file for caching..."
13 - cp -a ${NEW_ROOT}/mnt/cdrom/${LOOP} ${NEW_ROOT}/mnt/squash/${LOOP}
14 + cp -a "${NEW_ROOT}/mnt/cdrom/${LOOP}" "${NEW_ROOT}/mnt/squash/${LOOP}"
15 if [ $? -ne 0 ]
16 then
17 bad_msg "Failed to cache the loop file! Lack of space?"
Нормальной работе с CD это никак повредить не может, лишь расширит возможности.
В связи с этим предлагаю внести данные изменения в апстрим.
Updated by Mikhail Hiretsky over 12 years ago
- Assignee set to Mikhail Hiretsky