среда, 7 февраля 2018 г.

CentOS 7: собираем libtgvoip

За основу хорошо заходят 2 пакета:
http://rpmfind.net/linux/RPM/rpmfusion/free/fedora/updates/27/x86_64/l/libtgvoip-1.0.3-1.fc27.x86_64.html
http://rpmfind.net/linux/RPM/rpmfusion/free/fedora/updates/27/x86_64/l/libtgvoip-devel-1.0.3-1.fc27.x86_64.html
Также нужны mock и gyp с поддержкой cmake

mock -r epel-7-x86_64 rebuild libtgvoip-1.0.3-1.fc27.src.rpm
(тут будет момент с gyp - нужно будет также встроить свежий gyp, так что вместо epel будет своя репа c gyp, куда в том числе нужно добавить данные репы centos-sclo-rh для devtoolset)
Но всё-равно не соберётся. Вторым шагом будет или выпиливание webrtc блока (оно на c++17), или установка gcc 5. Версия 4.9 его не устроит. Ставим devtoolset-4-gcc
Но всё-равно не соберётся, потому что mock тянет штатную версию 4.8.

А также, будет ошибка
usr/include/c++/5.3.1/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
Только тут момент: ошибка изменится на
error: ‘typeof’ was not declared in this scope

фикс: typeof отсутствует(?) в с++11, надо писать -std=gnu++11
или (возможно?) поможет такая штука
#define typeof(x) __typeof__(x)

Теперь в спеке нужны изменения
pushd out/Release
+    sed -i'' -e "14i add_definitions(-std=gnu++11)" CMakeLists.txt
    %cmake .


вторник, 6 февраля 2018 г.

/usr/sbin/useradd: No such file or directory

Довелось тут поймать Exception в анаконде, не сразу нашлась причина (в /tmp/packaging.log или /tmp/rpm-script.log), когда ставилось всё автоматом через ks.cfg: надо было предварительно добавить установку shadow-utils
Requires(pre): shadow-utils

пятница, 2 февраля 2018 г.

ERROR 1005 (HY000): Can't create table `db`.`cdr2` (errno: -1 "Internal error < 0 (Not system error)")

Поймали недавно такую ошибку
ERROR 1005 (HY000): Can't create table `db`.`cdr2` (errno: -1 "Internal error < 0 (Not system error)")
Оказалось, это прилетело что-то не нужное, с таким описанием
ENGINE=InnoDB DEFAULT CHARSET=ascii DATA DIRECTORY='/var/lib/mysql_parition_moving/';
этого DIRECTORY не существует.

Server version: 10.1.26-MariaDB MariaDB Server

понедельник, 29 января 2018 г.

CentOS и cmake: this file requires compiler and library support for the iso c++ 2011 standard

Даже после установки devtoolset-7 софт может не собираться, выдавая
this file requires compiler and library support for the iso c++ 2011 standard
Была найдена такая штука:

# http://stackoverflow.com/questions/10851247/how-to-activate-c-11-in-cmake
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    add_definitions(-std=c++11)
elseif(COMPILER_SUPPORTS_CXX0X)
    add_definitions(-std=c++0x)
else()
    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

Вставляем в CMakeLists.txt поближе к началу, собираем.

Хотя мелькал и такой вариант
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

ручной вариант
$ cmake -DCMAKE_CXX_FLAGS=-std=c++11 ..

CentOS 7 и gcc разных версий

Штатный gcc - 4.8, что уже весьма старо, а тот же гугл обожает говнокодить на свежем с++17. Впрочем, можно поставить и более свежие версии. под центос 6, тут действуем по аналогии.

yum -y install centos-release-scl
yum search devtoolset
Будет огромный список, который делится на части по версиям. В частности, devtoolset-3 это gcc 4.9, -4 это 5.3 итд.
На самом деле, ставить целиком devtoolset-x не нужно, обычно достаточно только
devtoolset-3-gcc
devtoolset-3-gcc-с++

Дальше переключаем версию, несколько вариантов
1) scl enable devtoolset-3 bash
2) /opt/rh/devtoolset-3/enable
3) update-alternatives --install /usr/bin/gcc-4.9 gcc-4.9 /opt/rh/devtoolset-3/root/usr/bin/gcc 10
update-alternatives --install /usr/bin/g++-4.9 g++-4.9 /opt/rh/devtoolset-3/root/usr/bin/g++ 10
(тут уже сначала надо смотреть, что куда ставится, зато потом переключать можно глобально)

А посмотреть, какая версия в каком тулсете, можно так:
$ yum info devtoolset-4-gcc |grep Version
Version     : 5.3.1

пятница, 26 января 2018 г.

вторник, 23 января 2018 г.

CentOS 7 и gyp: ImportError: No module named cmake

