LINUX.ORG.RU

Сообщения zzdnx

 

Сборка переносимого PostgreSQL-client

Необходимо собрать PostgreSQL-client для нескольких архитектур.

Я использую DEBIAN 12, подготовка к сборке:

sudo apt-get build-dep postgresql-client-15 ;
LDFLAGS=-static CFLAGS=-static CPPFLAGS=-static CXXFLAGS=-static ;
export LDFLAGS CFLAGS CPPFLAGS CXXFLAGS ;
sudo apt-get source postgresql-client-15 ;
cd p*/ ;
./configure ;
make ;

Для архитектур i368 и x86_64 сборка проходит, но не для ARMHF. В какой-то момент GCC пытается собрать несколько разделяемых библиотек (*.so файлы), в каждой команде присутствуют взаимоисключающие флаги, а именно предуказанный «-static» и необходимый для динамической библиотеки «-shared». Пример одной из таких команд:

gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -static -fPIC -shared -o cyrillic_and_mic.so cyrillic_and_mic.o  -L../../../../../../src/port -L../../../../../../src/common  -static  -Wl,--as-needed   
make[3]: Leaving directory '/home/user/test/postgresql-15-15.7/src/backend/utils/mb/conversion_procs/cyrillic_and_mic'

Решить это в лоб не получается. Изменение «-shared» в файлах сборки приводит к каскаду других ошибок (при компановке).

В качестве решения пробовал кросс-компиляцию - она проходит успешно, но при настройке я вынужден отключить ReadLine и ZLib ( чего не хочется делать по ряду причин).

Подскажите, как собрать «static»-версию или как добавить ReadLine и ZLib в кросс-компилятор, чтобы собрать из i368 или x86_64.

Спасибо!

 , , , ,

zzdnx
()

Сборка автономного htpasswd

Доброго времени суток. Не уверен, что разместил вопрос в правильном форуме; если это так - заранее извиняюсь.

Нужно собрать полностью автономную версию htpasswd под различные архитектуры (amd64, armhf, arm64 …).

Пробовал сделать «в лоб»: скачал актуальные исходники (включая APR), далее configure с параметрами static и сборка, однако, ldd показывает кучу зависимостей.

Поиски в сети не дали ничего определённого за исключением следующей статьи: https://forums.informaction.com/viewtopic.php?t=21790 - благодаря ей удалось сократить выхлоп ldd:

htpasswd:
	linux-vdso.so.1 (0x00007ffc9abdc000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8cf49ac000)
	libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f8cf4971000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8cf477f000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f8cf4a26000)

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

Подскажите, как собрать полностью автономную версию?

 , , , ,

zzdnx
()

