Архив метки: linux

Решено! Rust — не собирается под musl — ругаeтся на openssl в Linux.

Если вы решили использовать в своем проекте то, что нужнается в Openssl — будьте готовы что можете столкнуться с кучей ошибок при сборке, особенно если собираете под стандартную реализацию libc в musl.

При сборке cargo вам вывалит что -то подобное:

OPENSSL_DIR unset
  cargo:rerun-if-env-changed=OPENSSL_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_x86_64-unknown-linux-musl
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_x86_64_unknown_linux_musl
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-musl
  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_musl
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-musl
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_musl
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
  run pkg_config fail: pkg-config has not been configured to support cross-compilation.

  Install a sysroot for the target platform and configure it via
  PKG_CONFIG_SYSROOT_DIR and PKG_CONFIG_PATH, or install a
  cross-compiling wrapper for pkg-config and set it via
  PKG_CONFIG environment variable.

  --- stderr
  thread 'main' panicked at /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/openssl-sys-0.9.102/build/find_normal.rs:190:5:


  Could not find directory of OpenSSL installation, and this `-sys` crate cannot
  proceed without this knowledge. If OpenSSL is installed and this crate had
  trouble finding it,  you can set the `OPENSSL_DIR` environment variable for the
  compilation process.

  Make sure you also have the development packages of openssl installed.
  For example, `libssl-dev` on Ubuntu or `openssl-devel` on Fedora.

  If you're in a situation where you think the directory *should* be found
  automatically, please open a bug at https://github.com/sfackler/rust-openssl
  and include information about your system as well as this message.

  $HOST = x86_64-unknown-linux-gnu
  $TARGET = x86_64-unknown-linux-musl
  openssl-sys = 0.9.102

У меня такая фигня пошла, когда я решил добавить Sentry в свой проект.

Решение следующее:

Выполняем команды:

sudo apt-get update
sudo apt-get install -y musl-dev musl-tools linux-headers-$(uname -r)

sudo ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/x86_64-linux-musl/asm && ln -s /usr/include/asm-generic /usr/include/x86_64-linux-musl/asm-generic && ln -s /usr/include/linux /usr/include/x86_64-linux-musl/linux
sudo mkdir /musl
wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1f.tar.gz
tar zxf OpenSSL_1_1_1f.tar.gz 
cd openssl-OpenSSL_1_1_1f/
CC="musl-gcc -fPIE -pie -static -idirafter /usr/include/ -idirafter /usr/include/x86_64-linux-gnu/" ./Configure no-shared no-async --prefix=/musl --openssldir=/musl/ssl linux-x86_64
make depend
make -j$(nproc)
sudo make install

Экспортируем переменные окружения:
export PKG_CONFIG_ALLOW_CROSS=1
export OPENSSL_STATIC=true
export OPENSSL_DIR=/musl

Пробуем выполнять сборку:
cargo build --release --target=x86_64-unknown-linux-musl

RabbitMQ — отправка и чтение очереди через curl

Данный запрос можно делать даже из bash в Linux так как используются стандартные инструменты.

Все необходимое (обменник, очереди) можно создать через WEB-интерфейс RabbitMQ Managment. Предполагаем , что они уже созданы.

Отправляем сообщение в очередь.

В примере ниже :

vhost — имя хоста (exchanges)

delivery_mode 2 — записываем в режиме когда данные очереди сохраняются даже после падения сервера (сохраняются на диск)

routing_key — имя нашей очереди

payload — в данном случае строка , которую мы передаем в сообщении

%2F/amq.default — имя обменника внутри хоста

curl -s -u user:password -H "Accept: application/json" -H "Content-Type:application/json" -X POST -d'{
    "vhost": "Test_Virtual_Host",
    "properties": {
        "delivery_mode": 2,
        "headers": {}
    },
    "routing_key": "testqueues",
    "payload":"/dfgdfgfd/dfgdfg/dfgdfgfdg.dat",
    "headers": {},
    "props": {},
    "payload_encoding": "string"
}' http://127.0.0.1:15672/api/exchanges/%2F/amq.default/publish

Читаем сообщение.

curl -s -u user:password -H "content-type:application/json" -X POST -d'{
"count":2,
"ackmode":"ack_requeue_false",
"encoding":"auto",
"truncate":5000
}' http://127.0.0.1:15672/api/queues/%2F/testqueues/get

Удалить обменник через curl.

curl -s -u admin:1234567890 -X DELETE http://127.0.0.1:15672/api/vhosts/Test_Virtual_Host

Linux Kali — подключаемся через RDP

Для включения RDP в Kali Linux нужно установить сервер XRDP далее включить автозагрузку

Устанавливаем cервер XRDP:

apt-get install xrdp

Запускаем и добавляем в атозапуск xrdp:

service xrdp start
service xrdp-sesman start
update-rc.d xrdp enable

Для более менее комфортной работы поменяй в настройках RDP качество изображения на 16bit и сделайте однотонную заставку на рабочий стол.

бака за компом

PHP — запрос-ответ через Curl с сервера Linux

С сервера передаем POST-запрос и получает результат- ответ через стандартную утилиту curl в Linux:

curl -so result.txt http://mainserver.ru/test.php -d"first=Dima&last=Vova"

Ключи в curl : s — тихий режим, без вывода дополнительной информации при выполнении
o — сохранить результат в файл

На стороне принимающего сервера PHP-скрипт:

<?php
$test1 = htmlspecialchars($_POST["first"]);
$test2 = htmlspecialchars($_POST["last"]);
$time = date('U');
echo "{\"time\":$time,\"first\":$test1,\"last\":$test2}\n";

В результате на сервере с которого делаем запрос, получаем файл с результатом:
{«time»:1579160382,»first»:Dima,»last»:Vova}

Если grep:argument list too long — ищем данные в несколько потоков

Бывает, если у вас большое количество файлов и вы хотите использовать для этого стандартный grep (например: grep -h pattern ./*), то вполне можете получить сообщение : argument list too long .

Чтобы избежать этого, можно использовать find и для ускорения процесса (железо вам позволяет это делать), то можно распаралелить потоки и воспользоваться следующей командной:

find . -type f -print0 | xargs -n1000 -r0P3 grep pattern

Где:

-n1000 — одновременно максимум 1000 файлов

P3 — используем паралельно 3 процессора

pattern — ваша строка для поиска