Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Скрипт, который с помощью overlayfs монтирует каталоги  (Прочитано 767388 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 7947
    • Просмотр профиля
Понятно, что у тебя 22.04.3. У меня 22.04.1.
Вывод терминала - это текст. Не надо картинок, скопировать-вставить.
Раз не получилось с разбегу, то идти мелкими шагами.
С самого начала, буквально, дословно.
 Первый этап - запуск сессии скриптом.
Расположение скрипта:
$ ls -l /usr/local/bin/avnses*
-rwxr-xr-x 1 root root 25472 Sep 19 08:59 /usr/local/bin/avnsession
Создать десктоп-файл, для запуска сессии:
$ cat /usr/share/wayland-sessions/admi.desktop
[Desktop Entry]
Type=Application
Name=admiGnom on Wayland
Exec=avnsession --version=23gn3 --log --
Это расположение для "wayland". Для "X", положить десктоп-файл в /usr/share/xsessions.
Перезагрузка.
На экране логина, после выбора пользователя, в правом нижнем углу нажать "шестеренку".
Выбрать "admiGnom on Wayland".
Запускается сессия, которая задана в этом десктоп-файле.

 Или может, если вернуться к самому началу темы, не заморачиваться с сессией вообще, а только монтировать оверлей?
« Последнее редактирование: 19 Сентября 2023, 06:46:45 от andytux »

Оффлайн Synoptic

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля

Я зашел выбрал "admiGnom on Wayland" и установил туда Chromium. После разлогинился и зашел выбрав "Ubuntu" там где шестерёнка. Chromium никуда не делся. Как теперь мне монтировать бутерброд из слоёв с разным ПО о котором писали выше?
Или может, если вернуться к самому началу темы, не заморачиваться с сессией вообще, а только монтировать оверлей?
Вообще изначальная задача была в оверлее, но чтобы в нём работали приложения. Я просто предположил что смена графических сессий необходима чтобы проще было управляться с оверлеями?

Онлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 7947
    • Просмотр профиля
Говорил уже несколько раз. В общем, монтирование с сессиями не связано никак.
Например, в "Ответ #6". Ты даже его процитироавл, но похоже, что не прочитал.
Монтировать можешь в любое время, в любом количестве. Вот только руками в терминале это делать неудобно. Поэтому...
 Второй этап - монтирование оверлеев.
Создаем каталог, в котором каталоги, монтируемые как upperdir:
$ ls -l /opt/avnup
total 12
drwxr-xr-x 2 root root 4096 Sep 19 21:18 etc
drwxr-xr-x 2 root root 4096 Sep 19 21:18 usr
drwxr-xr-x 2 root root 4096 Sep 19 21:48 var
Монтирую с помошью MC и его "user menu". После выполнения команды:
#  /bin/sh /tmp/mc-root/mcusrS2FBB2

Mounted /opt/avnup/var to /var as overlayfs

Mounted /opt/avnup/etc to /etc as overlayfs

Mounted /opt/avnup/usr to /usr as overlayfs

# cat /proc/mounts
...
/dev/mmcblk0p2 / ext4 rw,relatime,nobarrier,errors=remount-ro,commit=100 0 0
...
none /usr/local overlay rw,relatime,lowerdir=/usr/local,upperdir=/cdrom/opt/avlocal,workdir=/cdrom/opt/avlocalwork 0 0
none /var overlay rw,relatime,lowerdir=/var,upperdir=/opt/avnup/var,workdir=/opt/avnup/varwork 0 0
none /etc overlay rw,relatime,lowerdir=/etc,upperdir=/opt/avnup/etc,workdir=/opt/avnup/etcwork 0 0
none /usr overlay rw,relatime,lowerdir=/usr,upperdir=/opt/avnup/usr,workdir=/opt/avnup/usrwork 0 0

#  /bin/sh /tmp/mc-root/mcusrHGFOB2

Unmounted from /etc

Unmounted from /var
В выводе /proc/mounts оставил только существенные строки.


 В десктоп-файле изменяю параметр "--version":
$ cat /usr/share/wayland-sessions/admi.desktop
[Desktop Entry]
Type=Application
Name=admiGnom on Wayland
Exec=avnsession --version=23gn4 --log --
Теперь он соответствует загрузке с монтированием оверлея. Перезагружаюсь.
Результат:
$ cat /proc/mounts
...
/dev/mmcblk0p2 / ext4 rw,relatime,nobarrier,errors=remount-ro,commit=100 0 0
...
none /var overlay rw,relatime,lowerdir=/var,upperdir=/opt/avnup/var,workdir=/opt/avnup/varwork 0 0
none /etc overlay rw,relatime,lowerdir=/etc,upperdir=/opt/avnup/etc,workdir=/opt/avnup/etcwork 0 0
none /usr overlay rw,relatime,lowerdir=/usr,upperdir=/opt/avnup/usr,workdir=/opt/avnup/usrwork 0 0
none /usr/local overlay rw,relatime,lowerdir=/usr/local,upperdir=/cdrom/opt/avlocal,workdir=/cdrom/opt/avlocalwork,xino=off 0 0
Как минимум, видно, что монтироавние /opt/avnup произошло раньше, чем /usr/local, который монтировался уже другим скриптом.


Пользователь добавил сообщение 20 Сентября 2023, 08:06:30:
Третий этап - параметр запуска скрипта берётся из /proc/cmdline.
В десктоп-файл добавить параметр "--cmdline":
$ cat /usr/share/wayland-sessions/admi.desktop
[Desktop Entry]
Type=Application
Name=admiGnom on Wayland
Exec=avnsession --cmdline --log --
В конфиге груба, в строку запуска ядра добавить параметр ядра "--version=23gn4". Перезагрузка.
Когда скрипт начнет исполняться, он прочитает значение /proc/cmdline:
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz --version=23gn4 root=LABEL=so1202 quiet --
Далее, скрипт будет действовать в соответствии с параметром "--version=23gn4".
Это позволяет не исправлять каждый раз десктоп-файл, не выбирать другой на экране логина, а изменяя параметр груба, изменять параметры загрузки сессии.
Так как аргумент простой, то несложно изменять его прямо в меню груба, во время загрузки.
Добавить постоянное значение, как обычно, в /etc/default/grub или /etc/grub.d/40_custom.
« Последнее редактирование: 20 Сентября 2023, 08:06:30 от andytux »

Оффлайн Synoptic

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.2.0-32-generic root=UUID=d8cbee76-5d5f-40b2-bfae-ae53517bc5af ro

Монтирую с помошью MC и его "user menu". После выполнения команды:
Не могли бы тут поподробнее? У меня нет МС и я монтирую каталоги вручную через терминал
root@admi-System-Product-Name:/home/admi# cat /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=3951952k,nr_inodes=987988,mode=755,inode64 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,noexec,relatime,size=798720k,mode=755,inode64 0 0
/dev/sdb2 / ext4 rw,relatime,errors=remount-ro 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev,inode64 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k,inode64 0 0
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
efivarfs /sys/firmware/efi/efivars efivarfs rw,nosuid,nodev,noexec,relatime 0 0
bpf /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=1588 0 0
mqueue /dev/mqueue mqueue rw,nosuid,nodev,noexec,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,nosuid,nodev,noexec,relatime 0 0
tracefs /sys/kernel/tracing tracefs rw,nosuid,nodev,noexec,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,relatime,pagesize=2M 0 0
fusectl /sys/fs/fuse/connections fusectl rw,nosuid,nodev,noexec,relatime 0 0
configfs /sys/kernel/config configfs rw,nosuid,nodev,noexec,relatime 0 0
ramfs /run/credentials/systemd-sysusers.service ramfs ro,nosuid,nodev,noexec,relatime,mode=700 0 0
/dev/loop0 /snap/bare/5 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/sdb2 /var/snap/firefox/common/host-hunspell ext4 ro,noexec,noatime,errors=remount-ro 0 0
/dev/loop12 /snap/snapd/20092 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop13 /snap/core22/864 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop14 /snap/gnome-42-2204/126 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop3 /snap/core22/858 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop5 /snap/firefox/2987 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop1 /snap/core20/1974 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop9 /snap/snap-store/959 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop7 /snap/gnome-42-2204/120 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop11 /snap/snapd/19457 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop4 /snap/cups/980 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop2 /snap/chromium/2623 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop15 /snap/snapd-desktop-integration/83 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop10 /snap/core20/2015 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop8 /snap/gtk-common-themes/1535 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/loop6 /snap/gnome-3-38-2004/143 squashfs ro,nodev,relatime,errors=continue,threads=single 0 0
/dev/sdb1 /boot/efi vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /run/snapd/ns tmpfs rw,nosuid,nodev,noexec,relatime,size=798720k,mode=755,inode64 0 0
nsfs /run/snapd/ns/cups.mnt nsfs rw 0 0
nsfs /run/snapd/ns/snapd-desktop-integration.mnt nsfs rw 0 0
tmpfs /run/user/1000 tmpfs rw,nosuid,nodev,relatime,size=798716k,nr_inodes=199679,mode=700,uid=1000,gid=1000,inode64 0 0
gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
portal /run/user/1000/doc fuse.portal rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
nsfs /run/snapd/ns/snap-store.mnt nsfs rw 0 0
nsfs /run/snapd/ns/firefox.mnt nsfs rw 0 0
none /usr/local overlay rw,relatime,lowerdir=/usr/local,upperdir=/cdrom/opt/avlocal,workdir=/cdrom/opt/avlocalwork,nouserxattr 0 0
none /var overlay rw,relatime,lowerdir=/var,upperdir=/opt/avnup/var,workdir=/opt/avnup/varwork,nouserxattr 0 0
none /etc overlay rw,relatime,lowerdir=/etc,upperdir=/opt/avnup/etc,workdir=/opt/avnup/etcwork,nouserxattr 0 0
none /usr overlay rw,relatime,lowerdir=/usr,upperdir=/opt/avnup/usr,workdir=/opt/avnup/usrwork,nouserxattr 0 0
В десктоп-файле изменяю параметр "--version" как у Вас, после перезагрузки выбор пользователя > шестерёнка > аdmiGnom on Wayland > черный экран потом возврат в меню выбора пользователя > шестерёнка > Ubuntu > стандартное монтирование без оверлеев.

В конфиге груба, в строку запуска ядра добавить параметр ядра "--version=23gn4". Перезагрузка.
В этот файл который не рекомендуется изменять? "/boot/grub/grub.cfg" я в нём нахожу несколько раз строку запуска ядра не могли бы привести пример записи этого параметра?
Добавить постоянное значение, как обычно, в /etc/default/grub или /etc/grub.d/40_custom
Так же интересует пример записи. Пытался в оба файла добавить запись
BOOT_IMAGE=/boot/vmlinuz-6.2.0-26-generic --version=22gn4 root=UUID=d8cbee76-5d5f-40b2-bfae-ae53517bc5af ro quiet splash vt.handoff=7
Затем sudo update-grub вывод не изменен парпметр "--version=23gn4" не добавляется:
cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.2.0-32-generic root=UUID=d8cbee76-5d5f-40b2-bfae-ae53517bc5af ro


« Последнее редактирование: 20 Сентября 2023, 18:56:51 от Synoptic »

Онлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 7947
    • Просмотр профиля
Цитировать
...файл который не рекомендуется изменять?
Рекомендуют для тех, у кого отсутствует голова. А если мало-мальски подумать, что именно тебе нужно в этот момент?
Пример. Для ответа на твой вопрос, я провожу эксперимент, в grub.cfg меняю параметр, получаю результат. Наигрался. Что-бы восстановить как было, выполняю update-grub.
Собственно, этим уже ответил на следующий вопрос.

Цитировать
нахожу несколько раз строку запуска ядра не могли бы привести пример записи этого параметра?
Во-первых, вносить в тот пункт, который ты используешь для загрузки.
Например, дефолтный пункт находится в этом блоке кода и начинается так:
### BEGIN /etc/grub.d/10_linux ###
...
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5f788c40-b5de-42c5-9f8f-ab68c8483c7d' {
...
Но я этим пунктом не пользуюсь. Ничего не добавляю в /etc/default/grub.
Пользуюсь своим пунктом, созданным в файле 40_custom:
menuentry '*buntu [so1202]' --class ubuntu --class gnu-linux --class gnu --class os {
src='so1202'; key='fastboot noresume quiet --'
key="--version=02gn3 root=LABEL=${src} ${key}"
insmod gzio
search --no-floppy --set --label "${src}"
linux /boot/vmlinuz${version} ${key}
initrd /boot/initrd.img${version}
  }
Если вносишь изменеия в /etc/default/grub или /etc/grub.d/40_custom, то для их отображения в grub.cfg нужно выполнить update-grub.
Но тогда, для восстановления как было, нужно вспомнить как оно было, внести изменения и при этом не ошибиться, выполнить update-grub.
Во-вторых, груб работает только с grub.cfg. Поэтому, так или иначе, изменения вносить в grub.cfg.


Пользователь добавил сообщение 21 Сентября 2023, 08:08:24:
Цитировать
> шестерёнка > аdmiGnom on Wayland > черный экран потом возврат в меню выбора пользователя...
Опять понадобится голова. Сессия запускается с правами пользователя, а для монтирования нужны права root. Здесь и возникает проблема. Даже если предположить, что запускаешь c судо, но куда пароль вводить?..
Один из вариантов. Настроить судоерс, разрешить запуск mount без пароля. Мой вариант еще хуже.

Цитировать
нет МС и я монтирую каталоги вручную...
Я не такой-уж знаток консоли. Так издеваться над собой я не могу. Поэтому MC.
Есть в нем такая возможность: по нажатию "F2" открывается "User menu", состав которого и функционал создаешь ты сам.
Это тебе и среда разработки и место хранения и средство запуска.
Самое простейшее, прописать там запуск любой команды или скрипта. Или там может быть вполне объемный скрипт, почти обычный шелл-скрипт.
Собственно, из него я взял фрагмент кода монтирования оверлеев и вставил в avnsession.
Сейчас подумываю, не пришла-ли пора, вынести все монтирования в отдельный скрипт...
« Последнее редактирование: 21 Сентября 2023, 08:08:24 от andytux »

Оффлайн Synoptic

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Опять понадобится голова. Сессия запускается с правами пользователя, а для монтирования нужны права root. Здесь и возникает проблема. Даже если предположить, что запускаешь c судо, но куда пароль вводить?..
Один из вариантов. Настроить судоерс, разрешить запуск mount без пароля. Мой вариант еще хуже.
Добавил в конец файла "/etc/sudoers" строку "admi ALL=(ALL) NOPASSWD: /usr/bin/mount,/usr/bin/umount" далее назначил "/dev/sda2" метку "so1202", в файл "/etc/grub.d/40_custom" добавил запись:
menuentry '*buntu [so1202]' --class ubuntu --class gnu-linux --class gnu --class os {
src='so1202'; key='fastboot noresume quiet --'
key="--version=02gn3 root=LABEL=${src} ${key}"
insmod gzio
search --no-floppy --set --label "${src}"
linux /boot/vmlinuz${version} ${key}
initrd /boot/initrd.img${version}
  }
Далее "sudo update-grub" после чего в файле "/boot/grub/grub.cfg" везде где нашлось "linux /boot/vmlinuz" я отредактировал и заменил на "linux   /boot/vmlinuz-6.2.0-33-generic --version=22gn4 root=UUID=d8cbee76-5d5f-40b2-bfae-ae53517bc5af ro"
Перезагрузка > *buntu [so1202] > выбор юзера > шестерёнка > аdmiGnom on Wayland > ввод пароля > стандартное монтирование без оверлеев как после первой загрузки ОС.

Нет ли возможности без скриптов, на свежеустановленной голой убунте описать технологию монтирования, сузив задачу до: "(установка приложений/внесение всех изменений) в (оверлей/персистент-файл) так, чтобы они не попадали в корень и даже после форматирования диска и полной переустановки системы я мог бы смонтировать этот (оверлей/персистент-файл) и получить обратно все свои (программы/настройки ОС)"? Я готов после каждой перезагрузки монтировать всё заново вручную, лишь бы заработало.
« Последнее редактирование: 21 Сентября 2023, 19:18:14 от Synoptic »

Онлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 7947
    • Просмотр профиля
Отставить, дословно! Голова все-таки нужна.

Цитировать
сузив задачу до: "(установка приложений/внесение всех изменений) в (оверлей/персистент-файл)...
Классическая "живая система в режиме персистент".
Согласно твоему выводу /proc/mounts в "Ответ #18", каталоги смонтированы.
« Последнее редактирование: 27 Сентября 2023, 04:33:54 от andytux »

Оффлайн Synoptic

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Согласно твоему выводу /proc/mounts в "Ответ #18", каталоги смонтированы.
Это я руками смонтировал перед перезагрузкой. После перезагрузки все пропадает.

Классическая "живая система в режиме персистент".
Как прикрутить персистент не к живой, а к установленной системе?

Онлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 7947
    • Просмотр профиля
Кое-что работает.

Цитировать
...на свежеустановленной голой убунте описать технологию монтирования, сузив задачу до: "(установка приложений/внесение всех изменений) в (оверлей/персистент-файл) так, чтобы они не попадали в корень и даже после форматирования диска и полной переустановки системы я мог бы смонтировать этот
Запустил "живую" Ubuntu-mate 18.04.
Вручную смонтировал каталоги: /etc, /lib, /usr, var. Установил Синаптик. Перезагрузил. Естесственно, Синаптика нет. Монтирую каталоги. Появился Синаптик, запускаю. В нем вижу, что установлен Фирефокс 61. Обновляю его. Перезагружаю.
Запускаю Фирефокс. Запускается тот, что в корне: 61. Монтирую каталоги. Запускаю Фирефокс. Запускается тот, что в оверлее: 113.

На скриншоте. Внизу-слева, Фирефокс 61 из корня. Внизу-справа, Фирефокс 113 из оверлея. Вверху, в панелях MC каталоги оверлея.

Цитировать
Как прикрутить персистент не к живой, а к установленной системе?
А чем "живая" отличается от "установленной"?
Я давал ссылки, "установленную" запустить как "живую". Для себя я обозвал ее "полуживая".
В *бунту "живая подсистема" называется casper. Она всем этим и занимается.


Пользователь добавил сообщение 06 Октября 2023, 09:03:43:
Продолжение вчерашнего.
Загрузил "живую" Lubuntu 18.04. Синаптик здесь есть, Фирефокса нет.
Монтирую "вчерашний оверлей", созданный в ubuntu-mate.
Запускаю Синаптик. Естесственно, он показывает установленное в ubuntu-mate, чего в Lubuntu быть не может, в том числе и Фирефокс.
Запускаю Фирефокс. С него и пишу.

« Последнее редактирование: 06 Октября 2023, 09:12:22 от andytux »

 

Страница сгенерирована за 0.035 секунд. Запросов: 25.