LINUX.ORG.RU

Сообщения dima9kin

 

idesk упорно не рисует ярлычки

В общем, стоит Debian 11, DE на нем BlackBox. Установил idesk, ниже привожу его конфиг ideskrc

table Config
   ClickDelay: 200
end
table Actions
   Drag: left hold
   EndDrag: left singleClk
   Execute[0]: left doubleClk
   Execute[1]: right doubleClk
end

В директории ~/.idesktop лежит ярлычок remmina.lnk следующего содержания:

table Icon
   Caption: Remmina
   Icon: /home/user/.idesktop/icons/remmina.png
   X: 131
   Y: 300
   Command[0]: remmina
   Cjmmand[1]: 
end

Запускаю X11, в виртуальной консоли запускаю idesk - выдает ошибку:

terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 1) > this->size() (which is 0)

Позицию ярлычка в .lnk файле пытался менять по всякому - ничего не дает, ошибка та же...

 

dima9kin
()

Посоветуйте шустрый независимый от DE текстовый редактор

Прошу посоветовать легкий (не на сотни мегабайт!) графический текстовый редактор, который не тянет при установке зависимости какой либо DE.

Типа mousepad'а - который меня более чем устраивает и размером и функционалом - но, к сожалению, тянет за собой зависимости xfce...

 

dima9kin
()

Не работает меню в BlackBox

Понимаю, что мало кто плотно имел дело с таким раритетом, но все же попытаю счастья.

Итак, установил BlackBox в качестве единственной графической оболочки. И, разумеется, озаботился кастомизацией меню.

В домашнем каталоге создал файлик .blackboxrc, в него внес всего одну строку:

session.menuFile: /home/user/.menu

Создаю там же файлик .menu, в нем пишу:

[begin] (MyMenu)
   [exec] (MidnightCommander) {mc}
   [exit] (exitGUI)
[end]

Запускаю BlackBox, выполнив startx. Все супер, оболочка поднимается, более того, мое меню работает - отображаетсяя название (MyMenu) и два пункта (MidnightCommander и exitGUI). Вот только пункт MidnightCommander не запускает mc. Если говорить точнее - он вообще ничего не делает. А вот пункт exitGUI прекрасно работает - BlackBox завершает работу и я вываливаюсь в консоль.

Итак, меню успешно определяется, вызывается и частично работает. Но команды оболочки не выполняются, несмотря на то, что соответствующие им пункты меню отображаются успешно.

ЧЯДНТ?

P.S. Полное прописывание пути к mc (/bin/mc) также ничего не дает...

 

dima9kin
()

Чем разпаковать .run

Чем можно распаковать установщик .run?

Выдача утилиты file дает:

vipole.x86_64.run: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.26, BuildID[sha1]=ef2409d6348b9dfbff972fc9d62dd45ac4da06dc, not stripped

Mousepad этот файл как обычный .run-скрипт не открывает. Архиватор не видит его как архив...

 

dima9kin
()

Правильно ли я понимаю функционирование AppImage-приложений?

Здравствуйте! Сегодня я впервые в жизни запилил два AppImage приложения из существующих .deb пакетов (WPS-Office и remmina), причем они даже успешно запустились.

Однако, сразу же всплыл один принципиальный вопрос - правильно ли я понимаю, что хотя при запуске файла AppRun и происходит подмена путей на локальные для .appdir - однако сам исполняемый файл может обращаться к нужным библиотекам и по стандартным (абсолютным) путям (типа /bin, /lib и тому подобным)?

Просто иначе не понимаю: та же remmina, согласно выдаче команды ldd использует тьму разных библиотек - однако в ее appdir вообще нет директории /lib и, соответственно, ни одной из указанных библиотек. Значит, она, даже запускаясь с переписанными путями из .appdir, все равно дергает библиотеки со стандартных мест?

Или у меня каша?

Всем спасибо за внимание к теме!

 

dima9kin
()

/dev/sr0 not exist при загрузке Debian

В общем, пишу уже от некоего отчаяния - потому что до Нового года собирал по приводимому ниже шаблону систему и все прекрасно работало. Причем не менял ничего - даже .iso Дебиана использовал тот же - только сейчас все падает на этапе загрузки.

Создаю на виртуалке свеженькую систему Debian, все там устанавливаю и настраиваю что нужно. Затем вырубаю (комментариями) монтирование кФС в /etc/fstab и дописываю туда:

