NixTux https://nixtux.ru На этом сайте делимся опытом, скриптами и советами в Linux и Свободных программах Wed, 06 Nov 2019 17:18:41 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.2.4 Grub2 2.04 с поддержкой сжатия zstd на BTRFS для Ubuntu 18.04 и 19.04 https://nixtux.ru/956 https://nixtux.ru/956#respond Wed, 06 Nov 2019 13:37:55 +0000 https://nixtux.ru/?p=956 Читать далее Grub2 2.04 с поддержкой сжатия zstd на BTRFS для Ubuntu 18.04 и 19.04]]> В репозиториях Ubuntu < 19.10 Grub2 2.02, в котором нет поддержки загрузки с корневого раздела BTRFS, сжатого с помощью ZSTD. Собрал Grub2 2.04 из Ubuntu 19.10 для 18.04 и 19.04, в котором есть поддержка загрузки с корневого раздела в btrfs, сжатом zstd.

https://launchpad.net/~mikhailnov/+archive/ubuntu/grub2

Для установки:

sudo add-apt-repository ppa:mikhailnov/grub2
sudo apt dist-upgrade

Для пересборки делал так:
backportpackage -u ppa:mikhailnov/grub2 -s eoan grub2 -d bionic --suffix=~bionic1

]]>
https://nixtux.ru/956/feed 0
Скачиваем альбом или все треки исполнителя с Яндекс Музыки бесплатно https://nixtux.ru/947 https://nixtux.ru/947#respond Wed, 04 Sep 2019 17:19:15 +0000 https://nixtux.ru/?p=947 Читать далее Скачиваем альбом или все треки исполнителя с Яндекс Музыки бесплатно]]> Программа youtube-dl умеет скачивать в т.ч. и с Яндекс.Музыки.

Пример команды для запуска скачивания из консоли:
youtube-dl https://music.yandex.ru/album/5579584/track/41083763
Также ссылку можно вставить в графический интерфейс для youtube-dl — Youtube-DL-GUI

Но на данный момент youtube-dl не умеет скачивать весь альбом целиком. Но можно довольно легко скачать либо весь альбом, либо все треки исполнителя. Для этого открываем список треков в браузере Chromium/Chrome, нажимаем правой кнопкой мыши на название трека, нажимаем: «Просмотреть код» (Ctrl+Shift+I), см. скриншот:

Далее в открывшейся справа панели находим такой тег (код), при наведении мышью на который подсвечивается синим область страницы с треками. Нажимаем на этот кусок кода правой мышью, выбираем: Copy -> Copy element (см. скриншот)

Далее открываем любой текстовый редактор (Блокнот, Geany), вставляем скопированное и сохраняем под любым именем в удобном месте.

Теперь запускаем такой sh-скрипт в консоли ОС:
for i in $(cat "/tmp/m.txt" | sed -e 's,https://,\nhttps://,g' -e 's,</a>,\n,g' -e 's,\"><div class,\n,g' | grep ^https://music.yandex.ru | grep '/track/' ); do youtube-dl $i ; done

/tmp/m.txt замените на путь к файлу, в который вы сохранили скопированный код.Это составит список ссылок на треки и скачает их все.

]]>
https://nixtux.ru/947/feed 0
Замена домена в базе данных WordPress https://nixtux.ru/941 https://nixtux.ru/941#respond Mon, 26 Aug 2019 11:07:39 +0000 https://nixtux.ru/?p=941 Читать далее Замена домена в базе данных WordPress]]> В общем при смене домена в WordPress-ах с Beaver Builder-ом надо заменять домен в базе данных не просто как замену текста, а специальными утилитами, которые умеют заменять «сериализованные данные» так, чтобы они не ломались
В wp-cli это есть

Пример:
wp search-replace 'xn--d1amkdfpf.xn--80agbsneq0b4h.xn--p1ai' 'product.dumalogiya.ru' --verbose --dry-run — посчитать, сколько замен будет сделано, ничего не заменяя.
wp search-replace 'xn--d1amkdfpf.xn--80agbsneq0b4h.xn--p1ai' 'product.dumalogiya.ru' --verbose — произвести замены.

]]>
https://nixtux.ru/941/feed 0
Установка ОС на физический диск в виртуальной машине https://nixtux.ru/935 https://nixtux.ru/935#respond Sun, 25 Aug 2019 11:36:14 +0000 https://nixtux.ru/?p=935 Читать далее Установка ОС на физический диск в виртуальной машине]]> Подключил новый SSD-диск к компьютеру (в SATA). Встал вопрос: как бы поставить на него ОС из-под виртуальной машины? Вопрос решился просто:

