LINUX.ORG.RU

Сообщения HighMan

 

Как подключиться к ARM через COM?

Форум — Admin

Здравствуйте, коллеги.

Прошу не пинать сильно. С ARM я сталкивался, но давно и как-то не глубоко. На данный момент из памяти почти все стерлось.

Что мы имеем:

Architecture:           aarch64
  CPU op-mode(s):       32-bit, 64-bit
  Byte Order:           Little Endian
CPU(s):                 8
  On-line CPU(s) list:  0-7
Vendor ID:              ARM
  Model name:           Cortex-A55
 ...

Железка рабочая. На ней установлен Debian 12

uname -a
Linux Debian 5.10.160 #4 SMP Fri Feb 9 09:21:31 MSK 2024 aarch64 GNU/Linux

Debian - это, конечно, очень хорошо! Но нам на нем нужен Alt.

Систему можно загрузить с «харда» или карты памяти.

Полазил в интернете и даже кое что нашел! https://www.adior.ru/index.php/desktop/162-alt-linux-arm

Сделал по инструкции. Залил alt-workstation-10.0-aarch64.img.xz по инструкции на карту памяти, попытался загрузиться и… И ни чего! Просто черный экран.

Меня, вообще, arm выбешивает, что при загрузке, вообще ни чего не говорит! При загрузке предустановленного Debian, сначала черный экран, помигивает курсор, потом сразу приглашение в систему.

Сам процесс загрузки сокрыт.

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

Я когда-то, ка писал выше, с этим сталкивался, но все успешно забыл.

Давайте представим что есть шнур с CP2102/CP2109 UART Bridge Controller на одном конце 9 pin на другом USB.

Подключаем COM к ARM, usb к внешнему компу с Linux.

В Linux устанавливаю Putty. Допрос с пристрастим dmesg выдает:

 [ 1696.053358] usb 1-1.4.3.1: new full-speed USB device number 13 using ehci-pci
[ 1696.165585] usb 1-1.4.3.1: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
[ 1696.165623] usb 1-1.4.3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1696.165644] usb 1-1.4.3.1: Product: CP2104 USB to UART Bridge Controller
[ 1696.165659] usb 1-1.4.3.1: Manufacturer: Silicon Labs
[ 1696.165673] usb 1-1.4.3.1: SerialNumber: 034BC90C
[ 1696.167806] cp210x 1-1.4.3.1:1.0: cp210x converter detected
[ 1696.170454] usb 1-1.4.3.1: cp210x converter now attached to ttyUSB0

О! Крупица информации: cp210x converter now attached to ttyUSB0

Далее запускаю Putty, выбираю serial, вписываю /dev/ttyUSB0 и… Скорость по умолчанию 9600. Оставляю как есть или забиваю 115200 -результат един. Открывается окно в котором лишь курсор, который ни на что не реагирует.

Ни чего не вводится и не выводится.

Что я делаю не верно? Что я забыл?

Давайте будем считать (надеятся), что шнурок живой.

PS. Еще я видел, что у Alt linux есть iso образы для arm64. Например alt-server-10.0-aarch64.iso
https://download.basealt.ru/pub/distributions/ALTLinux/p10/images/server/aarch64/

Как его можно установить???

 ,

HighMan
()

bash парсинг конфига и вопросы по «подстановкам»

Форум — Admin

Здравствуйте, коллеги.

Возникла задачка на из bash скрипта распарсить конфигурационный файл и, соответственно, проинициализировать свои переменные на основе данных конфига.

Формат конфига простой ка мычание: ключ = значение. Т.е. разделителем служит знак =. Что слева от него - ключ, справа - значение.

Понимаю, что на python это сделать как 2 пальца об асфальт, но, в силу ряда причин, приходится башить.

Тем не менее, на вооружение, я взял пистоновский подход:

declare -A conf

default_conf(){
 conf['user']=user
 conf['passwd']=''
 # ...
}

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

Наверное мне проще задать вопрос на примере