none / tmpfs defaults 0 0
Дальше, собираю свой initramfs, закомментируя в /usr/share/initramfs-tools/scripts/local строки:
# checkfs ${ROOT} root
# mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
а, затем, добавляя подмонтирование моей кФС из .tar.gz:
mkdir /ramboottmp
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /ramboottmp
mount -t tmpfs -o size=100% none ${rootmnt}
cd ${rootmnt}
tar -zxf /ramboottmp/ram.tar.gz
umount /ramboottmp
, где файл ram.tar.gz создается командой
busybox tar -czf /кудахотимсохранить/ram.tar.gz *
, выполняемой из корня собранной и настроенной целевой системы Debian (снаружи, разумеется, путем подмонтирования диска виртуалки в loop режиме). По сути, ram.tar.gz это и есть нужная кФС, которую при загрузке нужно развернуть в оперативную память.

Дальше создаю свой initramfs:

/sbin/mkinitramfs -o /initrd-ram.img
, и сохраняю его.

Дальше в директорию кладу: ram.tar.gz и isolinux (всю директорию), а в директорию isolinux кладу ядро и свой initrd-ram.img.

В isolinux.cfg вношу:

DEFAULT MyLive
LABEL MyLive
linux /isolinux/ЯДРО
APPEND initrd=/isolinux/initrd-ram.img root=/dev/sr0 rw

Собираю диск командой:

genisoimage -o disk.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -R /ПУТЬ-К-ДИРЕКТОРИИ-ГДЕ-ВСЕ-ЛЕЖИТ

Повторюсь, до НГ собирал по этой схеме не один раз и все прекрасно работало. Сейчас же в процессе загрузки выдает

ALERT! /dev/sr0 does not exist. Dropping to a shell!

Очевидно, что система не находит мое устройство, содержащее кФС (параметр root= из isolinux.cfg).

Более того, выдача lsmod показывает, что вообще ни один модуль не загружен, а выдача ls /dev, действительно, не содержит ни sr0 ни чего либо аналогичного (ничего похожего на диски в принципе).

Попытка подгрузить модули привода командами

insmod sr_mod
insmod cdrom
insmod scsi_mod
ничего тоже не дает - просто проглатывается консолью без выдачи ошибки, но выдача lsmod по прежнему пуста.

И, главное, - ведь грузиться то все начало в любом случае с CD-привода!!! Так как он перестает быть виден на каком то участке загрузки, если он (CD-привод) был успешно подтянут ранее, с него запустился isolinux и ядро! КАК?!?

Реально опускаются руки - один и тот же путь приходится проходить по несколько раз и каждый раз какая то новая хрень. Причем даже намека нет на мысль куда смотреть...

 ,

dima9kin
()

Авторизация обычного пользователя по ключу ssh

В общем, по всей видимости туплю - но уже два дня не могу найти причину, посему обращаюсь к Форуму.

Есть удаленный сервер, на нем root и один пользователь, допустим faruser. На клиентской машине все действия от пользователя, допустим localuser.

Создан ключ id_rsa и соответствующий ему открытый ключ. На локальной машине они лежат в директории /home/localuser/.ssh

На сервере эти публичные ключи лежат в директории /root/.ssh и /home/faruser/.ssh

И в той и в другой директории также созданы файлы authorized_key и в них залиты id_rsa.pub

В /etc/ssh/sshd_config запрещена аутентификация по паролю, только по ключу.

Теперь в чем суть вопроса:

Когда заходим из-под обычного локального пользователя localuser root'ом удаленного сервера, т. е. выполняем от localuser на клиентской машине

ssh root@1.2.3.4
все проходит замечательно, запрашивается парольная фраза на ключ id_rsa и после ее ввода я сразу оказываюсь на сервере.

А вот при попытке войти пользователем faruser (с клиентской машины из-под localuser, разумеется), пароль на ключевую фразу не запрашивается, сразу выдает

Permission denied (public key)
Вопрос - почему аутентификация по ключу успешно проходит для удаленного root'а, но не проходит для удаленного faruser?

 

dima9kin
()

Поднять ecryptfs over sshfs из под обычного пользователя

Собственно, сабж вынесен в тему.

Итак, есть удаленный сервер, там, ясно дело, есть root и есть обычный пользователь, допустим, ivan. Ну, авторизация по ключам настроена, ssh без проблем соединяет, все хорошо.