Выхлоп SED`а сразу в TTY.

Простой конвейер «Утилита | SED» выводит сразу все строки.

Подскажите конструкцию BASH, чтобы реализовать редактирование «на лету».

Пример:

Когда утилита отдаёт новую строку - SED обрабатывает её СРАЗУ, и отправляет результат на StdOut, после чего SED ждёт следующую строку от утилиты.

 ,

zzdnx
()

Сборка с VFP на RPi zero

Использую последнюю версию Kali на RPi zero w, пытаюсь компилировать код и получаю следующую ошибку:

/usr/include/arm-linux-gnueabi/gnu/stubs.h:10:11: fatal error: gnu/stubs-hard.h: No such file or directory
   10 | # include <gnu/stubs-hard.h>
      |           ^~~~~~~~~~~~~~~~~~

Требуемый файл принадлежит пакету libc-dev и отсутствует в системе после его установки.

/usr/include/arm-linux-gnueabi/gnu/stubs.h ссылается на файлы gnu/stubs-soft.h и gnu/stubs-hard.h, но из пары существует только «софт».

В сети нашёл 3 решения:

[*] Сделать линк файла stubs-soft.h на stubs-hard.h

[*] Нашёл текст файла stubs-hard.h (содержимое отличается от файла «софт»)

[*] Установка libc=2.33

Все решения позволяют сделать файлы *.o , но линковщик не может собрать в конечный файл.

Ошибки такого вида:

/usr/bin/ld: error: rds.o uses VFP register arguments, XXX does not failed to merge target specific data of file rds.o

Куда копать? Ранее этот код с успехом собирался на RPi Zero.

 

zzdnx
()

настроить автоматическое монтирование в Ubuntu focal

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

Из LiveCD используя debootstrap устанавливаю ОС Ubuntu focal, далее в chroot устанавливаю все необходимые пакеты KODI.

Установка KODI завершена, всё работает, но при подключении USB-носителя устройство не монтируется автоматически (как на Desktop-версиях Linux).

Команда GIO монтирует успешно, но это требует CLI и менее удобно.

Как настроить автоматическое монтирование в стиле Desktop Linux?

 , ,

zzdnx
()

Захват звука с HDMI на RaspberryPi в LinreElec.

На ПК делается достаточно просто:

# Файл out.raw может быть FIFO.
# Захватить звук в файл:
    pacat --record -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor > out.raw 

# Воспроизвести файл с захваченным звуком:
    play -t raw -r 44.1k -e signed-integer -b 16 -c 2 out.raw

# Конвертировать файл с захваченным звуком в формат wav:
    sox -t raw -r 44100 -e signed-integer -L -b 16 -c 2 out.raw out.wav

Сейчас нужно сделать что-то подобное на моём LibreElec (запущен на Raspberry Pi).

Очень важно захватить то, что воспроизводится на HDMI (если вообще возможно - Line-in) и передать звуковые данные, например, через FIFO или пайп в конвеер и/или по SSH.

Найти устройство через pactl и pacmd не получилось.

Попытки захватить звук определённого клиента (пробовал по аналогии с этим ) так же не получилось. Клиент определяется так:

Client #1
	Driver: protocol-native.c
	Owner Module: 0
	Properties:
		application.name = "KodiDriver"
		native-protocol.peer = "UNIX socket client"
		native-protocol.version = "33"
		application.process.id = "786"
		application.process.user = "root"
		application.process.host = "Kodi"
		application.process.binary = "kodi.bin"
		application.language = "C"
		window.x11.display = ":0.0"
		application.process.machine_id = "70f5b9605a53e61719a3a9c55caf6b36"

Подскажите, как правильно захватить звук.

 , , ,

zzdnx
()

Не получается статическия компиляция

Иногда требуются статичные исполняемые файлы. Недавно мне потребовалось собрать в статическом исполнении утилиты для манипуляций с файлами метаданных GVFS.

Источник: https://www.linuxquestions.org/questions/linux-software-2/how-to-permanently-get-rid-of-this-horrible-gvfs-metadata-beast-4175530495/#post5978968

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

Научите, как правильно сделать сборку статичных исполняемых файлов используя debuild (в данном случае для GVFS, однако, интересен универсальный метод, который подойдёт для всех исходников).

 , , ,

zzdnx
()

Где хранит настройки?

Использую Mint с Cinnamon.

Задача стоит так:

На проникновение тестируется некая WiFi-сеть с именем XXX. При подключении необходимо подменить свой MAC-адрес адресом любого из клиентов этой WiFi-сети.

Последовательность действий:

1. Переключение бортового WiFi-адаптера в режим монитора: успешно.

2. Ловля клиентских MAC-адресов: успешно.

3. Выгнать клиента по MAC-адресу: успешно.

4. Переключение бортового WiFi-адаптера в обычный режим: успешно.

Проблема:

Подмена MAC-адреса бортового WiFi-адаптера выполнялась множеством методов, но как только я запускаю NetworkManager - беспроводная сеть передёргивается и MAC сразу переписывается на реальный.

Для настройки сетевых соединений апплет NetworkManager`а на панели задач имеет два разных интерфейса:

[Сетевые соединения] - параметры берутся из файлов в /etc/NetworkManager/system-connections/. Однако, по какой-то причине эти параметры считаются менее приоритетными, так что правка файлов конфигурации в system-connections результата не даст.

[Параметры сети] - более приоритетная настройка, которая сохраняется неизвестно куда. Предположительно, в gsettings, но поиск не дал положительных результатов.

Подскажите, куда копать?

 , , ,

zzdnx
()

Распараллеливание брутфорса с помощью OpenMP

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

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

