RPi3 вопрос по монтированию nfs

Тема в разделе "Raspberry Pi", создана пользователем Igor68, 10 ноя 2019.

  1. Igor68

    Igor68 Гуру

    На PC с Debian поднят NFS. Сделан доступ к директории которая nobody, а вообще-то предназначена для пользователя на малинах. На малине монтирую:
    Код (Text):
    mount -t nfs <IP>:/home/public/bot_XXX/home/public_bot_XXX
    монтируется на малине нормально
    Код (Text):

    root@pi01:/home/bot_gray# mount
    /dev/mmcblk0p2 on / type ext4 (rw,noatime,data=ordered)
    devtmpfs on /dev type devtmpfs (rw,relatime,size=468148k,nr_inodes=117037,mode=755)
    sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
    proc on /proc type proc (rw,relatime)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
    tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
    tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
    cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
    nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
    tmpfs on /run/user/1003 type tmpfs (rw,nosuid,nodev,relatime,size=94552k,mode=700,uid=1003,gid=1003)
    tmpfs on /run/user/109 type tmpfs (rw,nosuid,nodev,relatime,size=94552k,mode=700,uid=109,gid=114)
    192.168.7.150:/home/public/bot_gray on /home/public_bot_gray type nfs4 (rw,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.7.101,local_lock=none,addr=192.168.7.150)
     
    и вот:
    Код (Text):
    root@pi01:/home# ls -al
    total 28
    drwxr-xr-x  7 root     root     4096 Nov  3 12:21 .
    drwxr-xr-x 22 root     root     4096 Mar  3  2017 ..
    drwxr-xr-x  6 bot_gray bot_gray 4096 Nov 10 10:18 bot_gray
    drwxrwxrwx 22 www-data www-data 4096 Jun 18 16:38 httpd
    drwxr-xr-x 12 igor     igor     4096 Sep 30 18:09 igor
    drwxr-xr-x 18 pi       pi       4096 Nov 10 09:14 pi
    drwxrwxrwx  7 nobody   nogroup  4096 Nov 10 08:59 public_bot_gray
     
    но вот беда:
    Код (Text):
    root@pi01:/home/public_bot_gray# ls -al
    total 31197480
    drwxrwxrwx 7 nobody nogroup  4096 Nov 10 08:59 .
    drwxr-xr-x 7 root  root  4096 Nov  3 12:21 ..
    drwxr-xr-x 2 pi  pi  4096 Nov 10 10:30 pi01
    drwxr-xr-x 5 pi  pi  4096 Nov  3 16:33 pi02
    drwxr-xr-x 2 pi  pi  4096 Nov  3 16:10 pi03
    drwxr-xr-x 2 pi  pi  4096 Nov 10 08:59 pi04
    drwxr-xr-x 2 pi  pi  4096 Nov 10 08:59 pi05
    -rw-r--r-- 1 nobody nogroup 31914983424 Nov  5 20:20 rpi.img
    откуда этот pi ? А у меня каждая из малин должна примонтировать в свою рабочую директорию свою директоию pi01...pi05. Вот никак не выходит. Как вообще убрать этот pi (пользователя)? Что другую сборку raspbian? Или как?
    Главное монтируются с другим пользователем вложенные директории в то время как на PC они от нужного пользователя. Что за свинство? И главное от рута нельзя сменить пользователя. Я конечно что-то не знаю и не умею, но вот это свинство. Когда примонтировано:
    Код (Text):
    drwxrwxrwx  7 nobody   nogroup  4096 Nov 10 08:59 public_bot_gray
    а вложенные в этом примонтированном:
    Код (Text):
    drwxr-xr-x 2 pi  pi  4096 Nov 10 10:30 pi01
    drwxr-xr-x 5 pi  pi  4096 Nov  3 16:33 pi02
    drwxr-xr-x 2 pi  pi  4096 Nov  3 16:10 pi03
    drwxr-xr-x 2 pi  pi  4096 Nov 10 08:59 pi04
    drwxr-xr-x 2 pi  pi  4096 Nov 10 08:59 pi05
    В то время как на сервере
    Код (Text):
    drwxr-xr-x  2 bot_gray bot_gray        4096 ноя 10 13:30 pi01
    drwxr-xr-x  5 bot_gray bot_gray        4096 ноя  3 19:33 pi02
    drwxr-xr-x  2 bot_gray bot_gray        4096 ноя  3 19:10 pi03
    drwxr-xr-x  2 bot_gray bot_gray        4096 ноя 10 11:59 pi04
    drwxr-xr-x  2 bot_gray bot_gray        4096 ноя 10 11:59 pi05
     
    мне надо так что бы были для нужного пользователя, потому как изменять содержимое директорий буду на этом PC. И соответсвенно каждая малина должна иметь своё для себя.
    Заранее Спасибо!
     
    Последнее редактирование: 10 ноя 2019
  2. ZAZ-965

    ZAZ-965 Гуру

    @Igor68, поищите как на NFS4 делается user (uid/gid) mapping.
    Гугл говорит что надо прописывать соответствия в /etc/idmapd.conf http://www.bog.pp.ru/work/NFS.html#idmap
     
    Igor68 нравится это.
  3. Igor68

    Igor68 Гуру

    Непременно посмотрю(хоть уже и наверное не сегодня) но... но взбесило то, что какой-то "pi" заявил право на уже смонтированный рессурс с правами выше root на вложенные директории. И chown от того же root не доступны, а вложенные директории/файлы от pi. Обязательно пересмотрю само монтирование хоть и через /etc/rc.local. Только вот устал уже на сегодня.
     
  4. Igor68

    Igor68 Гуру

    Вот пока не выходит. Понимаю так: некий нехороший человек (наверное что бы нубам жизнь облегчить сделал "автозапуск" от pi, потому как он уже вошел в систему в то время как я пока не подключилcя по ssh. И когда я через консоль от уже root монтирую nfs, то примонтированное уже от pi. Замктьте не от Васи, Пети и др. а от pi. И пользователя сменить уже нельзя) А в документации не смог найти как из под root примонтировать именно для какого-то пользователя. Как убить этого самого pi? Выходит подняты иксы и pi уже вошел в них. Ну и соответственно надо сначала выйти из pi типа logout. А потом убить этого pi с его автомонтированием и т.п.
    Кстати по гуглу всё время натыкаюсь на то что все желают монтировать от пользователя (не root) и везде только такие темы. А как примонтировать именно для кого-то из под root ни слова.
     
  5. Igor68

    Igor68 Гуру

    Как определил - монтируется от имени первого пользователя... ну и на ноуте примонтировался аналогично. Надо курить... но всё-таки лелею надежду на пример подобного монтирования (NFS). А курить буду. Жаль только чтобы что-то начать делать надо сделать ещё и многое другое.:confused:
     
  6. parovoZZ

    parovoZZ Гуру

    а сели создать пользователя типа такого
    Код (Bash):
     sudo useradd -o -u 0 -g 0 -s /bin/bash newroot
    и из под него убить pi?
     
  7. Igor68

    Igor68 Гуру

    думаю pi убить и так можно. Проблема в том, что при включении уже загружены иксы от его имени, а вместе с ними и всё остальное. Пока запущены процессы от него убить его не можно (ну это я так думаю). Потому и жертвую одну SD карту с образом с целю нанесения увечий этому pi посредством издевательсва над файлами в директории /etc... ну и с перезапуском для проверки.
    А вообще цель:
    1. поднять NFS на машине с debian и hdd (сделано). Есть некий public в котором директории pi01....p05 (для каждой малины своя)
    2. примонтировать NFS public в /home/public с mount --bind для каждой малины свой путь к этому /mount/public/piXX. На всех малинах пользователь TTTT (к примеру)
    Надо чтобы все нужные директории на каждой малине монтировались от TTTT дабы реализовать RW в то же время на PC с debian надо оперативно изменять соответствующий проект(кодв), предварительно остановив его на соответствующей малине. Вот уткнулся на доступ при монтировании. Одним словом скрипт на каждой малине следит за версией некого кода и если в исходниках находится новая версия, то останавливается выполнение старой, происходит компиляция и запуск обновлённого кода. При этом физическое расположение файлов на PC с debian на hdd с доступом по NFS каждой из малин. Весь механизм ранее уже отработал (где-то на флудилке), а про общий доступ думал "Ладно потом, кода всё соберу..."


    А вообще звучит так (это не анекдот, а так просто... наверное устал):
    Возглас в цехе на предприятии:
    - Эй кому совсем делать нечего?
    тишина
    через повторный возглас
    - Ну мне делать нечего.
    - Отлично! Я послан к Вам в помощь.
     
    Последнее редактирование: 12 ноя 2019
  8. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Вот курил, курил... мусор вынес, котов покормил...
    и вот на стороне сервера для каждой малины индивидуально в файле /etc/exports
    Код (Text):
    /mnt/sdXX/bot_gray/pi04 pi01(rw,sync,no_root_squash)
    /mnt/sdXX/bot_gray/pi04 pi02(rw,sync,no_root_squash)
    /mnt/sdXX/bot_gray/pi04 pi03(rw,sync,no_root_squash)
    /mnt/sdXX/bot_gray/pi04 pi04(rw,sync,no_root_squash)
    /mnt/sdXX/bot_gray/pi04 pi05(rw,sync,no_root_squash)
    а на малине запустил скрипт:
    Код (Text):
    #!/bin/bash
    #

    ##### СТАРТУЕМ ОТ ROOT И ДАЖЕ ИЗ /etc/rc.local #####

    # имя/IP хоста предоставляющего NFS(задаётся)
    _nfshostname="debian1"

    #собственно наше имя пользователя оно же и группа(задаемтся)
    _nuser="bot_gray"

    # получаем имя нашего хоста(оно у нас зарегистрировано на роутере - вместо IP)(автоопределение)
    _myhost=$(cat /etc/hostname)

    # получаем UID и GID ползователя
    str=$(cat /etc/passwd | grep $_nuser | sed "s/:/ /g")
    _uid=$(echo $str | awk '{print($3)}')
    _gid=$(echo $str | awk '{print($4)}')

    # проверяем/создаём локальную точку монтрования
    if ! [ -d /home/$_nuser/$_myhost ]; then
            mkdir /home/$_nuser/$_myhost
            chown -R $_nuser:$_nuser /home/$_nuser/$_myhost
    fi

    mount -t nfs -O uid=$_uid,gid=$_gid,iocharset=utf-8 $_nfshostname:/mnt/sdXX/bot_gray/$_myhost /home/bot_gray/$_myhost
    chown -R $_nuser:$_nuser /home/$_nuser/$_myhost

    # далее запускаем рабочий скрипт в режиме "&"
    и (я применял малину №4 - по моей маркировке, а каждая из них именована в DHCP роутера и сам NFS сервер так же) вот результат:
    Код (Text):
    drwxr-xr-x 7 bot_gray bot_gray 4096 Nov 12 17:08 .
    drwxr-xr-x 7 root     root     4096 Nov  3 12:34 ..
    -rw------- 1 bot_gray bot_gray   82 Nov  3 21:31 .bash_history
    -rw-r--r-- 1 bot_gray bot_gray  220 Nov  3 10:53 .bash_logout
    -rw-r--r-- 1 bot_gray bot_gray 3512 Nov  3 10:53 .bashrc
    drwx------ 3 bot_gray bot_gray 4096 Nov  3 12:42 .cache
    drwx------ 3 bot_gray bot_gray 4096 Nov  3 12:42 .config
    drwx------ 3 bot_gray bot_gray 4096 Nov  3 12:42 .local
    -rwxr-xr-- 1 root     root     1164 Nov 12 17:31 myroot.sh
    drwxr-xr-x 3 bot_gray bot_gray 4096 Nov 12 16:52 pi04
    -rw-r--r-- 1 bot_gray bot_gray  675 Nov  3 10:53 .profile
    -rw-r--r-- 1 bot_gray bot_gray   66 Nov 12 17:08 .selected_editor
    drwx------ 2 bot_gray bot_gray 4096 Nov  3 16:12 .ssh
    и сама директория
    Код (Text):

    root@pi04:/home/bot_gray/pi04# ls -al
    total 12
    drwxr-xr-x 3 bot_gray bot_gray 4096 Nov 12 16:52 .
    drwxr-xr-x 7 bot_gray bot_gray 4096 Nov 12 17:08 ..
    drwxr-xr-x 2 bot_gray bot_gray 4096 Nov 12 17:08 123
     
    Код (Text):

    root@pi04:/home/bot_gray/pi04/123# ls -al
    total 12
    drwxr-xr-x 2 bot_gray bot_gray 4096 Nov 12 17:08 .
    drwxr-xr-x 3 bot_gray bot_gray 4096 Nov 12 16:52 ..
    -rw-r--r-- 1 bot_gray bot_gray  14 Nov 12 17:08 test.txt
     
    Ну и на самом PC с Debian
    Код (Text):

    bot_gray@debian1:/mnt/sdXX/bot_gray$ ls -al
    итого 31197480
    drwxrwxrwx 7 bot_gray bot_gray  4096 ноя 10 11:59 .
    drwxr-xr-x 5 nobody  nogroup  4096 ноя 12 18:52 ..
    drwxr-xr-x 2 bot_gray bot_gray  4096 ноя 10 13:30 pi01
    drwxr-xr-x 5 bot_gray bot_gray  4096 ноя  3 19:33 pi02
    drwxr-xr-x 2 bot_gray bot_gray  4096 ноя  3 19:10 pi03
    drwxr-xr-x 3 bot_gray bot_gray  4096 ноя 12 19:52 pi04
    drwxr-xr-x 2 bot_gray bot_gray  4096 ноя 10 11:59 pi05
    -rw-r--r-- 1 nobody  nogroup  31914983424 ноя  5 23:20 rpi.img
     
    Вот вроде и всё готово. А образ на малине №1 изуродовал.
    Теперь вроде готово всё для опытов
    Спасибо за подсказки.
     
  9. Может я немножко не понял про хостнейм, идентификаторы пользователей и групп, но добывать информацию читая файлы, когда есть другие средства, как-то не кошерно :)
    Тот же хостнейм есть в окружении
    Код (Bash):
    root@raspberrypi:~# echo $HOSTNAME
    raspberrypi
    Или
    Код (Bash):
    root@raspberrypi:~# hostname
    raspberrypi
    Код (Text):
    root@raspberrypi:~# man hostname

    NAME
      hostname - show or set the system's host name
    А идентификаторы просто получить через id
    Код (Text):
    root@raspberrypi:~# man id
    NAME
      id - print real and effective user and group IDs

    DESCRIPTION
      Print user and group information for the specified USER, or (when USER omitted) for the current user.

    -g, --group
      print only the effective group ID

     -u, --user
      print only the effective user ID
    Посмотрим ид группы и ид пользователя для рута (должны быть нули)
    Код (Bash):
    root@raspberrypi:~# id -g
    0
    root@raspberrypi:~# id -u
    0
    по идентификатору пользователя не равным нулю в скрипте совсем просто определить что он выполняется не от рута

    Создадим 3-х пользователей с минимальными настройками
    Код (Bash):
    root@raspberrypi:~# useradd pi1
    root@raspberrypi:~# useradd pi2
    root@raspberrypi:~# useradd pi3
    Посмотрим их идентификаторы
    Код (Bash):
    root@raspberrypi:~# su pi1 -c 'id -g'
    1001
    root@raspberrypi:~# su pi1 -c 'id -u'
    1001
    Теперь всю это фигню сохраним в скрипт /root/test.sh
    Код (Bash):
    #!/bin/bash
    printf "host: %s\n" $(hostname) >/root/test.txt
    users=(pi1 pi2 pi3)
    for index in ${!users[*]}; do
      _uid=$(su ${users[$index]} -c 'id -u')
      _gid=$(su ${users[$index]} -c 'id -g')
      printf "user: %s, uid:%s, gid:%s\n" ${users[$index]} $_uid $_gid >>/root/test.txt
    done
    Добавим его в /etc/rc.local
    перезагрузимся и посмотрим что он наделал
    Код (Bash):
    root@raspberrypi:~# cat /root/test.txt
    host: raspberrypi
    user: pi1, uid:1001, gid:1001
    user: pi2, uid:1002, gid:1002
    user: pi3, uid:1003, gid:1003
     
    Igor68 и parovoZZ нравится это.
  10. Igor68

    Igor68 Гуру

    Кошерно!!!!!
    Спасибо за такое!

    Я не таков знаток как Вы и применил то, что на глаза попалось. Множество команд и не знаю, а если и знаю то не помню. Ищу их по начальным буквам с табуляцией. Но курю... всё-таки курю. Что касается hostname, то он на удалённой машине и локально его не узнать. Что касается pi01...pi05 то они на каждой машине свой... соответственно для малины с номером 1 будет pi01 и так до пяти. У каждой из них свой IP полученный от роутера. А что касается хоста debian1, то ему и вовсе ничего не надо кроме сервера NFS... ну ещё и как удалённая машина на которой будут редактироваться проекты для опыта. Для каждой малины свой. Каждая малина "почуяв" новую версию кода откомпилирует для себя своими средствами в пространстве NFS, остановит прежний код и запустит вновь скомпилированный. Ну понятное дело, что всё это по неким правилам.
     
    Последнее редактирование: 13 ноя 2019 в 15:38
  11. Я как написано в #8 на малине запустил скрипт, в котором _myhost=$(cat /etc/hostname) не подозревая, что хостнейм-то удаленный, поэтому и написал что он есть в окружении.
    С идентификатором(ами) пользователей, когда они немножко не известны руту, кроме как посмотреть базе, иного выхода нет, но и не обязательно знать где эта база, можно воспользоваться утилитами.
    Cоздал ещё 3-х пользователей для реалистичности и посмотрел немножко.
    Код (Bash):
    root@raspberrypi:~# compgen -u|grep 'pi[0-9]'
    pi1
    pi2
    pi3
    pi01
    pi02
    pi03

    root@raspberrypi:~# getent passwd|awk -F: '{print $1}'|grep 'pi[0-9]'
    pi1
    pi2
    pi3
    pi01
    pi02
    pi03
    А для чего на малинах собирать? Других средств для сборки нет?
    Так-бы собрали пакеты на более мощных ресурсах, а малины через apt (почуяв свеженькое) получили и установили бы их.
     
    Последнее редактирование: 13 ноя 2019 в 18:32
    Igor68 нравится это.
  12. Igor68

    Igor68 Гуру

    так я и не спорю про окружению (если честно то просто не привык по недоумию своему). То что касается сборки на самом хосте, то он не навечно PC с Debian. Лелею надежду что это будет сам роутер (на флудилке была тема про dir620) будет выступать в роли NFS сервера. Хотя про полную схему пока не скажу. Что касается мощности для сборки, то не планирую на малинах собирать таких монстров как OpenCV и им подобных, да и дебиан с собой уже тащит GCC. Пространстао для сборки NFS. А для эксперимента (на флудилке про OpenCV + Arduino + ...) готового и свежего по apt нет и не будет, потому как эксперимент мой. А я только вот как-то начал готовится к нему. И малины закупал когда-то для него.
     
  13. Igor68

    Igor68 Гуру

    Я люблю Linux, он мне по душе, но я не говорю, что знаю его.
    Так же мне по душе GCC и так же не знаю достаточно.
    Пользуюсь Си, но так же не знаю многого. (Л.Н.Толстой пользовался Русским языком, но не думаю что он знал всё)
    Спасибо огромное за замечания, благодаря которым исправил скрипт!!!
    Осталось отточить NFS сервер.
     
  14. И я не спорю и не доказываю ничего, вы создали топик, меня он заинтересовал, высказал своё мнение о решении, некоторые вещи по моему можно сделать проще, только и всего.
    Таким образом код в исходниках не собирая на ПК, доставляем в пространство с общим доступом, а малины сами его пусть собирают. Только не понятно, что делать, если очередной раз собрать не получится.
    apt - всего лишь механизм для получения пакетов, собранных или в исходных кодах.
    Можно поднять совой локальный репозиторий, на тех-же ресурсах что и nfs.
    На малинах добавить его в /etc/apt/sources.list и устанавливать через apt собранные на ПК пакеты (или исходники)
     
    Igor68 нравится это.
  15. Igor68

    Igor68 Гуру

    Вот и опечатка. В /etc/exports должно быть так(в моём случае):
    Код (Text):
    /mnt/sdXX/bot_gray/pi01 pi01(rw,sync,no_root_squash)
    /mnt/sdXX/bot_gray/pi02 pi02(rw,sync,no_root_squash)
    /mnt/sdXX/bot_gray/pi03 pi03(rw,sync,no_root_squash)
    /mnt/sdXX/bot_gray/pi04 pi04(rw,sync,no_root_squash)
    /mnt/sdXX/bot_gray/pi05 pi05(rw,sync,no_root_squash)
     
     
  16. Igor68

    Igor68 Гуру

    А вот это очень интересно! Надо покурить механизм. (Потом может быть на MIPS присяду - надо пощупать как нибудь. Хорошо бы отладочную плату с ним надыбать и JTAG. Наверное JLink не подойдет - надо купить какой нибудь для всего, если бывает)
     
  17. Igor68

    Igor68 Гуру

    Напротив. Я Вам очень благодарен!
     
  18. Igor68

    Igor68 Гуру

    Кстати на ПК буду обязательно собирать и проверять. А потом в файле проекта буду ставить другие циферки номера версии. И... скрипт (от пользователя на малине) найдёт изменения, выполнит "сборку" и произведёт перезапуск. Этот скрипрт запускается из под root от имени пользователя после монтирования NFS... и он крутится на протяжении всей работы.