LINUX.ORG.RU

Gentoo не монтируется /dev/shm при загрузке

 ,


0

1

Вот такая строчка получается в выхлопе mount:

none on /dev/shm type tmpfs (rw,relatime)
Из-за этого например не собирается питон. Система загрузки - openrc, ядро собираю с помощью genkernel-next. /etc/init.d/udev-mount и /etc/init.d/devfs во время работы системы оказываются запущены В /etc/fstab про shm ничего не написано. eudev установлен

В ядре настроено: CONFIG_SHMEM=y CONFIG_DEVTMPFS=y CONFIG_TMPFS=y

Скрипт, запускаемый openrc, который должен монтировать это - /etc/init.d/devfs, вот его нужный кусок:

# Mount required stuff as user may not have then in /etc/fstab
        for x in \
                "mqueue /dev/mqueue 1777 ,nodev mqueue" \
                "devpts /dev/pts 0755 ,gid=5,mode=0620 devpts" \
                "tmpfs /dev/shm 1777 ,nodev shm" \
        ; do
                set -- $x
                grep -Eq "[[:space:]]+$1$" /proc/filesystems || continue
                mountinfo -q $2 && continue

                if [ ! -d $2 ]; then
                        mkdir -m $3 -p $2 >/dev/null 2>&1 || \
                                ewarn "Could not create $2!"
                fi

                if [ -d $2 ]; then
                        ebegin "Mounting $2"
                        if ! fstabinfo --mount $2; then
                                mount -n -t $1 -o noexec,nosuid$4 $5 $2
                        fi
                        eend $?
                fi
        done
        return 0
Итоги запуска этого скрипта: /dev/mqueue монтируется, /dev/shm и /dev/pts пропускаются из-за строчки с mountinfo.

Вот почему так происходит: если в самом начале загрузки openrc остановить ее и перейти в интерактивный режим (все равно, непосредственно перед загрузкой devfs или при первом возможном моменте), то вот, что нам дает /lib64/rc/bin/mountinfo:

/
/sys
/dev/pts
/dev
/dev/shm
/run
/proc
А вот выхлоп mount:
rootfs on / type rootfs (rw)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
none on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
none on /dev/shm type tmpfs (rw,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=10240k,nr_inodes=491310,mode=755)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
/dev/mapper/encrypted_ssd_group-root_vol on / type ext4 (rw,noatime,commit=0)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
cgroup_root on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,size=10240k,mode=755)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
openrc on /sys/fs/cgroup/openrc type cgroup (rw,nosuid,nodev,noexec,relatime,release_agent=/lib64/rc/sh/cgroup-release-agent.sh,name=openrc)
cpuset on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cpu on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)
cpuacct on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct)
То есть /dev/shm не монтируется как надо, потому что уже есть запись о его монтировании с none вместо того, что надо. Откуда оно берется, если openrc еще даже ничего не успел сделать? И как это исправить?

Вот openrc лог http://pastebin.com/8MZ9GG8Q 49 строка это место, где должен монтироваться /dev/shm

Вот кусок того, что печатается на экран при загрузке прямо перед запуском openrc (17 строка этого лога == 1-ой строке предыдущего лога) http://pastebin.com/RUUP7MuB

Вот кусок dmesg (все до последнего события, упомянутого до запуска openrc): http://pastebin.com/SPK6jVEe 311-я строка этого лога == 13-я строка предыдущего лога

Ответ на: комментарий от yakunprufovnebudet

Впервые слышу о каких-либо squashfs. В генте в репозиториях есть пакет squashfs-tools, он у меня не установлен.

zgrep -i squash /proc/config.gz показал:

CONFIG_SQUASHFS=y
# CONFIG_SQUASHFS_XATTR is not set
CONFIG_SQUASHFS_ZLIB=y
# CONFIG_SQUASHFS_LZO is not set
# CONFIG_SQUASHFS_XZ is not set
# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3

hlebushek ★★ ()
pinkbyte@phantom ~ $ cat /etc/fstab  | grep shm
# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for 
# POSIX shared memory (shm_open, shm_unlink).
shm                     /dev/shm        tmpfs           nodev,nosuid,noexec     0 0

