• Linux Дописал, наконец-то, инструкцию по разворачиванию lxc с сетью в дебиане. Мне эта херь несколько месяцев мозг съедала, а теперь всё збс:
    blog.regolit.com
    ♡ recommended by @sergey-klay, @Gem, @juick

Replies (24)

  • @jb, Наверное, можно, но она ещё будет меняться, скорее всего. Так что я бы подождал пару недель.
  • @cancel, Если я правильно помню в libvirt свой форк LXC контейнеров. Раз вы его установили, может и контейнеры надо через них создавать?
  • @avagin, А в lxc не только libvirt, это в статье пока только libvirt описан как самый простой способ поднятия сети.
  • @cancel, Тем более я там определяю отдельную виртуальную сеть специально для lxc, которая не пересекается с дефолтной.
  • @cancel, Это все понятно, но я бы упомянул что если ставите libvirt то LXC можно и не ставить.
  • @cancel, не понял на что это влияет.
  • @avagin, Не вижу никаких упоминаний включённого lxc внутри пакетов libvirt
  • @cancel, А если найду? libvirt.org
  • @avagin, И? Мало ли что там вкомпилено, если там нет хелперов, темплейтов и прочего.
  • @cancel, я хз что там есть. Просто вспомнил, что оно там есть и в какой-то момент именно там шла разработка, а в дерево LXC уже бекпортили постфактум. Ладно, проехали.
  • @cancel, а почему сеть через либвирт, а сам контейнер — нет? если уж обмазываться иксемелями и тырпрайзом, то на полную.
  • @cancel, то что ты называешь LXC — just another обертка вокруг подсистемы cgroups/namespaces ядра. так что это не в lxc — libvirt, а скорее "libvirt юзает ту же технологию, что и lxc"
  • @lexszero, т.е. при желании lxc-стайл контейнеры можно хоть скриптиком в полсотни строк на баше гонять.
  • @lexszero, "Да, ты гонишь!" Просто из баша не выходит. Я тут недавно этим занимался. Кстати довольно прикольно занятие.
  • @avagin, что именно не выходит? самое сложное там — это осилить Documentation/cgroups/* и узнать про unshare.
  • @lexszero, Вот мой лог. Походу только pivot_root в результате свой остался. Почему штатный не подошел не помню.
    HW $ mount --bind /vz/private/101/ /vz/root/101/
    HW $ cd /vz/root/101/
    HW $ su ct # (uid 10000 gid 10000)
    HW $ unshare -U -m — bash -c '( bash )'

    HW $ echo -e "0 10000 1024" > /proc/1557/uid_map
    HW $ echo -e "0 10000 1024" > /proc/1557/gid_map

    CT $ mount --make-rprivate /
    CT $ strace -e pivot_root,mount,chdir,umount ./pivot_root
    mount(".", "mnt", NULL, MS_BIND, NULL)  = 0
    chdir("mnt")                            = 0
    pivot_root(".", "old")                  = 0
    umount("old", MNT_DETACH)               = 0
    +++ exited with 0 +++
    CT $ cd /

    CT $ /bin/mount -t proc proc /proc
    mount: permission denied

    HW $ nsenter -m -t 1557 — strace -e mount ./mount_proc mnt
    mount("proc", "mnt", "proc", 0, NULL)   = 0

    CT $ /bin/mount -t proc proc /proc
    CT $ echo $?
    0
  • @avagin, а, да. Самое сложное там в мелочах.
    1. unshare -U -m -p — bash -c '( bash; )'
    зачем тут такая херота с ( bash )?
    2. Зачем нужно байндмаунтить рут еще раз, после перехода в userns?
  • @avagin, Я у себя что-то смешное накодил, может тебе поможет:
    ∞ cat /usr/local/sbin/skype-sandbox
    #!/bin/bash
    sb=/opt/sandbox
    unshare -fimp /bin/bash — -c "
    shr() {
    mkdir -p $sb/\$1
    mount -o bind \$1 $sb/\$1
    }
    shr /lib
    shr /bin
    shr /usr/bin
    shr /usr/lib
    shr /etc/fonts
    shr /usr/share/fonts
    shr /opt/skype-oss
    #mount -o bind /home/l29ah/.googleearth $sb/home/l29ah/.googleearth
    exec chroot $sb /bin/bash -c \"
    mount -t proc proc /proc
    exec busybox su — l29ah
    \""
  • @a2TH5, У тебя нет netns, userns и pivot-root. Ну, и unshare свежий с опцией -f.
  • @avagin, Добавь, мало что изменится. pivot_root не нужен же.
  • @a2TH5, Хотя, я плохо помню, о чём нужно позаботиться, когда делаешь userns.
  • @a2TH5, так в моем примере они уже есть
  • @avagin, Ща поиграюсь.
  • @lexszero, Я так и не понял, как ставить систему через lxc-говны из libvirt. Они мне вообще ничего не предоставляют, в отличие lxc, где есть шаблоны, хелперы итп. Тут же полный вакуум. Ну збс, сделали вы пять функций и три либы, и чо?