load_conf(){
 # $1 - conf file
 [ -f $1 ] || return 1
 local l lines var param
 # Загружаем конфигурационный файл без коментариев (# ...) и
 # пустых строк
 IFS=$'\n'
 lines=($(awk -F# '{print $1}' | grep -v '^\s*$'))
 for l in ${lines[@]}; do
  var=${l%%=*}   
  param=${l#*=}
  # ...
 done
}

Вот, кстати, тут и возник вопрос по «подстановкам». Инициализацию var и param я подглядел, но до конца не понял.

Если не сложно, то ткните носом где о подобном можно почитать

Дальше, по идее, нужно проверять $var на наличие такого ключа в conf, но я не знаю как это сделать.

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

[ -n "${conf[$var]}" ] && ${conf[$var]}=$param

но это как-то не верно, на мой взгляд. Ведь в словаре может быть ключ с пустым значением, как, например, в функции default_conf инициализируется conf[‘passwwd’]='', т.е. инициализируется пустым значением по умолчанию. Тут прилетает из конфига passwd = 12345 и скрипт отбросит этот пароль, т.к. в словаре пароль инициализирован пустым значением.

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

 var='hernya'
 param='polnaya'
 conf[$var]=$param

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

UPD awk можно выбросить и загрузку сделать грепом:

grep -v '\s*#.*$\|^\s*$' $1

 

HighMan
()

Из скрипта выполнить в chroot несколько команд

Форум — Admin

Здравствуйте, коллеги! Нужно из главного скрипта войти в chroot и там выполнить несколько комманд. Я соорудил:

chroot ${WORK_DIR}/chroot <<EOF
echo $ROOT_PASSWD | passwd root --stdin
[ -d /srv/mnt ] || mkdir /srv/mnt
EOF

Вроде устанавливается пароль для root и создается /srv/mnt, вот только… на экране отображается все, что находится между <<EOF EOF, а это как-то не красиво. Как избавиться от этого никчемушного вывода?

 ,

HighMan
()

Есть сведущие в make-initrd? Есть несколько вопросов...

Форум — Admin

Здравствуйте, коллеги!

Есть такой инструмент https://github.com/osboot/make-initrd/

Он вшит в Altlinux, но, так же, может использоваться в других системах.

Если вы им когда-то пользовались, то подскажите, пожалуйста, по следующим вопросам:

  1. Как добавить нужные мне модули ядра? (например squashfs)

  2. Как добавить некоторые утилиты? (например fdisk)

  3. Можно ли оперируя свойствами загрузки ядра (/proc/cmdline) заставить initrd загружать систему из squashfs образа, накладывать на него overlay (rw layer) используя какой-то раздел?

Я добился нужного результата нагородив не хилый набор скриптов, которые разбирают имеющийся initrd из altlinux, напихивают в него нужные модули ядра (копирование из базовой системы), перегенерируют modules.dep, дальше подменяют в initrd /init своим скриптом.

Но, насколько понимаю, я занимаюсь изобретением велосипеда и большую часть можно сделать используя этот make-initrd.

Вроде, все прозрачно. Весь набор скриптов make-initrd это make и bash скрипты, но…

make я знаю из рук вон плохо. Можно сказать, что не знаю.

bash скрипты уже ближе, но написаны они не в моем стиле и разбирать их сСущее наказание. Потому оказалось проще написать самому скрипты, которые выполняют нужные действия.

 , ,

HighMan
()

пустой вывод arp -a

Форум — Admin

Здравствуйте, коллеги!

Есть некая странная машина Linux, которая регулярно вываливается из сети.

Живет себе поживает. Откликается на пинги, ssh подключения, т.е. все как должно быть. Потом, внезапно, ssh соединение с этой машиной виснет, на пинги она перестает отвечать.

Если посмотреть на этой машине, то интерфейс UP, но ни кого не пингует и, вообще, ни какой сетевой активности.

Оживить сеть можно лишь systemctl restart networking.

И самое интересное, что в периоды зависания сети arp -a выдает пустоту! При этом на другой машине висит ssh соединение с ней.

Смотрел логи и dmesg, но не нашел ни чего криминального.

Что это может быть?

 , ,

HighMan
()

Странности минисистемы (initrd)

Форум — Admin

Здравствуйте, коллеги!

Есть задумка сделать супер минималистичную систему на баз Altlinux (к сожалению в выборе донора я ограничен).

Всю систему я хочу запилить в initrd.

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

На данном этапе я получил адекватный ввод в баше и поднял сеть.

Что, вообще, делается в initrd (init) на текущий момент:

1. монтируются виртуальные fs (proc, sys, dev, dev/pts, run, tmp)
2. запускается udevd
3. запускаю bash

Вот тут начинается первая проблемка: система не воспринимает Ctrl-C. Т.е. нельзя выбить программу. Видимо нужно что-то подгрузить, но что?

Дальше я назначаю статический IP:

ip a add 192.168.0.100/24 dev eth0

Соответственно, уже есть в системе сетевые адаптеры (eth0, eth1), к eth0 подключен сетевой кабель.

Поднимаю eth0

ip link set up dev eth0

Все нормально, но не совсем…

Поскольку мне нужна только локальная сеть 192.168.0.0/24 то можно не прописывать gateway. Тут по желанию. Ни на что не влияет.

Вот тут получаю первую странность:

Пингую с другой машины (192.168.0.65) адрес минисистемы 192.168.0.100 и… Destination Host Unreachable

Теперь с минисистемы пингую 192.168.0.65. Пинги проходят! Сеть жЫвет!

После «входящего» пинга 192.168.0.65 может пинговать 192.168.100. Все работает. Но… На пинги минисистема начинает отвечать лишь после того, как сама кого-то пинганула.

И еще странность: минисистема не может пинговать свой ip (192.168.0.100). Вообще ни как!

Дальше я написал на C элементарный UDP эхо сервер и запускаю его на минисистеме. Все нормально! Я с ним могу «переговариваться».

Вот только… Через какое-то время миниситема перестает отзываться и виснет наглухо. Так, что даже на Ctrl-Alt-Del перестает реагировать.

Виноват не мой эхо сервер. Минисистема так же прекрасно виснет на bashe. Вот только что жила, а теперь сдохла.

Временной интервал до зависания разный. От нескольих минут до часа. Но, тем не менее, минисистема переходит в полную «несознанку» и лечится это только резетом.

Как будто минисистема засыпает, а проснуться уже не может. Но как такое может быть???

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

Почему происходят эти засыпания - вообще не понимаю.

Почему минисистема не отвечает по сети до тех пор пока сама кого-то не пинганет - не понятно.

Как заставить миниситему реагировать на Ctrl-C?

 

HighMan
()

ocserv (OpenConnect) вопросы по роутингу

Форум — Admin

Здравствуйте, коллеги!

По большому счету ocserv настраивается не сложно и у меня уже работает, но… Видимо придется отказаться от OpenVPN и переложить его обязанности на ocserv. Вот тут и появляются вопросы.

Допустим есть пользователь user1, подключенный к ocserv, и у него есть локальные сети, пусть будут 192.168.100.0/24 и 192.168.101.0/24. Для доступа в 192.168.101.0/24 используется шлюз 192.168.100.100.Теперь подключается user2, которому нужно предоставить доступ к сетям user1. А еще есть user3, котрый должен иметь доступ к локальной сети за ocserv и не иметь роутинга для доступа к сетям user1 и user2.

В OpenVPN это делается относительно просто, а как подобное реализовать на ocserv?

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

 , ,

HighMan
()

Как в мультизагрузочную флешку добавить memtest86 10 версии?

Форум — Admin

Здравствуйте, коллеги!

Возникла задача сделать некую утилитарную флешку со средствами тестирования дисков, памяти и прочих утилитарных приблуд. Типа эдакого rescue disk.

Большая часть работы уже проделана. Затык оказался с memtest86.

Скачал с сайта https://www.memtest86.com/downloads/memtest86-usb.zip распаковал. Из всего, что там есть, на моу взгляд, интересен лишь memtest86-usb.img. Нужно всего лишь вытащить из образа непосредственно memtest, посмотреть как он там прописан в загрузчике и повторить эту запись в grub.cfg загрузочной флешки.

Казалось бы, что может быть проще?

# fdisk -l memtest86-usb.img 
Диск memtest86-usb.img: 1 GiB, 1073741824 байт, 2097152 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: F2710038-86B6-4948-9A58-56F4E2EFB775

Устр-во             начало   Конец Секторы Размер Тип
memtest86-usb.img1    2048  524287  522240   255M Microsoft basic data
memtest86-usb.img2  524288 1048575  524288   256M EFI
memtest86-usb.img3 1048576 2097118 1048543   512M Microsoft basic data

Первая странность: целых 3 раздела!

Где-то на сайте нашел инструкцию как добраться до самой программы. Сейчас найти не смог, но history все помнит!

# mount -o loop,offset=263192576 memtest86-usb.img /mnt
# mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

О как!

Ну да ладно. Берем в мозолистые руки loosetup!

# losetup -f memtest86-usb.img -P
# losetup -a
/dev/loop0: [0035]:4069625 (/root/memtest86-usb.img)
[root@dragonfly ~]# ls /dev/loop*
/dev/loop0  /dev/loop0p1  /dev/loop0p2  /dev/loop0p3  /dev/loop-control

Все замечательно. Имеем сам образ в /dev/loop0, разделы /dev/loop0p{1,2,3}

Интуиция подсказывает, что все самое интересное расположено на /dev/loop0p3, но не будем торопиться. Посмотрим, что же мы имеем на первых двух разделах:

# mount /dev/loop0p1 /mnt
# tree /mnt
/mnt
├── EFI
│   └── BOOT
│       ├── Benchmark
│       ├── blacklist.cfg
│       ├── BOOTAA64.efi
│       ├── BOOTIA32.efi
│       ├── BOOTX64.efi
│       ├── mt86.png
│       └── unifont.bin
├── help
│   └── MemTest86_User_Guide_UEFI.pdf
└── license.rtf

5 directories, 8 files

Стандартный ESP раздел. Ни чего интересного! Посмотрим, что на втором:

# umount /mnt
# mount /dev/loop0p2 /mnt
# tree /mnt
/mnt
├── EFI
│   └── BOOT
│       ├── Benchmark
│       ├── blacklist.cfg
│       ├── BOOTAA64.efi
│       ├── BOOTIA32.efi
│       ├── BOOTX64.efi
│       ├── mt86.png
│       └── unifont.bin
├── help
│   └── MemTest86_User_Guide_UEFI.pdf
└── license.rtf

5 directories, 8 files

Хм… Что-то мне это напоминает… О! /dev/loop0p1! Странно…

# umount /mnt
# umount /mnt
# mount /dev/loop0p3 /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop0p3, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

О как!

lsblk -o path,fstype /dev/loop0
PATH         FSTYPE
/dev/loop0   
/dev/loop0p1 vfat
/dev/loop0p2 vfat
/dev/loop0p3

И правда. /dev/loop0p3 без fs!

Хрень какая-то…

Запилил флешку:

# dd if=memtest86-usb.img of=/dev/sdc bs=1G
1+0 records in
1+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 53,4333 s, 20,1 MB/s
# mount /dev/sdc3 /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sdc3, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

Что не удивительно. Ведь /dev/loop0p3 монтироваться у нас ранее отказывался.

Но, блин!

С этой флешки memtest грузится и даже что-то проверяет!

Но мне совсем не хочется выделять под memtest отдельную флешку! Мне все нужно на однй! Пытался заставить gfrub загрузить memtest из образа memtest86-usb.img, но тут я слабоват.

Вроде, нужно как-то через chainloader, но это я не умею :(

 

HighMan
()

Коллеги, у кого есть доступ к многопроцессорному Linux серверу?

Форум — Admin

Здравствуйте, коллеги!

Если у кого есть доступ к многопроцессорному (2 или более физических процессоров), то не могли бы вы кинуть сюда вывод нескольких команд?

ls /sys/devices/platform/
ls /sys/devices/platform/coretemp.0/
ls /sys/devices/platform/coretemp.0/hwmon

У меня, в данный момент, нет доступа к многопроцессорной машине, а мне нужно собрать информацию по температуре ядер.

С однопроцессорной многоядерной машиной, вроде, разобрался. Теперь хочу понять где и что искать в многопроцессорной системе.

 

HighMan
()

/proc/stat как правильно посчитать загрузку по ядрам?

Форум — Development

С Наступающим Новым Годом, коллеги!

Поступила задача считать загрузку по ядрам. Вроде задача простая. Распарсить /proc/stat и посчитать… Парсинг и заполнение структур - вопрос решенный. Затык в формуле расчета. Рытье гугла не дало хорошего результата. Чуть ли не у каждого автора формула своя! И есть заметные отличия значений с top.

Общий алгоритм ясен: распарсить /proc/stat (выполнено). Заполнить структуру или массив интов (выполнено). Подождать некоторое время и повторить процедуру. Дальше работать с разностью значений (тут тоже понятно). Посчитать результат (ни фига не понятно по какой формуле).

https://azrr.info/page/view/19-poluchaem-svedeniya-o-sisteme-iz-proc-i-sys.html На мой взгляд, ближе всего к top, если таймаут одинаковый.

https://www.idnt.net/en-US/kb/941772 Результат хуже. Возможно я плохо перевел формулу из bash в с.

https://github.com/hightemp/docLinux/blob/master/articles/%D0%9A%D0%B0%D0%BA%20%D1%80%D0%B0%D1%81%D1%81%D1%87%D0%B8%D1%82%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D0%B8%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%BD%D1%82%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%A6%D0%9F%20Linux.md Вообще фигня.

Перед НГ голова переваривать рабочие вопросы совсем отказывается, абы загружена на 147%% приобретением подарков. Потому прошу помощи в, наверное, элементарном вопросе.

Если кто-то оторвется от подготовки к празднику и решит подсказать, что-то полезное, буду очень благодарен.

Для простоты взаимопонимания предложу свою структуру (с)

struct coreinfo{
    int cpu_num;
    int user;
    int nice;
    int system;
    int idle;
    int iowait;
    int irq;
    int softirq;
    int steal;
    int guest;
    int guest_nice;
};

UPD Есть ли способ откуда-то считать температуру процессора без lm-sensor?

 , ,

HighMan
()

linux странности с fat32 на флешках

Форум — Development

Здравствуйте, коллеги!

С Наступающим Новым Годом!

Пытаюсь доделать скрипт, создающий загрузочные флешки, с последующим наполнением нужным софтом.

Идея следующая: флешка (допустим /dev/sdc) бьется на 2 раздела.

/dev/sdc1 = весь объем - 1,5Гб (ext4 или, впоследствии, NTFS),

/dev/sdc2 = 1,5Гб (fat32 EFI)

Интерес, в данный момент представляет /dev/sdc2.

Что же на этом разделе?

На /dev/sdc2 устанавливается grub.

https://pendrivelinux.com/boot-multiple-iso-from-usb-via-grub2-using-linux/

Так же, туда кладется squashfs образ + vmlinuz + initrd (собственного производства). grub.cfg настраивается на загрузку и, вроде, все пучком! Но не все…

Некоторые флешки, например моя Transcend ведет себя полностью предсказуемо и все прекрасно работает, но есть и другие «маргинальные» флеш накопители, на которых результат не прогнозируем!

Например, моя прекрасно «бутится» и работает, а вот «маргинальные» могут совсем не загружаться. Даже заставки grub не видно.

Потратил весь вчерашний день и вот что удалось выяснить: если флешку разбить, как указано выше, залить grub, то она пытается грузится. Вернее стартует grub и все. Т.к. больше ни чего на ней нет.

Дальше заливаю на /dev/sdc2 squashfs образ, размером 800мб и… И дальше все не прогназируемо.

Может все будет загружаться. Может не будет. Иногда, странная фигня начинает твориться с файлами. У некоторых искажаются названия, размеры и, вообще, твориться черти что. И все это происходит всего лишь после заливки файла в 800мб!

Т.е. ни чего больше не трогается. Только на /dev/sdc2 посредством cp копируется файл, но этого часто оказывается достаточно, что бы grub отказывался загружаться, на «маргинальных» флешках.

Пробовал сначала залить большие файлы, потом ставить grub.

Вотще!

Результат не прогнозируемый! Может она будет загружаться. Может нет. А может «побиться» squashfs.

При этом, если на маргинальные флешки поредством dd залить iso образ, то с вероятностью в 99% она будет загрузочной и рабочей.

Разумеется, можно пытаться бить флешку на 3 раздела: /dev/sdc1 по прежнему, /dev/sdc2 1G ext4, /dev/sdc3 - fat32 EFI. Но этого делать не хочется!

Почему такая фигня может происходить?

UPD После каждой операции вызываю sync. Т.е. не должно быть пропажи недописанных данных.

Нужно попробовать изменить на монтирование с sync…

 , ,

HighMan
()

Мультизагрузочная флешка.

Форум — Admin

Понимаю, что вопрос обсосан много раз, но мне нужно нечто иное.

Задача написать скрипт, который позволит грузить несколько разных Alt Linux из разных же squashfs образов.

С образинами пока разобрался.

Нужно флешку научит загружаться.

Да есть много мануалов и сам это делал много-много раз, но хочется проще и быстрее, а главное универсальнее.

На Legacy можно наплевать. Кому он сейчас нужен?

Тогда пошел по пути наименьшего сопротивления, по заранее проторенному маршруту.

Готовим загрузочную флешку из того же alt. Монтируем fat (efi) раздел, например в /mnt, и архивируем содержимое.

mount /dev/sdX2 /mnt
cd /mnt
tar -czpf /root/efi.tar.gz .

Получили архив с grub и efi. Теперь осталось залить этот архив на другие флешки в efi разделы, заменить grub.cfg и вот оно счастие!

Ан, не сбылось!

На некоторых флешках сей топорный способ прокатывает на ура. А на некоторых bios efi не видит efi раздел. Просто, вообще, ни чего, касательного этой флешки, не показывает и, соответственно из этого «ни чего» грузиться не хочет.

В чем дело? Где я ошибся?

Расположение efi раздела не регламентировано. Он должен иметь тип 1 (fdisk gpt), быть отформативанным в fat/fat32 и иметь файлы для efi загрузки.

 ,

HighMan
()

Как в initrd смонтировать vfat?

Форум — Admin

При попытке монтирования fat32 раздела идет ругань на отсутсвие cp 866

utf8 is not recommended is IO charset for FAT filesystems, filsystem will be case sensetive!
Codepage cp866 not found

Как победить эту беду?

Мне крайне желательно использовать именно vfat (есть в модулях ядра), так что ext2-4 мне крайне не желательны

 ,

HighMan
()

Подскажите со строкой для sfdisk

Форум — Admin

Здравствуйте, коллеги!

Нужно разбить флешку (16Гб) следующим образом:

gpt

sdc1 Microsoft basic data 11G

sdc2 EFI System (все оставшееся место)

echo -ne 'label:gpt\nsize=11G\n+\n' | sfdisk /dev/sdc

Так он размечает, только фсе партишн делаются Linux filesystem.

Вообще мне нужно сделать автоматическую разбивку флешки любого размера следующим образом: первый раздел NTFS весь объем минус 5G, второй раздел EFI размером 5G.

Все было бы проще, если поставить EFI раздел первым, но в силу ряда причин мне это не подходит.

 

HighMan
()

Как получить доступ к stdin & stdout из /sbin/init или из initrd?

Форум — Admin

Здравствуйте, коллеги!

Пишу 2 скрипта для initrd (/init) и /sbin/init.

Не понимаю, что нужно сделать, что бы, например возпользоваться bash или sh в initrd? Вызываю /bin/bash (/bin/sh) и скрипт останавливается в ожидании ввода, вот только ввести ни чего не получается. Такое впечатление что отсутствует stdin.

Мучения с initrd заметно бы упростились, если бы я мог получить нормальный доступ к bash (он есть). Но справился и без bash, пусть и затратил много больше времени чем хотелось бы.

Система грузится так как мне нужно. Монтируется squashfs, на нее накладывается overlay rw слой и все работает как мне нужно. Ввод-вывод, соответственно, работает.

Теперь появилась идея грубо воздействовать на /sbin/init, что бы загрузить ТОЛЬКО то, что в дальнейшем будет нужно. А нужно будет что бы, в качестве демонов, болталось несколько процессов и жила сеть.

В данный момент только перешел к /sbin/init и воткнул вместо оригинального маленький скрипт на bash, который всего лишь, должен получить строку от пользователя и вывести ее на экран. Чем не функционал для /sbin/init? :)

Но не тут-то было. Ожидаемо, как и в initrd я не могу ни чего ввести. Нет ни какой реакции на клавиши.

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

Подскажите, пожалуйста, как это победить? Как получить нормальный input/output в initrd?

PS В своем замудреном скрипте вызываю who и… пустой вывод. Нужно как-то получить терминал, но как?

#tty
not a tty

 

HighMan
()

nmcli не получается сделать автозапуск vpn соединения

Форум — Admin
#cat /usr/lib/systemd/system/vpn-restore.service
Description=Template Settings Service
#After=network.target
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/sbin/vpn-service
[Install]
WantedBy=multi-user.target

#cat /usr/local/sbin/vpn-service
#!/usr/bin/env bash
/usr/bin/nmcli connection up id myvpn
/usr/sbin/iptables -t nat -A POSTROUTING -s 192.168.17.0/24 -j MASQUERADE

Если сделать на запущенной системе:

systemctl start vpn-restore.service

То все прекрасно запускается.

А вот при рестарте системы - нет.

systemctl status vpn-restore.service 
○ ipt-restore.service - Template Settings Service
     Loaded: loaded (/usr/lib/systemd/system/vpn-restore.service; enabled; preset: disabled)
     Active: inactive (dead) since Wed 2023-11-08 14:27:21 MSK; 36s ago
   Duration: 424ms
    Process: 1156 ExecStart=/usr/local/sbin/vpn-service (code=exited, status=0/SUCCESS)
   Main PID: 1156 (code=exited, status=0/SUCCESS)
        CPU: 31ms

ноя 08 14:27:21 dragonfly systemd[1]: Started ipt-restore.service - Template Settings Service.
ноя 08 14:27:21 dragonfly vpn-service[1158]: Ошибка: сбой активации подключения: The base device for the VPN connection was not active.
ноя 08 14:27:21 dragonfly systemd[1]: ipt-restore.service: Deactivated successfully.

 ,

HighMan
()

python struct непонятки с упаковкой/распаковкой

Форум — Development

Здравствуйте коллеги!

import struct
b = struct.pack(f"@bbhbh", 0, 1, 2, 3, 4)

(signed char, signed char, short, signed char, short)

В моем понимании len(b) должен быть 7, а в понимании python - 8.

b’\x00\x01\x02\x00\x03\x00\x04\x00’

Python зачем-то дополняет нолем.

Как убедить python не своевольничать, а кодировать как ему задано?

 

HighMan
()

Функция на С для python. Нужны советы.

Форум — Development

Здравствуйте, коллеги!

Нужда приперла реализовать некую функцию на С для последующего использования ее в коде на python. Подтягивать ее намерен через ctypes. Хотя тут могут быть варианты. Открыт вашим предложениям.

Функция довольно заковыристая. Вот ее прототип на С

char * func4py(char * data, int data_size, int pos, char * buf, int buf_size);
   char * res = (char *) malloc(buf_size + pos);
   // ...
   return res;

Функция принимает 2 указателя на области памяти, кое-что магичит с данными и результат закидывет в выделенный res, который и возвращает в качестве указателя.

И тут я сталкиваюсь со всей глубиной своего незнания…

В python я бы хотел вызывать эту функцию в виде:

buf3 = func4py(buf1: bytes, pos: int, buf2: bytes)

Ведь python же всегда знает размеры своих объектов!

Но как передать это сокральное знание с С?

Можно, конечно:

buf3 = func4py(buf1: bytes, buf1_size: int = len(buf1), pos: int, buf2: bytes, buf2_size: int = len(buf2))

Жуть какая-то, на мой взгляд. Можно, конечно, сделать обертку в виде питоновской функции, но может есть способ более элегантный?

Еще непонятка с выделением памяти.

Для результирующего буфера мне память приходится выделять, а python ее в дальнейшем сам корректно освободит?

И еще, наверное, стоит как-то генерировать исключение если malloc вернет NULL.

в общем, прошу совета как все это грамотно реализовать?

Ну и вишенка на торте:

Как вернуть не только указатель на буфер, а еще и измененный pos? Типа как tuple или list

PS Я нормально знаю С, так что с реализацией функции ни каких проблем. Но я никогда еще не писал сишные функции для python.

 ,

HighMan
()

C++ SSL чудесатые чудеса

Форум — Development

Здравствуйте, коллеги!

Пишу сетевой сервер с шифрованием TLS (однопоточный через poll). Большей частью получаются, но наткнулся на очень неприятную вещь: Если клиент, внезапно, некорректно рвет соединение, то сервер крашится.

Т.е. при вызове SSL_read или SSL_write все крашится.

Долгие «экскременты» показали интересную штуку: если я насильственно выбиваю клиента во время работы, то на сервер приходит пакет нулевой длинны.

Это я отлавливаю просто читая из сокета через recv с установленным флагом MSG_PEEK, т.е. считать из буфера, но не удалять данные.

recv считывает 0 байт, что является закрытием соединения, а вот SSL_read натакаясь на пакет нулевой длинны крашит программу.

Разумеется, можно сделать обертку типа:

int ssl_recv(SSL * ssl, char * data, int data_size){
    int s = SSL_get_fd(ssl);
    if(recv(s, data, data_size, MSG_PEEK)){
         return SSL_read(ssl, data, data_size);
    }
    return -111;
}

При получении -111 от ssl_recv закрывать соединение на стороне сервера.

Но способ мне кажется несколько кривоватым.

Это же каждый раз, по большому счету, делать целых 2 ресива!

Есть способ узнать количество данных в сетевом буфере без его считывания?

Или, возможно, есть более прямой способ уберечь сервер от крашей при некорректном вылете клиента?

PS

if(SSL_get_state() == TLS_ST_OK){
    retrurn SSL_read(ssl, data, data_size);
}

Не подходит. Этот SSL_get_state() радостно рапортует TLS_ST_OK даже при вылете клиента.

 , ,

HighMan
()

Linux C TLS client/server есть информация?

Форум — Development

Здравствуйте, коллеги!

Понадобилось реализовать шифрованное соединение клиент/сервер.

Разумеется, первым делом в google, но «достоверной» информации пока не нашел.

Есть примеры, но или не полные, или с ошибками.

Когда всю эту тему не очень понимаешь, то хотелось бы рабочие примеры.

Вот к примеру: https://aticleworld.com/ssl-server-client-using-openssl-in-c/

Даже компиллируется! Достижение!

Однако, я так и не нашел где клиент подсасывает сертификаты.

Соединение выходит не защищенным.

Ну и вопрос к гуру: как происходит шифрование? Пакетным или потоковым способом?

Буду очень рад рабочим примерам.

 

HighMan
()

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