Сверься со своим fstab. Да, я в курсе о заглушке в openrc, но это не повод не держать обязательную точку монтирования в нём

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

В gentoo handbook в разделе об fstab нет ни слова о том, что там надо указать /dev/shm, так что он должен монтироваться и без этого. Это похоже на костыль, лечение симптомов, когда непонятно, в чем собственно корень проблемы.

Интересно, почему vim выделает shm в начале новой строчки таким цветом, будто это ошибка?

Добавил эту строчку в /etc/fstab, перезагрузился, ничего не изменилось - в mount по прежнему

none on /dev/shm type tmpfs (rw,relatime)

hlebushek ★★ ()
Ответ на: комментарий от hlebushek

Да, я ошибся, на новых системах это не нужно, в старых это добавлялось при обновлении glibc(кажется с 2.14 на 2.15, но точно сказать не могу).

Интересно, почему vim выделает shm в начале новой строчки таким цветом, будто это ошибка?

Видать плагин подсветки не знает что первым полем кроме раздела может быть вообще любой текст(none или shm - это не важно, это нужно лишь для удобства распознавания в выхлопе mount).

Ну тогда давай по порядку: rm /etc/mtab && ln -s /proc/mounts /etc/mtab

После этого - reboot и выхлоп mount в студию.

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
none on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=10240k,nr_inodes=491310,mode=755)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
/dev/mapper/encrypted_ssd_group-root_vol on / type ext4 (rw,noatime,commit=600,data=ordered)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
cgroup_root on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,size=10240k,mode=755)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
openrc on /sys/fs/cgroup/openrc type cgroup (rw,nosuid,nodev,noexec,relatime,release_agent=/lib64/rc/sh/cgroup-release-agent.sh,name=openrc)
cpuset on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cpu on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)
cpuacct on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct)
/dev/sda1 on /boot type vfat (rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/dev/mapper/encrypted_ssd_group-home_vol on /home type ext4 (rw,noatime,commit=600,data=ordered)
hlebushek ★★ ()

none on /dev/shm type tmpfs (rw,relatime)

ну насколько я помню, это значит что все подмонтировалось как надо

Torvus ()
Ответ на: комментарий от Torvus
>>> Failed to emerge dev-lang/python-3.3.3, Log file:

>>>  '/var/tmp/portage/dev-lang/python-3.3.3/temp/build.log'

 * Messages for package dev-lang/python-3.3.3:

 * configure has detected that the sem_open function is broken.
 * Please ensure that /dev/shm is mounted as a tmpfs with mode 1777.
 * ERROR: dev-lang/python-3.3.3::gentoo failed (configure phase):
 *   Broken sem_open function (bug 496328)
 * 
 * Call stack:
 *     ebuild.sh, line  93:  Called src_configure
 *   environment, line 3710:  Called die
 * The specific snippet of code:
 *           die "Broken sem_open function (bug 496328)";
 * 
 * If you need support, post the output of `emerge --info '=dev-lang/python-3.3.3::gentoo'`,
 * the complete build log and the output of `emerge -pqv '=dev-lang/python-3.3.3::gentoo'`.
 * The complete build log is located at '/var/tmp/portage/dev-lang/python-3.3.3/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/dev-lang/python-3.3.3/temp/environment'.
 * Working directory: '/var/tmp/portage/dev-lang/python-3.3.3/work/x86_64-pc-linux-gnu'
 * S: '/var/tmp/portage/dev-lang/python-3.3.3/work/Python-3.3.3'
hlebushek ★★ ()
Ответ на: комментарий от Torvus

Алсо согласно 2-му посту здесь http://forums.gentoo.org/viewtopic-t-982100.html

$ ls -al /dev/shm
total 0
drwxr-xr-x  2 root root   40 фев  1 14:21 .
drwxr-xr-x 18 root root 4140 фев  1 14:21 ..
И после того, как я удалил /etc/mtab и положил вместо него символическую ссылку на /proc/mounts, у меня mount вообще нет /dev/shm

hlebushek ★★ ()
Ответ на: комментарий от hlebushek

И после того, как я удалил /etc/mtab и положил вместо него символическую ссылку на /proc/mounts, у меня mount вообще нет /dev/shm

Хотя это вероятно потому, что создание этой символической ссылки - какая-то грязная магия, которую лучше не делать.

hlebushek ★★ ()

Вообще судя по всему none это действительно нормально и может быть вместо shm, но тогда вопрос в другом - действительно ли у меня неверные опции/флаги стоят, и как это исправить.

hlebushek ★★ ()
Ответ на: комментарий от hlebushek

Хотя это вероятно потому, что создание этой символической ссылки - какая-то грязная магия, которую лучше не делать.

Никакой магии. Софт использующий libmount или понимающий ядерный синтаксис /proc/mounts разницы не почувствует.

Устаревший софт который проверяет точки монтирования может не взлететь, да. Но это явно не про текущий набор @system в Gentoo

Pinkbyte ★★★★★ ()
Ответ на: комментарий от hlebushek

1) Покажи весь build.log
2) Попробуй собрать предыдущую версию(3.3.2-r2)