— в virt-manager создал виртуальную машину
— вручную отредактировал файл /etc/libvirt/qemu/имя_машины.xml, в него перед </devices> добавил проброс диска:

<disk type='block' device='disk'>
  <driver name='qemu' type='raw'/>
  <source dev='/dev/sda'/>
  <target dev='sda' bus='virtio'/>
</disk>

Обратите внимание, что указывать диски как /dev/sdx — не лучшая идея, т.к. от перезагрузки к перезагрузке буква может меняться, лучше всего указать, например, так: /dev/disk/by-id/wwn-0x5e83a971fbb84a60, но я поставлю ОС и удалю виртуальную машину, поэтому некритично.
— подключил к виртуальной машине образ диска, поставил ОС

Источник решения

]]>
https://nixtux.ru/935/feed 0
Как в GNU/Linux работает резолвинг DNS? Как система превращает имя DNS в IP-адрес? https://nixtux.ru/932 https://nixtux.ru/932#respond Sun, 11 Aug 2019 19:49:26 +0000 https://nixtux.ru/?p=932 Читать далее Как в GNU/Linux работает резолвинг DNS? Как система превращает имя DNS в IP-адрес?]]> Почти все программы слинкованы с системной glibc (libc.so.6). Когда в glibc поступает запрос на резолвинг имени хоста, поочередно опрашиваются плагины NSS (Name Switch Service), прописанные в /etc/nsswitch.conf в строке hosts. В случае

rosa-2016 ~ # cat /etc/nsswitch.conf | grep ^hosts
hosts:     mdns4_minimal files nis dns wins myhostname mymachines mdns4 
rosa-2016 ~ #

сначала будет попытка разрешить имя через Avahi по протоколу multicast DNS (mdns4_minimal), затем через файл /etc/hosts (files), затем через nis (устаревшая штука), затем, собственно, сам dns. Кто первый ответит, тот ответ и принимается.

]]>
https://nixtux.ru/932/feed 0
Отладка dlopen (динамической подгрузки) библиотек в Linux/UNIX https://nixtux.ru/926 https://nixtux.ru/926#respond Sat, 20 Jul 2019 05:39:07 +0000 https://nixtux.ru/?p=926 Читать далее Отладка dlopen (динамической подгрузки) библиотек в Linux/UNIX]]> Понадобилось узнать, почему FreeIPA выдавала ошибку загрузки библиотеки, не выдавая подробный текст ошибки. Этот способ позволяет выполнять dlopen() библиотек и смотреть, успешно ли прошла операция, и видеть ошибки.
Используется Python CFFI.

[root@rosa-ipa3 ~]# python
Python 2.7.15 (default, Jun  6 2019, 05:12:57) 
[GCC 5.5.0 20171010 (ROSA)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from cffi import FFI
>>> ffi = FFI()
>>> ffi.dlopen("/usr/lib64/softhsm/libsofthsm2.so")
<cffi.api.FFILibrary_/usr/lib64/softhsm/libsofthsm2.so object at 0x7ff7b5ae7650>
>>> 

Выше пример успешного dlopen библиотеки. А вот пример с ошибкой:

>>> ffi.dlopen("/usr/lib64/softhsm/libsofthsm2.so")
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib64/python2.7/site-packages/cffi/api.py", line 141, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "/usr/lib64/python2.7/site-packages/cffi/api.py", line 795, in _make_ffi_library
    backendlib = _load_backend_lib(backend, libname, flags)
  File "/usr/lib64/python2.7/site-packages/cffi/api.py", line 790, in _load_backend_lib
    raise OSError(msg)
OSError: cannot load library /usr/lib64/softhsm/libsofthsm2.so: /usr/lib64/softhsm/libsofthsm2.so: undefined symbol: EC_KEY_free.  Additionally, ctypes.util.find_library() did not manage to locate a library called '/usr/lib64/softhsm/libsofthsm2.so'

Эту ошибку устранил принудительной линковкой с libcrypto (это часть OpenSSL).

]]>
https://nixtux.ru/926/feed 0
Пример использования valgrind для отладки в т.ч. зависания программы https://nixtux.ru/922 https://nixtux.ru/922#respond Fri, 19 Jul 2019 20:24:56 +0000 https://nixtux.ru/?p=922 Читать далее Пример использования valgrind для отладки в т.ч. зависания программы]]> named-pkcs11 при запуске зависает.

strace named-pkcs11 последней строкой показывает: «read(6,». Запустим через valgrind:

[root@rosa-ipa3 ~]# valgrind --leak-check=yes --undef-value-errors=no /usr/sbin/named-pkcs11
==595== Memcheck, a memory error detector
==595== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==595== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==595== Command: /usr/sbin/named-pkcs11
==595== 

==595== 
==595== Process terminating with default action of signal 2 (SIGINT)
==595==    at 0x6185D00: __read_nocancel (in /lib64/libpthread-2.24.so)
==595==    by 0x198495: read (unistd.h:44)
==595==    by 0x198495: ns_os_daemonize (os.c:468)
==595==    by 0x12EF5A: setup (main.c:1062)
==595==    by 0x12EF5A: main (main.c:1480)
==595== 
==595== HEAP SUMMARY:
==595==     in use at exit: 324,251 bytes in 25 blocks
==595==   total heap usage: 58 allocs, 33 frees, 332,571 bytes allocated
==595== 
==595== LEAK SUMMARY:
==595==    definitely lost: 0 bytes in 0 blocks
==595==    indirectly lost: 0 bytes in 0 blocks
==595==      possibly lost: 0 bytes in 0 blocks
==595==    still reachable: 324,251 bytes in 25 blocks
==595==         suppressed: 0 bytes in 0 blocks
==595== Reachable blocks (those to which a pointer was found) are not shown.
==595== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==595== 
==595== For counts of detected and suppressed errors, rerun with: -v
==595== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

В момент зависания named-pkcs11, запущенного через valgrind, нажимаем Ctrl+C.

[root@rosa-ipa3 ~]# rpm -ql bind-debuginfo | grep main.c
/usr/src/debug/bind-9.11.5-P1/bin/named-pkcs11/main.c
/usr/src/debug/bind-9.11.5-P1/bin/named-sdb/main.c
/usr/src/debug/bind-9.11.5-P1/bin/named/main.c
[root@rosa-ipa3 ~]# cat /usr/src/debug/bind-9.11.5-P1/bin/named-pkcs11/main.c | head -n 1480 | tail 
					     ns_g_conffile, ns_g_chrootdir);
	}

	result = isc_mem_create(0, 0, &ns_g_mctx);
	if (result != ISC_R_SUCCESS)
		ns_main_earlyfatal("isc_mem_create() failed: %s",
				   isc_result_totext(result));
	isc_mem_setname(ns_g_mctx, "main", NULL);

	setup();
[root@rosa-ipa3 ~]# cat /usr/src/debug/bind-9.11.5-P1/bin/named-pkcs11/main.c | head -n 1480 | tail -n 1
	setup();
[root@rosa-ipa3 ~]# cat /usr/src/debug/bind-9.11.5-P1/bin/named-pkcs11/main.c | head -n 1062 | tail -n 1
		ns_os_daemonize();
[root@rosa-ipa3 ~]# rpm -ql bind-debuginfo | grep os.c
/usr/src/debug/bind-9.11.5-P1/bin/confgen/unix/os.c
/usr/src/debug/bind-9.11.5-P1/bin/named-pkcs11/unix/os.c
/usr/src/debug/bind-9.11.5-P1/bin/named-sdb/unix/os.c
/usr/src/debug/bind-9.11.5-P1/bin/named/unix/os.c
/usr/src/debug/bind-9.11.5-P1/export-libs/lib/isc/unix/os.c
/usr/src/debug/bind-9.11.5-P1/lib/isc-pkcs11/unix/os.c
/usr/src/debug/bind-9.11.5-P1/lib/isc/unix/os.c
[root@rosa-ipa3 ~]# cat /usr/src/debug/bind-9.11.5-P1/bin/named-pkcs11/unix/os.c | head -n 468 | tail -n 1
			n = read(dfd[0], &buf, 1);