Выполняю на клиентской машине из-под обычного пользователя:

mkdir /home/durak/.fardir
mkdir /home/durak/workdir
sshfs ivan@1.2.3.4:/home/ivan/data /home/durak/.fardir

Эта часть кода идет идеально, в итоге в .fardir монтируется удаленная папка data. Вопросов нет.

А вот дальше засада. При попытке выполнить

mount -t ecryptfs /home/durak/.fardir /home/durak/workdir
получаю ошибку, что обычный пользователь не может монтировать с опциями, что ожидаемо.

А если монтирую от root то все монтируется, но обычный пользователь не может работать с workdir - даже когда меняю на нее права и владельца на этого самого пользователя. А это очень неудобно постоянно лазить туда залезая под root.

Подскажите, можно реализовать нужную мне архитектуру без привлечения fstab (строго - система Live) и, желательно, без привлечения механизма sudo (есть причины).

 ,

dima9kin
()

vpn+proxy - ЧЯДНТ?

Задача поднять связку vpn+proxy (tor).

C VPN проблем нет - все ставится, инфраструктура создается и, главное, успешный ping на 10.8.0.1 c клиентской машины. Ну, tun0 тоже создан. В общем, не вижу в этой части проблемы.

На сервере запущен tor, netstat выдает, что он слушает на 127.0.0.1:9050 - стандартные настройки. iptables - все политики ACCEPT, нет блокировок.

Мое видение судьбы пакета: попадая на сервер из tun0, он оказывается доступен на всех портах, в том числе на 9050. Где его должен подхватить tor-proxy и отправить уже дальше в сеть в соответствии со своими правилами.

Тем не менее, Mozilla с настройкой прокси: Ручная - Socks-узел - 10.8.0.1, порт 9050, тип SOCKS5 - дает ошибку вида: Прокси сервер отклонил соединение...

ЧЯДНТ?

P.S. Разжевывать не обязательно, берегу Ваше время. Просто пните в нужном направлении!

 , ,

dima9kin
()

Порядок поключения устройства

Доброго времени суток всем!

Я в Линуксе совсем еще зеленый, а взялся ковырять довольно скольскую тему run-from-RAM - попутно вскрывая для себя все новые и новые пласты знания об устройстве системы с самого низа.

Сейчас немного завяз в устройствах (в разрезе моей задачи - на собранных разными способами initramfs то виден, то не виден оптический привод).

В ходе ковыряния темы подключения устройств, вроде, нащупал как все это происходит, но хотел бы услышать мнения Просветленнейших - правильно ли я понимаю и ничего ли не упустил.

Итак. Когда мы имеем устройство, физически подключенное к какому то слоту в ПК, его сперва распознает (сам факт подключения) либо ядро как таковое, либо один из его модулей. Факт подключения можно выяснить одной из многочисленных команд типа lspci, hw, lsusb, hwinfo и иже с ними. Если поддержка устройства есть прямо в ядре - мы его сразу должны увидеть в выдаче, если в выдаче его нет - нужно выяснять, каким модулем оно распознается - для этого есть инструментарий lsmod (можно запустить его на системе, в которой устройство успешно работает и посмотреть - эвристически подобрав название, разумеется - название его модуля), а также modinfo, insmod и modprobe.

Соответственно, когда мы нашли недостающий модуль - тупо можно скопировать его в каталог /lib/modules (или в /lib64/modules? Как правильно, если система amd64?), а затем загрузить любой из двух команд:

modprobe ИМЯМОДУЛЯ
или
insmod ПУТЬКМОДУЛЮ
Насколько я понимаю, первая команда предпочтительнее, ибо грузит и все модули, от которых зависит требуемый.

Любой модуль должен строго соответствовать своему ядру, поэтому при трансплантации модулей из системы в систему это надо учитывать))

Когда устройство появляется в выдаче, необходимо сопоставить ему соответствующий файл в вФС /dev - для этого существует некий udev - он переводит работу с устройствами на более высокий уровень абстракции, создавая файлы устройств на основе информации о физически подключенном оборудовании, которую поставляет ему ядро/модули ядра.

Чтобы вызвать udev мы при старте системы должны смонтировать вФС типа devtmpfs:

mount -t devtmpfs udev /dev

