На днях, працуючы над дыпломам, сутыкнуўся з неабходнасцю стварэння выявы Ubuntu для аднаплатніка з ужо ўсталяваным ROS (Robot Operating System – аперацыйная сістэма робатаў). Калі коратка, то дыплом прысвечаны кіраванню групай робатаў. Робаты абсталяваны двума коламі і трыма далямерамі. Кіруецца ўся гэтая справа з ROS, які круціцца на плаце ODROID-C2.
Робат Ladybug. Сары за дрэнную якасць фота
Усталёўваць ROS на кожнага робата паасобку не было ні чакай, ні жаданні, у сувязі з чым паўстала запатрабаванне ў выяве сістэмы з ужо ўсталяваным ROS. Прагуляўшыся па прасторах інтэрнэту, знайшоў некалькі падыходаў да таго, як гэта можна было б зрабіць.
У цэлым усе знойдзеныя рашэнні можна разбіць на наступныя групы.
Выкарыстанне рашэнняў з першай групы здавалася самым простым і прывабным варыянтам, аднак стварыць выяву live-сістэмы для ODROID у мяне так і не атрымалася. Рашэнні другой групы таксама мне не падышлі з-за дастатковага высокага парога ўваходжання. Зборка ручкамі па наяўных тутарыял таксама не падыходзіла, т.к. у маёй выяве не было сціснутай файлавай сістэмы.
У выніку натыкнуўшыся на відэа пра chroot (chroot - change root, спасылка на відэа ў канцы паста) і яго магчымасці, вырашана было выкарыстоўваць яго. Далей апішу свой прыватны выпадак кастамізацыі Ubuntu для распрацоўшчыкаў робататэхнікі.
Зыходныя дадзеныя:
Увесь працэс мадыфікацыі выявы (за выключэннем запісу на SD-карту з выкарыстаннем balenaEtcher) выконваўся ў аперацыйнай сістэме Ubuntu 18.04.
Ствараем дырэкторыю, у якую будзем мантаваць вобраз
mkdir mnt
Вызначаем раздзел, на якім размяшчаецца файлавая сістэма
file <файл образа>
Шукаем падзел з файлавай сістэмай у фармаце ext2, ext3 ці ext4. Нам патрэбен адрас пачатку часткі (вылучаны чырвоным на скрыне):
Заўвага. Размяшчэнне файлавай сістэмы можна таксама паглядзець з дапамогай утыліты рассталіся.
Мантаваны вобраз
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
Патрэбны нам раздзел пачынаецца з блока 264192 (у вас лічбы могуць адрознівацца), памер аднаго блока - 512 байт, перамнажаем іх, каб атрымаць водступ у байтах.
Пераходзім у тэчку са змантаванай сістэмай і чэргумся ў ёй
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt - поўны шлях да дырэкторыі са змантаванай сістэмай bin/sh - абалонка (можна таксама замяніць на bin/bash)
Цяпер можна ўжо займацца ўстаноўкай неабходных пакетаў і дадаткаў.
Наладжваем правы доступу
Паколькі мы закруціліся і, фактычна, выконваем усе дзеянні ад імя root збіранай сістэмы, то і ROS будзе запускацца толькі з правамі суперкарыстальніка.
Пры спробе запусціць roscore без sudo узнікае памылка:
Traceback (most recent call last): File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 230, in main write_pid_file(options.pid_fn, options.core, options.port) File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 106, in write_pid_file with open(pid_fn, "w") as f: IOError: [Errno 13] Permission denied: '/home/user/.ros/roscore-11311.pid'
Каб памылка не ўзнікала, рэкурсіўна зменім правы доступу да хатняга каталога карыстача ROS. Для гэтага набіраем: