RAID1: dracut-initqueue warning /dev/disk/by-uuid/ does not exist

Умерла материнка на сервере с самбой. Система и данные находились на двух дисках 1T в софтовом RAID1. Выделили новую машинку, подключил диски, но при загрузке получил :

dracut-initqueue warning /dev/disk/by-uuid/ does not exist

Загрузился с LiveCD (у меня это установочная флэшка Centos 7.5)

chroot /mnt/sysimage

У меня там 4 раздела (включая swap), и все не определились. Очевидно, что проблема в UUID устройств. Но ни

cat /proc/mdstat
cat /etc/mdadm.conf
cat /etc/fstab
mdadm --examine --scan

разницы не показали. На всякий случай:

# mdadm --examine --scan > /etc/mdadm.conf

Далее

# dracut -f

Сгенерировал новый initramfs с некоторыми опциями для самого последнего ядра:

dracut --mdadmconf --force /boot/initramfs-3.10.0-1160.11.1.el7.x86_64.img 3.10.0-1160.11.1.el7.x86_64 -M

Потом:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Проверил uuid в /etc/default/grub и /boot/grub2/grub.cnf – совпадают.

# grep rd.md.uuid /etc/default/grub 
# grep rd.md.uuid /boot/grub2/grub.cfg

Перегружаемся.

Удалил файл .autorelable, (находился в корне) чтобы не тратить много времени на изменение метки диска с помощью SELinux, из-за этого оооочень долго грузился:

# rm -f /.autorelabel

Также во время загрузки отключил selinux (на выбранном ядре нажать “e”), добавив в конец секции linux16

enforcing=0

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

После проверки и тестирования создал в корне .autorelable и перезагрузился.

 

Centos 7 Server hangs up on boot after deleting a software raid (mdadm device)

https://www.linux.org.ru/forum/admin/15068445

https://community.freepbx.org/t/dracut-emergency-shell-dev-disk-by-uuid-nr-does-not-exist/59202/3

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-working_with_the_grub_2_boot_loader

Настройка загрузчика Grub

image_pdfimage_print

phpMyAdmin устраняем ошибки $Cfg[‘TempDir’] (./tmp/) недоступен и $cfg[‘blowfish_secret’]

Это не ошибка, а предупреждение, поскольку phpMyAdmin продолжает работать.

Алгоритм решения довольно очевиден:

  • создать требуемую папку
  • прописать путь до этой папки в конфигурационном файле

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

На самом деле, в любой системе Linux уже имеется папка, в которую предоставлены права на запись для кого угодно. Это папка /tmp. После каждой перезагрузки эта папка очищается.

То есть если в конфигурационный файл phpMyAdmin добавить настройку:

# vi /usr/share/phpMyAdmin/config.inc.php
$cfg['TempDir'] = '/tmp';
Если файла нет, то нужно скопировать:
# cp /usr/share/phpMyAdmin/config.sample.inc.php /usr/share/phpMyAdmin/config.inc.php
В конфиге нужно найти строку с переменной $cfg['blowfish_secret'] и задать какую-нибудь парольную фразу длинее 32-х символов, например:
$cfg['blowfish_secret'] = '12345678901234567890123456789012';
Проверяем.
image_pdfimage_print

Обновление php72 на php74

WordPress затребовал php версии минимум 7.4. Удовлетворяем его.

Первым делом смотрим список всего, что связано с php:

# rpm -qa | grep php > php72-list-all.txt

Удаляем одной командой:

# yum remove  php-php-gettext-1.0.12-1.el7.noarch php72w-imap-7.2.34-1.w7.x86_64 php72w-ldap-7.2.34-1.w7.x86_64 phpMyAdmin-4.4.15.10-6.el7.noarch php72-php-common-7.2.34-7.el7.remi.x86_64 php-fedora-autoloader-1.0.1-2.el7.noarch php72w-pear-1.10.12-1.w7.noarch php72w-mysql-7.2.34-1.w7.x86_64 php72w-tidy-7.2.34-1.w7.x86_64 php72-runtime-2.0-1.el7.remi.x86_64 php72w-pecl-igbinary-3.1.2-1.w7.x86_64 php72w-bcmath-7.2.34-1.w7.x86_64 php72w-cli-7.2.34-1.w7.x86_64 php72-php-pecl-rar-4.2.0-1.el7.remi.x86_64 php72w-pecl-redis-3.1.6-1.w7.x86_64 php-tcpdf-dejavu-sans-fonts-6.2.26-1.el7.noarch php72w-common-7.2.34-1.w7.x86_64 php72w-mbstring-7.2.34-1.w7.x86_64 php72w-fpm-7.2.34-1.w7.x86_64 php72w-gd-7.2.34-1.w7.x86_64 mod_php72w-7.2.34-1.w7.x86_64 php72-php-json-7.2.34-7.el7.remi.x86_64 php72w-pdo-7.2.34-1.w7.x86_64 php72w-pspell-7.2.34-1.w7.x86_64 php72w-pecl-memcached-3.1.5-1.w7.x86_64 php72w-xml-7.2.34-1.w7.x86_64 php72w-process-7.2.34-1.w7.x86_64 php72w-pecl-apcu-5.1.18-1.w7.x86_64 php-tcpdf-6.2.26-1.el7.noarch php72w-intl-7.2.34-1.w7.x86_64