А если при ее монтировании нужный для конкретного устройства модуль ядра не был загружен - то устройство придется создавать в ручную - по сути руками делать то, что udev делает как скрипт:

mknod /dev/КАКНАЗОВЕМФАЙЛУСТРОЙСТВА b или с ОСН.НОМЕР ВТ.НОМЕР
где b или c - блочное создаем устройство или символьное.

Ну вот как то так я все это понял. Рад буду замечаниям и поправкам.

 ,

dima9kin
()

Как заставить Debian работать из RAM

Итак, я продолжаю «искать свой святой Грааль» - метод загрузки полноценной custom-системы Debian целиком в RAM. Сперва пытался сделать это путем помещения всей системы в initramfs - все заработало, да только большая система (с GUI и кучей приложений) не грузится (после загрузки ядра начинает грузить initramfs и выдает Invalid argument - при этом такой же Дебиан но без GUI и программ весом до 1 ГБ грузит в RAM в составе initramfs без проблем: по всей видимости, где то ограничение на размер initramfs зашито в ядре, туда лезть у меня не хватит, боюсь, знаний).

Тогда я решил поместить в RAM систему другим путем, который в общих чертах описан здесь: https://habr.com/ru/post/253759/

Чтобы не заставлять Вас бродить по ссылкам, приведу основные точки способа:

1. Меняем конфигурацию initramfs, отключая проверку кФС (здесь и далее - обозначение корневой ФС) и стандартное монтирование кФС:

# checkfs ${ROOT} root
# mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
а затем создаем временную точку монтирования (еще работая в пределах initramfs!) для нашего CD:
mkdir /ramboottmp
монтируем нашу кФС с CD во временную точку монтирования:
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /ramboottmp
Создаем ФС в RAM:
mount -t tmpfs -o size=100% none ${rootmnt}
Ну и распаковываем нашу кФС (файл ram.tar.gz) в эту tmpfs:
cd ${rootmnt}
tar -zxf /ramboottmp/ram.tar.gz
umount /ramboottmp

2. Геним новый initramfs:

/sbin/mkinitramfs -o /initrd-ram.img

3. В кФС (автор поста предлагал заходить туда из-под Live-CD, я предпочел напрямую вытащить кФС из виртуального диска .vdi - но это дело вкуса) отключаем прописанное там в /etc/fstab монтирование кФС и пишем свое:

none / tmpfs defaults 0 0

4. А затем архивируем всё из корня:

busybox tar -czf /путь-к-архиву/ram.tar.gz *

5. Создаем директорию, туда кидаем isolinux (в директории isolinux, разумеется), в эту же директорию isolinux кидаю ядро и initrd-ram.img, а ram.tar.gz кидаю в основную директорию. В isolinux.cfg прописываю:

DEFAULT MyLive
LABEL MyLive
linux /isolinux/ЯДРО
APPEND initrd=/isolinux/initrd-ram.img root=/dev/sr0 rw

6. Ну и генерирую .iso:

genisoimage -o disk.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -R /полный-путь-к-директории-из-пункта-5

Указанный .iso шикарно грузится, лишь немного затупливая при заливке 1.6 ГБ в RAM - но! Сам Линукс не загружается, выдавая в конце ошибку:

No init found. Try passing init= bootarg

При этом в директории root лежит моя кФС, то есть все, что я прописывал в initramfs РАБОТАЕТ! Но система то не запускается...

Что я пробовал:

1. По рекомендации самой системы выполнить run-init, указав в качестве NEW_ROOT точку монтирования моей кФС (/root), а в качестве NEW_INIT - Init моей кФС (/root/sbin/init):

run-init /root /root/sbin/init
Не происходит ровным счетом НИЧЕГО. Просто заново выдает консоль initramfs'а.

2. Просто запустить init initramfs'а:

/sbin/init
Выдает:
Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist. Init must be run as PID 1

3. Кончилась фантазия и обращаюсь к Форуму...

 , , , ,

dima9kin
()

Непонятный параметр ядра boot=

Просматривая файл isolinux.cfg обнаружил в разделе APPEND (а именно в этом разделе, насколько мне известно, ядру передаются необходимые параметры) параметр вида

boot=live
, где live - директория на носителе, в которой лежит корневая ФС. проблема в том, что в параметрах ядра я не нашел такого параметра как boot. Ну, тупо его нет, и, соответственно, нет описания что это параметр передает ядру. Кто нибудь в курсе?

 ,