int brute ( u8 brute_key[0x10], char *target_dat, char *target_key )
{
  // (TODO) Не хочу читать одн и тот же кусок файла при каждом проходе:
  static u8 buffer_enc_default[0x40];   // Будет хранить оригинальное значение
  memset (buffer_enc_default, 0, 0x40); // Очистка выделенной памяти

  FILE *fp=fopen(target_dat,"rb");
  fseek(fp,0x40,SEEK_SET);
  fread(buffer_enc_default,1,0x40,fp);  // Чтение оригинального значения
  fclose(fp);

  static int i1,i2,i3,i4,i5,i6,i7,i8; // Перебор младших 8 байт (i = индекс)
  i1=i2=i3=i4=i5=i6=i7=i8=0;
  static int flag = TRUE; // Этот флаг позволит прыгнуть на стартовую позицию

  for(i1=0;i1<=0xFF;i1++){
    for(i2=0;i2<=0xFF;i2++){
      for(i3=0;i3<=0xFF;i3++){
        for(i4=0;i4<=0xFF;i4++){
          for(i5=0;i5<=0xFF;i5++){
            for(i6=0;i6<=0xFF;i6++){
              for(i7=0;i7<=0xFF;i7++){
                // #prigmi omp pirillel for // <=== FIXME
                for(i8=0;i8<=0xFF;i8++){

                  if(flag){ // Переход к стартовой позиции:
                    i1 = brute_key[0x08];
                    i2 = brute_key[0x09];
                    i3 = brute_key[0x0A];
                    i4 = brute_key[0x0B];
                    i5 = brute_key[0x0C];
                    i6 = brute_key[0x0D];
                    i7 = brute_key[0x0E];
                    i8 = brute_key[0x0F];
                    flag = FALSE;
                  }

                  // Перенос текущего позиции в brute_key:
                  brute_key[0x08] = (char)i1;
                  brute_key[0x09] = (char)i2;
                  brute_key[0x0A] = (char)i3;
                  brute_key[0x0B] = (char)i4;
                  brute_key[0x0C] = (char)i5;
                  brute_key[0x0D] = (char)i6;
                  brute_key[0x0E] = (char)i7;
                  brute_key[0x0F] = (char)i8;

                  // Объявление переменных:
                  u8 buffer[0x40];
                  u8 zero_iv[0x10];
                  u8 buffer_enc[0x40];
                  u8 buffer_dec[0x40];
                  u8 key[0x10];
                  u8 iv[0x10];

                  // Заполнение переменных нолями:
                  memset (buffer, 0, 0x40);
                  memset (buffer_enc, 0, 0x40);
                  memset (buffer_dec, 0, 0x40);
                  memset (zero_iv, 0, 0x10);

                  // Магия:
                  memcpy (buffer, brute_key, 0x10);
                  vtrm_encrypt (3, buffer, zero_iv);
                  memcpy (key, buffer, 0x10);
                  memcpy (iv, buffer + 0x10, 0x10);
                  memcpy (buffer_enc, buffer_enc_default, 0x40); // <=== TODO
                  aes128cbc (key, iv, buffer_enc, 0x40, buffer_dec);

                  // Проверка результата:
                  if(memcmp(buffer_dec+0x30,zero_iv,0x10)==0){
                    printf("Поздравляю!\n");
                    FILE *fx= fopen(target_key,"wb");
                    fwrite(brute_key,1,0x10,fx);
                    fclose(fx);
                    exit (1) ; //return 0;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return -1;
}

 , ,

zzdnx
()

Проброс пользовательских функций при ssh-подключении.

Вариант «ssh -tt» не предлагать.

Дано: управляющий сервер на Ubuntu (основной шелл - bash) и доступные ему по ssh ведомые сервера (с таким-же основным шеллом).

Обязательное условие: на ведомом сервере не должно создаваться временных файлов.

Задача при ssh-подключении с управляющего сервера к ведомому: проброс локально определённых функций (импортированных сразу из нескольких rc-файлов) ИЛИ выполнение на стороне ведомого сервера встроенного (в команду подключения) документа с последующей передачей управления основному шеллу.

 , , ,

zzdnx
()

Загрузка BIOS, GPT, GRUB4DOS, MEMDISK, DUET и SHELLx64.EFI

Есть необходимость тестировать EFI-скрипты и утилиты на машине с обычным BIOS.

Сейчас это делается с помощью пары загрузочных флэшек:

1. MBR -> GRUB4DOS -> MEMDISK -> DUET (floppy)
2. GPT -> ESP -> EFI/BOOT/bootx64.efi (он же Shellx64.efi) -> startup.nsh

Я видел как на машине с обычным BIOS с GPT-диска через CLOVER загружается OS X, а это значит, что можно сделать хакнутую GPT-флэшку, которая будет загрузочной на BIOS-машинах. Долго рылся в сети, но готового ответа пока не нашёл. Делать ESP c CLOVER не хочу, мне хватит запуска GRUB4DOS/syslinux. Помогите советом, как сделать из пары одну загрузочную флэшку.

 , ,

zzdnx
()

Автоматизация LiveCD

Хочу передать из загрузчика через параметры ядра LiveCD команду на монтирование в загружаемую ОС.

Сделал загрузочную флэшку из LiveCD-сборки Kodi (Helix x64), однако, в Live-режиме не сохранялись конфиги. Делать casper-rw не хотелось - мне нужно чтобы папка ~/.kodi жила на NTFS.

Решил проблему так:

sudo mount --bind /cdrom/KodiOS/kodi_config ~/.kodi
И это работает. Нужно только: выйти из Kodi, выполнить монтирование и войти в Kodi.

Теперь новая проблема - нужно передать эту команду из загрузчика.

Я знаю, что так умеет ядро в сборке Clonzilla, но Kodi с этим ядром не запускается.

Хочу узнать: имеются-ли способы как-либо автоматизировать монтирование каталога?

 ,

zzdnx
()

Сборка wget static с openssl под MAC

Работаю в МАС OS X. Есть рабочий curl, но мне по многим причинам удобнее работать с wget.

Долго гуглил. Смог найти готовый бинарник wget для MAC, но он без поддержки openssl (не будет работать по https). В сети полно мануалов по установке через порты и брю, но я не хочу ставить x-code. Помогите в linux mint собрать статически wget с поддержкой openssl под MAC.

Для linux всё это просто:

apt-get build-deb wget
apt-get source wget
cd wget
./configure LDFLAGS="-static" --with-ssl
make
А как скомпилировать под другую архитектуру?

 , , ,

zzdnx
()

Выбор экрана из терминала или при загрузке

Устройство: IRU Ergo 101. Дистрибутив: Linux Mint 18.2. Проблема: при загрузке ОС определяет и включает 2 экрана (из которых существует только один). Видеокарточки нету, так что рабочий стол адски тормозит и на выключение лишнего монитора уходит минут 15-20.

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

Код:

#!/bin/bash
xrandr -d :0 --output VGA1  --output LVDS1 --off
Выхлоп:
$ sudo /isodevice/display.sh
xrandr: Configure crtc 0 failed
Посоветуйте, пожалуйста, как выполнить эту команду из TTY1. Так же было-бы полезно узнать, можно-ли выбрать дисплей через параметры ядра на этапе меню GRUB2 (я загружаюсь с флэшки)

 , , ,

zzdnx
()

Библиотека функций для GRUB2

GRUB2 поддерживает написание функций и я этим активно пользуюсь. Свои функции я писал в отдельный конфиг и был счастлив.

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

В конце концов меня достала необходмость править список импорта каждый раз и пришла идея импортировать все файлы из каталога.

Для этого я написал такой код (import_all.txt):

for core in (hd0,1)/my_functions/library/* ; do
	source ${core}
	# DBG MSG:
	echo "sorce ${core}"
done
В основном конфиге прописал «source (hd0,1)/my_functions/import_all.txt», но это не заработало.

Я попробовал запускать source вручную и вот что заметил:

При первом запуске я вижу сообщение «source (hd0,1)/my_functions/library/*» и функции, естесственно, не импортируются.

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

Может кто-нибудь объяснить мне почему при первом выполнении for отрабатывает не корректно и как можно это поправить/обойти?

ОТВЕТ:

https://wiki.archlinux.org/index.php/GRUB_(Русский)#Arch_Linux_ISO

insmod regexp # для шаблонов * в именах файлов

 ,

zzdnx
()

Дефрагментация в ext2/3/4

Нужна. Нужна и точка, хотя, нет, три восклицательных знака!!!

Нужна не ядру LINUX и не ОС на этом ядре, а аппаратному обеспечению, которое считывает файл с флэшки, на которой ExtFS.

Размер флэшки ограничен, аппарат привязан к UUID ФС. В логе fsck.ext3 я могу посмотреть процент non-contiguous файлов, но после многократных fsck.ext3 процент не меняется. Чем дефрагментировать-то?

 , , , ,

zzdnx
()

Периодически сохранять в файл переменные из цикла

Есть маленький архив и консольная программа-распаковщик, которая требует пароль: 16-байт в виде HEX-последовательности.

Ранее я не сталкивался с подбором паролей и не умею пользоваться спецсофтом. Решил написать перебор на BASH`е.

Перебор такого пароля займёт очень много времени и у меня нет гарантий что исполняющий хост будет иметь столь долгий uptime.

Я хочу добавить периодический (раз в час или сутки) сброс переменной из цикла в файл, чтобы при падении перебора можно было начинать не с самого начала, но не пойму как это сделать. Перезаписывать файл с переменной при каждом прохождении цикла - не вариант, нужно делать записи раз в час/сутки/неделю...

Мой код:

#!/bin/bash
var=0000000000000000

# Продолжаем перебор пока не найдём правильное значение ${var}.
while true ; do
  echo -en "\rvar: ${var}";
# test ${var} && echo ${var}>file && break
  var=`printf "%016X\n" $((0x${var}+1))`;
done

Если Вы сможете дать рекомендации по спецсофту - буду очень рад примерам запуска. Особенно, если этот софт поддерживает «маску» (первая половина пароля может быть вычислена с точностью до 200 вариантов)

 

zzdnx
()

Ищу раздел, в который можно будет задать вопрос

Задача: написать брут (желательно на GPU).

Есть архив и консольная программа-читалка к нему. Архив шифрован, длинна ключа - 16 байт. При при правильном ключе программа-читалка выдаст на stdout много строк, а не одну. Есть исходники читалки (если это, конечно, может помочь).

 ,

zzdnx
()

GRUB2 case и array

Согласно мануалу по адресу https://www.gnu.org/software/grub/manual/html_node/Shell_002dlike-scripting.html в GRUB2 зарезервировано слово case.

Первый вопрос: не могу подобрать работающий синтаксис. В интернете конструкций с case не встретил... Полно скриптов генерации конфига на bash, но они не в счёт, так как меня интересует case внутри конфигурации GRUB2... На сайте https://lists.gnu.org есть такой же вопрос, и там он без ответа.

Второй вопрос: использование переменных-массивов. Возможно-ли это внутри GRUB2? Bash-подобный синтаксис не работает, примеров не нашёл.

 , ,

zzdnx
()

Сломалось монтирование Snasa Clip

Snasa Clip 8GB нормально работал до встречи с MAC_OX_X. Оказалось, что автоопределение подключает его к MAC в режиме MTP, который работает криво. Решилась проблема переключением режима USB с автоопределения на MSC. Потом я подключил плеер к Linux Mint 18 и началось:

1. Thunar видит съёмный диск Snasa Clip 8GB, но не может его примонтировать (до этого всё работало).
2. В режиме MTP Linux Mint 18 видит плеер, но не даёт с ним работать как с флэшкой
3. В режиме автоопределения плеер определяется как 2 диска: sdb и sdc. Оба !БЕЗ партиций!, при этом sdb имеет ФС Fat32 и метку "Snasa Clip 8GB").
4. GParted падает с сообщением "Segmentation fault"
5. Дисковая утилита видит 2 диска. Примонтировать не может.
6. WinXP и MAC видят плеер нормально.
7. Я могу вручную примонтировать sdb (который виден как Fat32), но Thunar (который до этого всегда всё монтировал нормально) сейчас бесполезен.
Подскажите, пожалуйста, куда копать?

 , ,

zzdnx
()

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