Ну и в порядке бреда - покажи zgrep TMPFS /proc/config.gz

Мой:

pinkbyte@phantom ~ $ zgrep TMPFS /proc/config.gz
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

весь лог построения, всякие там emerge --info и прочее: http://pastebin.com/0BUFyqze

$ zgrep TMPFS /proc/config.gz
CONFIG_DEVTMPFS=y
# CONFIG_DEVTMPFS_MOUNT is not set
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y

С предыдущим питоном та же ошибка, еще говорят stat /dev/shm/ должен возвращать Access: (1777/drwxrwxrwt)

А у меня:

$ stat /dev/shm/
  File: ‘/dev/shm/’
  Size: 40              Blocks: 0          IO Block: 4096   directory
Device: 5h/5d   Inode: 6392        Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-02-01 16:17:40.900001181 +0400
Modify: 2014-02-01 16:16:25.620029919 +0400
Change: 2014-02-01 16:16:25.620029919 +0400
 Birth: -

hlebushek ★★ ()

Ну тогда последний вопрос - emerge -uDN --with-bdeps=y @system сколько пакетов выдает на обновление? Если ни одного - у меня идеи кончились.

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte
$ emerge -puDN --with-bdeps=y @system

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] app-admin/eselect-cdparanoia-0.1 
[ebuild     U  ] media-sound/cdparanoia-3.10.2-r6 [3.10.2-r4] ABI_X86="(64%*) (-32) (-x32)" 
[blocks b      ] <media-sound/cdparanoia-3.10.2-r5 ("<media-sound/cdparanoia-3.10.2-r5" is blocking app-admin/eselect-cdparanoia-0.1)
[ebuild   R    ] sys-devel/gcc-4.7.3-r1  USE="-mudflap*" 
[ebuild     U  ] net-misc/dhcpcd-6.2.0-r1 [5.6.4] USE="ipv6%* udev%*" 
[ebuild   R    ] sys-fs/eudev-1.3  USE="hwdb*" 
[ebuild     U  ] sys-apps/man-pages-3.56 [3.55]

А еще я сделал chmod 1777 /dev/shm, и питон собрался

hlebushek ★★ ()
Ответ на: комментарий от hlebushek

Ничего криминального в выхлопе нет, виртуалки с eudev(я подозреваю он может иметь отношение, но точно не уверен) у меня под рукой нет, а на sys-fs/udev в чистой системе это у меня не воспроизводится

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

Когда эта ошибка у меня только появилась, у меня не было ни sys-fs/eudev, ни sys-fs/udev, а вместо этого systemd-шная какая-то фигня исполняла зависимость virtual/udev

hlebushek ★★ ()
Ответ на: комментарий от hlebushek

# CONFIG_DEVTMPFS_MOUNT is not set

разве оно не должно быть "=y"? не помню, где конкретно, но что-то я слышал, что в генте оно обязательно. могу ошибаться.

funeralismatic ★★★ ()

Удалил genkernel-next, который я ставил для systemd по инструкции из вики, установил genkernel, пересобрал, запискал граб конфиг, перезагрузился, все заработало. /dev/shm вернулся на свое место с правильными флагами. Видимо genkernel «reloaded» не такой уж и «reloaded».

hlebushek ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.