dima9kin
()

Как обратиться к диску, на котором лежит корневая ФС

Допускаю, что вопрос наитупейший - но, что интересно, ответа в Яндексе не нашел. Итак, система состоит из одного лишь initramfs, который благополучно загружается в процессе старта системы и дает пользователю консоль BusyBox. При этом, на самом CD лежит файл, содержащий другую файловую систему. Разумеется, из initramfs видна только сама ФС этого самого initramfs.

Вопрос: можно ли как то обратиться к другим файлам на CD, на котором лежит initramfs? Нужно с целью примонтировать к файловой системе initramfs’а лежащую на CD ФС…

 ,

dima9kin
()

Booting kernel failed при загрузке самодельного Live-Debian

Ох... В общем, у меня задача сделать Live систему Debian полностью размещенную в initramfs. Что я делаю: 1. Создаю виртуальную машину в VirtualBox, устанавливаю туда Debian и ряд пользовательских приложений - тут все стандартно и ничего интересного. 2. Далее из виртуального диска .vdi выделяю образ .img:

vboxmanage clonemedia --format RAW mydisk.vdi mydisk.img
Утилитой fdisk выявляю стартовый сектор и размер сектора:
fdisk mydisk.img
умножаю стартовый сектор на размер сектора и полученное {ЗНАЧЕНИЕ} использую при монтировании:
mount -o loop,offset={ЗНАЧЕНИЕ} /mydisk.img /mnt
Ну, соответственно, в mnt лежит содержимое жесткого диска виртуалки с Debian'ом - все тоже стандартно. 3. Дальше я все из mnt (не знаю зачем, от греха подальше) копирую во временную директорию, в которой буду создавать initramfs (пускай это будет /ird), и удаляю оттуда ядро(-а) и initrd, а также всю директорию boot (там лежит GRUB2 установленного Debian'а - он, как я понимаю, нафиг не нужен). 4. Ну и пакую все в cpio+gzip:
find . | cpio -H newc -o | gzip > initramfs.gz
5. Делаю директорию для создания Live-CD (допустим /livecd) и помещаю туда директорию isolinux, в которой лежат: boot.cat hdt.c32 isolinux.bin isolinux.cfg ldlinux.c32 libcom32.c32 libgpl.c32 libmenu.c32 libutil.c32 memdisk vesamenu.c32 ну и, естественно initramfs.gz (initrd, который сделал в п. 4) и vmlinuz-5.10.0-9-amd64 (ядро). boot.cat делаю просто утилитой dd (заполняю нулями до 2 кБ). isolinux.cfg имеет следующее содержание:
DEFAULT MyLive
LABEL MyLive
linux /isolinux/vmlinuz-5.10.0-9-amd64
APPEND initrd=/isolinux/initramfs.gz rw
Писал его сам, не судите строго. Не хотел бездумно переписывать чужие. Остальные файлы тупо взял из существующего isolinux'а от Live-Debian с официального сайта, каюсь. 6. Создаю образ:
genisoimage -o disk.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -R /{полный путь к директории livecd}
Образ создается без ошибок, я даже потом проверяю что на .iso все внутри лежит как надо (путем подмонтирования его в loop-режиме). 7. Самое интересное. Создаю в VirtualBox виртуалку БЕЗ жесткого диска, в виртуальный CD «сую» свой disk.iso и запускаю машину. Дальше происходит следующее:
ISOLINUX 6.03 20171018 ETCD Copyright (C) 1994-2014 H. Peter Anvin et al
То есть как минимум ISOLINUX цепляется успешно!
Loading /isolinux/vmlinuz-5.10.0-9-amd64...ok
Раз «ok» - значит, надо понимать, загрузка ядра произошла успешно?...
Loading /isolinux/initramfs.gz...ok
Опять же - говорит «ok»! А потом вот такая шляпа:
Booting kernel failed: Invalid argument
boot:
*********************************** *** Я голову сломал, что он от меня хочет - я никаких аргументов не передавал в ядро... Очень прошу помочь - в каком направлении думать, где я ошибся. Ну или, как вариант, с удовольствием приму помощь по созданию подобного Live-дистрибутива на коммерческой основе (формат взаимодействия и стоимость оговорим в личке)!

 ,

dima9kin
()

RSS подписка на новые темы