И устанавливаем новые пакеты:

# yum install php-php-gettext php74-imap php74-ldap php74-php-common php-fedora-autoloader php74-pear php74-mysql php74-tidy php74-runtime php74-pecl-igbinary php74-bcmath php74-cli php74-php-pecl-rar php74-pecl-redis php-tcpdf-dejavu-sans-fonts php74-common php74-mbstring php74-fpm php74-gd mod_php74 php74-php-json php74-pdo php74-pspell php74-pecl-memcached php74-xml php74-process php74-pecl-apcu php-tcpdf php74-intl

Вылезла ошибка:

Ошибка: php74-json conflicts with php-common-5.4.16-48.el7.x86_64
Ошибка: php74-common conflicts with php-common-5.4.16-48.el7.x86_64
Сначала обновим этот пакет: 
# yum install php74-php-common

Downloading packages:
(1/3): php74-php-json-7.4.23-1.el7.remi.x86_64.rpm | 76 kB 00:00:00
(2/3): php74-php-common-7.4.23-1.el7.remi.x86_64.rpm | 695 kB 00:00:00
(3/3): php74-runtime-1.0-3.el7.remi.x86_64.rpm | 1.1 MB 00:00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Общий размер 1.8 MB/s | 1.9 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Установка : php74-runtime-1.0-3.el7.remi.x86_64 1/3
Установка : php74-php-common-7.4.23-1.el7.remi.x86_64 2/3
Установка : php74-php-json-7.4.23-1.el7.remi.x86_64 3/3
Проверка : php74-php-json-7.4.23-1.el7.remi.x86_64 1/3
Проверка : php74-php-common-7.4.23-1.el7.remi.x86_64 2/3
Проверка : php74-runtime-1.0-3.el7.remi.x86_64 3/3

Установлено:
php74-php-common.x86_64 0:7.4.23-1.el7.remi

Установлены зависимости:
php74-php-json.x86_64 0:7.4.23-1.el7.remi

Идем дальше, пробуем следующие:

# yum install php-php-gettext php74-imap php74-ldap php-fedora-autoloader php74-pear php74-mysql php74-tidy php74-runtime php74-pecl-igbinary php74-bcmath php74-cli php74-pecl-redis php-tcpdf-dejavu-sans-fonts php74-common php74-mbstring php74-gd mod_php74 php74-pdo php74-pspell php74-pecl-memcached php74-xml php74-process php74-intl

Пакета с названием php74-pear не найдено.
Пакета с названием php74-mysql не найдено.
# yum install php74

Установлено:
php-tcpdf.noarch 0:6.2.26-1.el7

Установлены зависимости:
oniguruma.x86_64 0:6.8.2-1.el7 php-fedora-autoloader.noarch 0:1.0.1-2.el7 php74-bcmath.x86_64 0:7.4.21-1.el7.ius
php74-gd.x86_64 0:7.4.21-1.el7.ius php74-json.x86_64 0:7.4.21-1.el7.ius php74-mbstring.x86_64 0:7.4.21-1.el7.ius
php74-process.x86_64 0:7.4.21-1.el7.ius php74-tidy.x86_64 0:7.4.21-1.el7.ius php74-xml.x86_64 0:7.4.21-1.el7.ius
# yum install php-php-gettext php74-imap php74-ldap php74-pear php74-mysql php74-runtime php74-pecl-igbinary php74-cli php74-pecl-redis php-tcpdf-dejavu-sans-fonts mod_php74 php74-pdo php74-pspell php74-pecl-memcached php74-process php74-intl
# yum install php74-mysqlnd
# yum install php74-php-pear
# yum install php74-php-fpm
# yum install php74-fpm-nginx

Для owncloud понадобилось установить так выдавал ошибку:

Не установлен PHP-модуль zip.
Пожалуйста, попросите администратора сервера установить модуль.
# yum install php-pclzip.noarch php74-php-pecl-zip php74-pecl-zip

Но и после он не видел эти модули, хотя они есть и сервис перезапущен:

# php -m

все модули установлены. Помогла перезагрузка.

В репозитории есть phpMyAdmin5.0 но в нем нет поддержки php7.4. Поэтому устанавливаем вручную:

# cd /home/www
# wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.tar.gz