[root@rosa-ipa3 ~]# cat /usr/src/debug/bind-9.11.5-P1/bin/named-pkcs11/unix/os.c | head -n 468 | tail -n 1
[root@rosa-ipa3 ~]# rpm -ql bind-debuginfo | grep os.c
[root@rosa-ipa3 ~]#

Таким образом, получили строку, которая похожа на ту, в которой происходит зависание.
Обратите внимание, что должен быть установлен debuginfo (bind-debuginfo).

]]>
https://nixtux.ru/922/feed 0
Использование системного youtube-dl в Youtube DL GUI (Youtube DLG) https://nixtux.ru/916 https://nixtux.ru/916#comments Fri, 12 Jul 2019 17:17:16 +0000 https://nixtux.ru/?p=916 Читать далее Использование системного youtube-dl в Youtube DL GUI (Youtube DLG)]]> Есть весьма корявенькая, но очень полезная программа Youtube DLG — графический интерфейс для youtube-dl — программы для скачивания с Youtube, Вконтакте, Facebook, Одноклассников Яндекс Диска и множества других сайтов.

На одном из компьютеров внезапно перестала что-либо скачивать, выдавая просто ошибку («Error»). Помогло удаление всего в папке ~/.config/youtube-dlg/, но по ходу разбирательств выяснилось, что Youtube DLG не использует системный youtube-dl, установленный в составе пакета youtube-dl, а вместо этого скачивает бинарник из интернета и запускает именно его.

Сделал патч, исправляющий эту проблему: https://github.com/mikhailnov/youtube-dl-gui/commit/0d1a59487dc14ec7a66c51c3d655df28b888158b
Теперь бинарник из интернета скачивается только если не найден youtube-dl в $PATH, иначе используется уже установленный youtube-dl.

Deb-пакет youtube-dlg с моим исправлением можно взять здесь.

UPD. Сейчас понял, что патч поломал функционал кнопки «Обновить»: бинарник скачается, но не будет использоваться, да я б вообще этот функционал вырезал.

]]>
https://nixtux.ru/916/feed 1
Дефрагментирование BTRFS со снапшотами https://nixtux.ru/911 https://nixtux.ru/911#respond Wed, 26 Jun 2019 10:16:14 +0000 https://nixtux.ru/?p=911 Читать далее Дефрагментирование BTRFS со снапшотами]]> У меня был read only снапшот примерно 1.5 ТБ данных, на диске было свободно около 900 ГБ. Запeстил дефрагментацию (btrfs defrag). В итоге получил ошибку, что не осталось свободного места, а место реально закончилось. Это произошло потому, что снапшот был read only, то есть доступен только на чтение, при дефрагментации выполнялось копирование файлов в новое расположение, а из read only снапшота их удалить нельзя, поэтому место закончилось. Удалили снапшот, место освободилось.
Нагуглил по этому вопросу:
1) «Is it dangerous to defragment subvolume which has readonly snapshots?»
2) Обсуждение в рассылке «defragmenting best practice?»

]]>
https://nixtux.ru/911/feed 0
Особенность чистки файлового хранилища на BTRFS https://nixtux.ru/907 https://nixtux.ru/907#respond Sun, 23 Jun 2019 05:39:40 +0000 https://nixtux.ru/?p=907 Читать далее Особенность чистки файлового хранилища на BTRFS]]> Решил почистить файловое хранилище на BTRFS. Чистка включает в себя:

  1. анализ, чем занято место на диске, через консольную утилиту ncdu, удаление ненужного
  2. удаление старых снапшотов (резервных копий)
  3. проведение btrfs balance /точка_монтирования

Выше написан правильный порядок действий. А я сначала удалил ненужные снапшоты, а потом начал пытаться запустить ncdu. В результате фоном работает процесс btrfs-cleaner, который создает большую нагрузку на ввод-вывод с небыстрого HDD диска, и все остальное работает очень медленно. Нужно было делать в той последовательности, которая описана выше, чтобы фоновые операции, создающие большую нагрузку на систему, выполнялись уже после завершения всех работ человеком.

]]>
https://nixtux.ru/907/feed 0