GYP (generate your projects) is a build automation tool. GYP is created by Google to generate native IDE project files (such as Visual Studio Code and Xcode) for building the Chromium web browser and is licensed as open source software using the BSD software license.

The functionality of GYP is similar to the CMake build tool. GYP processes a file that contains a JSON dictionary[1] in order to generate one or more target project make files. The single source .GYP file is generic while the target files are specific to each targeted build tool.

Потребовалось для некоторых задач использовать gyp (wiki, 2) с опцией --format=cmake, но молвит нам компилятор ImportError: No module named cmake
Также не помогла установка python-pip && pip install cmake. Копать надо в сторону самого gyp:
$ ls -la /usr/lib/python2.7/site-packages/gyp/generator/cmake*
ls: cannot access /usr/lib/python2.7/site-packages/gyp/generator/cmake*: No such file or directory

То есть просто нет данного функционала в самом gyp. Но заглянув например сюда - мы этот модуль видим.

Быстрое введение в mock

mock это утилита для сборки, наподобие rpmbuild, но в чистом окружении.

https://github.com/xvitaly/tgbuild/blob/master/doc/build_using_mock.md

https://blog.packagecloud.io/eng/2015/05/11/building-rpm-packages-with-mock/

Список реп (для ключа -r) можно посмотреть тут
/etc/mock/

В случае с centos ставим примерно так
Подготовка
yum install -y epel-release
yum install rpm-build rpmdevtools mock
usermod -a -G mock some_builder_user
mock -r epel-7-x86_64 init

Сборка своего пакета
rpmbuild -bs some_package.spec
mock -r epel-7-x86_64 some_package.src.rpm
и результат будет в /var/lib/mock/epel-7-x86_64/result

Чтобы сделать сборку со своей репой, в /etc/mock копируем нужный файл и добавляем внутрь свои репы, а потом в -r указываем наше новое название.

среда, 17 января 2018 г.

debian: ispmanager 4 + letsencrypt

Есть штатный модуль интеграции, но он доступен только с версии 5.65, а нам надо под более адекватную 4 версию.
Можно конечно поставить сервис, сгенерировать сертификаты, скопировать их из файлов и добавить через панель, а потом каждые 2 месяца обновлять... Но можно сделать проще!

понедельник, 11 декабря 2017 г.

CentOS 7: переключаемся на оригинальный mysql

https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7

Вкратце:
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -Uvh mysql57*

Если будет ошибка про MariaDB* - удаляем эти пакеты руками. Чтобы без завистимостей - делать это так
rpm -qa|grep <имя проблемного пакета>
rpm -e --nodeps <полное имя пакета из шага выше>

Если что, идти сюда:
https://dev.mysql.com/downloads/repo/yum/

Обращаю внимание, что если уже стоял MariaDB-server, его нужно сначала остановить, потом удалить. Если данные нужны - забэкапить. Потом
# service mysqld start

!!! Если сразу набрать mysql, будет ошибка что нужен пароль. Получить его можно так:
sudo grep 'temporary password' /var/log/mysqld.log
Делаем mysql_secure_installation
(где-то было, что с временным паролем можно зайти только 1 раз)

пятница, 8 декабря 2017 г.

fake (bios) raid + UEFI

При установке centos поверх bios (fake) raid есть 3 нюанса:
1) оно требует раздела /boot/efi типа fat32 (с небольшими изменениями)
2) формат диска обязательно должен быть GPT
2) после установки оно просто не запустится.

И ещё момент. После загрузки в консоль установщика и настроенных рейдах в биосе - будет по 2 устройства, сам рейд и imsm. Это  устройство и связывает биос рейд и системный. Плюс - при этом в формате метадаты самого раздела есть нюансы.
Чуть подробнее тут:
https://raid.wiki.kernel.org/index.php/RAID_setup#External_Metadata_.282011.29
Косяк в том, что он похоже несовместим с EFI.
Про форматы метадаты
https://raid.wiki.kernel.org/index.php/RAID_superblock_formats

понедельник, 4 декабря 2017 г.

среда, 29 ноября 2017 г.

Изучаем WD MyCloud

Довелось прикупить под домашние нужны мини-NAS, WD MyCloud. Внутри диск серии WD RED. Вообще их 2 модификации, старая 1-ядерная, новая 2-ядерная, и в старой памяти 256мб, в новой - 512мб. И это создаёт определённую путаницу, многие статьи и советы относятся только к 1 модификации (hardware version, поколению)
Поколения можно определить по версии:
P/N: WDBCTLxxxxxxx-00, FW 04.xx.xx - Первое поколение
P/N: WDBCTLxxxxxxx-10, FW 2.xx.xx - Второе поколение
Плюс по желанию можно вшить debian, а там свои инструкции будут.

Вот достаточно неплохое описание:
http://4pda.ru/2016/12/22/331903/?__prclt=zwndIZBn
Там же есть и фотки.