REDOS: обновление с 7.3 до 8.0

RedOS 8 собран на другой архитектуре, поэтому так просто обновиться не получится. А еще жадная техподдержка просит действующую лицензию на техподдержку, для получения скрипта для обновления с 7 на 8. Однако в Яндекс найдется всё (с):

#!/usr/bin/sh
# Обновляем пакеты 
dnf upgrade --refresh 
# Заменяем версию 
sudo sed -i 's/7\.3/8.0/g' /etc/yum.repos.d/* 
rm -f /etc/yum.repos.d/RedOS-kernels6.repo 
# Обновляем систему 
dnf system-upgrade download --allowerasing 
# Удаляем неиспользуемые пакеты 
dnf autoremove 
dnf system-upgrade reboot 

После перезагрузки продолжить:

#!/usr/bin/sh
rm -f /etc/yum.repos.d/*.rpmnew 
dnf upgrade --refresh

Далее у меня вылезло несколько сломанных пакетов, которые фиксил следующим образом:

  1. В папке /etc/httpd/conf.d создалось несколько «лишних» файлов конфигураций, которые система туда поместила туда во время обновления и которые мешали работе моих файлов. Их просто удалил.
  2. Перестал запускаться mc, с ошибкой: /usr/bin/mc: symbol lookup error: /usr/bin/mc: undefined symbol: g_string_free_and_steal. Лечится: dnf install glib2 —best —allowerasing затем dnf update
  3. dnf update стал ругаться на ключи GPG. Решение: в /etc/yum.repos.d в фалах проставить gpgcheck=0
  4. PHP по умолчанию откатился к 8.1.34 (уязвимый). Решение: снова собрать всё из исходников с патчем

Кроме того, появился ряд сломанных пакетов. Лечил:

dnf remove qt5-qtlocation
dnf remove qt5-qtbase
dnf update perl-libs --best --allowerasing
dnf update
dnf install libicui18n*
dnf update

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

Обновление OpenSSH на REDOS 7.3

Увы, опять наступил момент, что ОС уже не обновляется оперативно, и того гляди, вообще её снимут с поддержки, а обновления ставить нужно. Ранее уже делал описание обновления, но с тех пор инструкция чуть изменилась.

Подготавливаю необходимый инструментарий и окружение:

dnf install libtool svn expat-devel pcre pcre-devel openssl-devel -y
dnf install zlib-devel
dnf install pam-devel
dnf install libselinux-devel

Скачиваю на сайте https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/ необходимую версию sshd, распаковываем её в папку и переходим в неё:

tar -xzf openssh-10.6p1.tar.gz
cd openssh-10.6p1

Конфигурируем, cобираем, устанавливаем:

./configure --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh --with-pam --with-selinux
make
make install

Переименовываем старые бинарники, и делаем ссылки на новые:

mv /usr/sbin/ssh /usr/sbin/ssh_old
mv /usr/sbin/sshd /usr/sbin/sshd_old
ln -s /usr/local/sbin/ssh /usr/sbin/ssh
ln -s /usr/local/sbin/sshd /usr/sbin/sshd
service sshd restart
ssh -V
ssd -V

В результате получаем

Устранение ошибок Битрикс после обновления PHP до 8.2

Выпала задача обновить на одном из сайтов PHP с 7.3 до 8.2. на операционной системе RedOS. Далее что делал.

Обновление PHP

dnf install php81-release
dnf clean all
dnf makecache
dnf update php

Обновление БД

alter table b_iblock_element_property modify ID bigint not null auto_increment;

Далее необходимо из панели администратора обновить ядро и сторонние решения до актуальных версий.

После чего лично у меня стала вылезать ошибка вида:

count(): Argument #1 ($value) must be of type Countable|array, null given (0)
/var/www/html/bx-site/bitrix/templates/aspro-allcorp2/components/bitrix/news.detail/services/component_epilog.php:21

На строки в коде вида:

<?if(count($templateData['GALLERY_BIG'])):?>

А всё просто. Если в PHP 7.3 допустимо было так обращаться к переменным не являющимися массивами, то в PHP 8.2, где введено более строгое отношение к типизации, так уже нельзя. Поэтому все подобные конструкции нужно заменить на вида:

<?php
$templateData['GALLERY_BIG'] = (array)$templateData['GALLERY_BIG'];
if(count($templateData['GALLERY_BIG'])):
....
?>

Ну или я просто поискал все подобные конструкции которые встречаются в файле и в шапку добавил:

$templateData['VIDEO'] = (array)$templateData['VIDEO'];
$templateData['VIDEO_IFRAME'] = (array)$templateData['VIDEO_IFRAME'];
$templateData['GALLERY_BIG'] = (array)$templateData['GALLERY_BIG'];
$templateData['LINK_SALE'] = (array)$templateData['LINK_SALE'];
$templateData['LINK_NEWS'] = (array)$templateData['LINK_NEWS'];
$arElement['PROPERTY_LINK_STAFF_VALUE'] = (array)$arElement['PROPERTY_LINK_STAFF_VALUE'];

RedOS: обновление httpd из исходников

Как оказалось (по советам данным на linux.org.ru), наиболее правильным вариантом обновления существующей инсталляции httpd, является «опакечивание» исходных кодов в rpm, а затем штатная его установка. В этом случаем мы избавляемся от проблем с выбором правильных ключей и путей, которые пришлось бы устанавливать руками при компиляции/сборке httpd из исходников. Итак поехали:

Сначала как обычно подготовим среду сборки:

dnf install rpmdevtools rpmlint
dnf install apr-devel apr-util-devel libuuid-devel lua-devel openldap-devel
dnf install apr-util-ldap
dnf install perl libxml2-devel

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

rpmdev-setuptree

Далее скачиваем исходные коды httpd:

wget https://dlcdn.apache.org/httpd/httpd-2.4.62.tar.bz2

И теперь «опакечиваем» их в rpm:

rpmbuild -tb httpd-2.4.62.tar.bz2

Если сборка вываливается с ошибками, то необходимо смотреть файл config.log и до устанавливать необходимые зависимости (смотря на что ругается)

Если сборка прошла успешно, то в папке ~/rpmbuild/RPMS/x86_64 будут пакеты готовые к установке. Устанавливать их можно штатно:

rmp -U *.rpm --force

ключ —force в данном случае нужен для того, чтобы установщик не ругался на уже существующие файлы настройки httpd (вот тут осторожно! лучше сначала попробовать без этого ключа и посмотреть ошибки)

Убедимся что версия обновилась:

httpd -V
обновление httpd из исходников

Вот и всё, остается перезапустить сервис httpd

Установка OpenSSH из исходных кодов на RedOS

Задача: необходимо обновить существующую установку демона sshd на ОС RedOS (установка sshd из исходников).

Решение:

Подготавливаю необходимый инструментарий и окружение:

dnf install libtool svn expat-devel pcre pcre-devel openssl-devel -y
dnf install zlib-devel
dnf install pam-devel
dnf install libselinux-devel

Скачиваю на сайте https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/ необходимую версию sshd, распаковываем её в папку и переходим в неё:

tar -xzf openssh-9.8p1.tar.gz
cd openssh-9.8p1

Конфигурируем, cобираем, устанавливаем:

./configure --with-md5-passwords --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh --with-pam --with-selinux
make
make install

После установки нужно перестартовать демон и посмотреть версию sshd:

service sshd restart
ssh -V
установка sshd из исходников
1 2