Распаковываем, переименовываем и копируем в /usr/share/
Проверяем.

# php -v
PHP 7.4.21 (cli) (built: Jul 2 2021 17:40:37) ( NTS )
image_pdfimage_print

Dig – утилита для получения информации по доменному имени или IP адресу

Утилита dig (domain information groper) предоставляет возможность узнать о домене наиболее полную информацию, например, IP адрес, который привязан к данному доменному имени и еще ряд полезных для системного администратора параметров.

$ dig tst-amo.net.ua

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> tst-amo.net.ua
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40569
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tst-amo.net.ua. IN A

;; ANSWER SECTION:
tst-amo.net.ua. 3549 IN A 94.158.83.27

;; AUTHORITY SECTION:
ua. 165378 IN NS in1.ns.ua.
ua. 165378 IN NS cd1.ns.ua.
ua. 165378 IN NS pch.ns.ua.
ua. 165378 IN NS ho1.ns.ua.

;; ADDITIONAL SECTION:
cd1.ns.ua. 16375 IN A 194.0.1.9
cd1.ns.ua. 29993 IN AAAA 2001:678:4::9
in1.ns.ua. 16641 IN AAAA 2604:ee00:0:101::40

;; Query time: 0 msec
;; SERVER: 194.44.219.162#53(194.44.219.162)
;; WHEN: Срд Сен 01 14:18:45 EEST 2021
;; MSG SIZE rcvd: 206

Информация условно поделена на три секции:

  • секция HEADER — показывает текущую версию утилиты dig, ID запроса и т. д.;
  • секция QUESTION SECTION — выводит на экран текущий запрос;
  • секция ANSWER SECTION — отображает ответ на созданный запрос (в нашем запросе выводит IP домена).

Если вы хотите получить только основные данные по домену, то стоит задать сокращенный запрос следующей командой:

$ dig tst-amo.net.ua +short

При использовании флага +noall будет отключен вывод на экран информации всех трех секций:

$ dig tst-amo.net.ua +noall

Если вы хотите увидеть информацию только из секции ANSWER SECTION, то выполните следующую команду:

$ dig tst-amo.net.ua +noall +answer

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

$ echo google.com i.ua tst-amo.net.ua > sites.txt

и выполнить команду в терминале:

$ dig -f sites.txt +noall +answer

Можно получить определенные типы записей DNS (A, MX, NS, TXT и т.д.), для этого выполняем команду dig, применяя следующие флаги, например, для типа записи «почтовый сервер»:

$ dig tst-amo.net.ua MX

или коротко:

$ dig tst-amo.net.ua MX +noall +short

Без указания сервера, утилита использует информацию из файла /etc/resolv.conf, это поведение можно изменить указав нужный DNS (например google):

$ dig @8.8.8.8 i.ua +noall +answer

Для решения обратной задачи — получения имени домена по IP-адресу служит ключ -x:

$ dig -x 91.198.36.14 +noall +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> -x 91.198.36.14 +noall +answer
;; global options: +cmd
14.36.198.91.in-addr.arpa. 3007 IN PTR www.i.ua.

Попытаемся узнать, через какие DNS сервера идет запрос для получения информации о домене (команда трассировки в Linux):

$ dig +trace i.ua

Для проверки синхронизации зоны со всеми NS введем команду:

$ dig tst-amo.net.ua +nssearch

 

image_pdfimage_print

Seafile – поднимаем WebDAV over https

Понадобилось поднять WebDAV, который поддерживается сервером Seafile.

Правим seafdav.conf

# vi /home/www/seafile/conf/seafdav.conf

[WEBDAV]
enabled = true
port = 8080
fastcgi = false
share_name = /seafdav

В nginx добавляем запись:

# vi /etc/nginx/sites-available/seafile

location /seafdav {
       proxy_pass http://127.0.0.1:8080;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Host $server_name;
       proxy_set_header X-Forwarded-Proto https;
       proxy_http_version 1.1;
       proxy_connect_timeout 36000s;
       proxy_read_timeout 36000s;
       proxy_send_timeout 36000s;
       send_timeout 36000s;

      # This option is only available for Nginx >= 1.8.0.
      client_max_body_size 0;
      proxy_request_buffering off;

      access_log /var/log/nginx/seafdav.access.log;
      error_log /var/log/nginx/seafdav.error.log;
}

Перезагружаем сервисы:

# systemctl restart seafile 
# systemctl restart seahub
# nginx -s reload

В Windows подключаем хранилище как сетевой диск, введя наш логин/пароль от учетки.

 

image_pdfimage_print

Seafile – очистка сервера от мусора, потерянных библиотек и файлов

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

# vi /home/user/bin/cleanup-seafile.sh

#####
#!/bin/bash 
# Uncomment the following line if you rather want to run the script manually.
# Display usage if the script is not run as root user 
# if [[ $USER != "root" ]]; then 
# echo "This script must be run as root user!" 
# exit 1 
# fi 
# 
# echo "Super User detected!!" 
# read -p "Press [ENTER] to start the procedure, this will stop the seafile server!!" 
##### 

# stop the server echo Stopping the Seafile-Server... 
systemctl stop seafile.service 
systemctl stop seahub.service 
echo Giving the server some time to shut down properly.... 
sleep 20 

# run the cleanup echo Seafile cleanup started... 
/home/www/seafile/seafile-server-latest/seaf-gc.sh 
echo Giving the server some time.... 
sleep 10 

# start the server again echo Starting the Seafile-Server... 
systemctl start seafile.service 
systemctl start seahub.service 
echo Seafile cleanup done!

Делаем исполняемым скрипт:

# chmod +x cleanup-seafile.sh

Создаем задание в cron:

# crontab -e

0 2 * * Sun /home/user/bin/cleanup-seafile.sh

 

image_pdfimage_print

Seafile + memcached – увеличиваем производительность

Устанавливаем, если нет, эти компоненты:

# yum install memcached libmemcached -y 
# pip3 install --timeout=3600 pylibmc django-pylibmc 
# systemctl enable --now memcached

У меня они уже были установлены.

Добавляем секцию в :

# vi seahub_settings.py.

CACHES = {
        'default': {
              'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
              'LOCATION': '127.0.0.1:11211',
        }
}

Перегружаем сервисы:

# systemctl stop seafile
# systemctl stop seahub
# systemctl start seafile
# systemctl start seahub
# systemctl restart memcached
image_pdfimage_print

Seafile автозагрузка сервиса

Создаем юниты:

# vi /etc/systemd/system/seafile.service

[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target

[Service]
Type=forking
ExecStart=/home/www/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/www/seafile/seafile-server-latest/seafile.sh stop
LimitNOFILE=infinity
User=nginx
Group=www-data

[Install]
WantedBy=multi-user.target
# vi /etc/systemd/system/seahub.service

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/home/www/seafile/seafile-server-latest/seahub.sh start 8999
ExecStop=/home/www/seafile/seafile-server-latest/seahub.sh stop
User=nginx
Group=www-data

[Install]
WantedBy=multi-user.target

Перед запуском останавливаем наши сервисы (предварительно отредактировав vipw)

# su nginx
$ ./seafile.sh stop
$ ./seahub.sh stop
$ exit
# systemctl enable seafile.service
# systemctl enable seahub.service
# systemctl daemon-reload
# systemctl start seafile.service
# systemctl start seahub.service
image_pdfimage_print

Seafile – BACKUP и RESTORE

Резервирование

Порядок создания резервной копии хранилища.

  1. Делаем дамп MySQL
  2. Создаем бэкап файловой структуры
  • ccnet-db: содержит информацию о пользователях и группах
  • seafile-db: содержит библиотеку метаданных
  • seahub-db: хранит таблицы используемые для web front end (seahub)
  • seafileserver8.0.x # untar from seafile package
  • seafiledata # seafile configuration and data (if you choose the default)
  • seahubdata # seahub data
  • logs
  • conf

Создаем dump MySQL:

# vi mysqldump_sf.sh

## Backup Seafile MySQL BD
#!/bin/sh

/usr/bin/mysqldump -uroot -p'_password_' ccnet-db > /home/user/_backup/TST/mysql/`date +%Y-%m-%d`.tst-ccnet-db.sql
/usr/bin/mysqldump -uroot -p'_password_' seafile-db > /home/user/_backup/TST/mysql/`date +%Y-%m-%d`.tst-seafile-db.sql
/usr/bin/mysqldump -uroot -p'_password_' seahub-db > /home/user/_backup/TST/mysql/`date +%Y-%m-%d`.tst-seahub-db.sql

Создаем бэкап директорий хранилища:

# vi rsync_backup_tst-seafile_to_tst.sh

#!/bin/sh 
rsync -az /home/www/seafile /home/user/_backup/TST/seafile

Восстановление

# vi mysqlrestore_sf.sh 

#!/bin/sh
## RESTORE ##
/usr/bin/mysqldump -uroot -p'_password_' ccnet-db < /home/svm/_backup/TST/mysql/`date +%Y-%m-%d`.tst-ccnet-db.sql
/usr/bin/mysqldump -uroot -p'_password_' seafile-db < /home/svm/_backup/TST/mysql/`date +%Y-%m-%d`.tst-seafile-db.sql
/usr/bin/mysqldump -uroot -p'_password_' seahub-db < /home/svm/_backup/TST/mysql/`date +%Y-%m-%d`.tst-seahub-db.sql
# rsync -az /home/user/_backup/TST/seafile /home/www/seafile
image_pdfimage_print