Стоит задача запустить сервер 1С под Фряхой. Пользуюсь статьёй: тыц и гуглом. Играюсь на виртуалке. Дополняю статью по мере продвижения к финалу. Немножко осложняется тем, что машина с фряхой не имеет доступа к Интернету.
0. Ставим фряху
x. echo linux64_load="YES" >>/boot/loader.conf
echo linux_load="YES" >>/boot/loader.conf
Перезагружаемся (ну или подгружаем оба два модуля через kldload). И потом ставим вот это:
https://www.freshports.org/emulators/linux_base-c7/ (pkg install linux_base-c7)
Принципиально важно ставить порт после того, как подключены модули, иначе что-то идёт не так
x. Добавляем строки в /etc/fstab
linprocfs /compat/linux/proc linprocfs rw 0 0
linsysfs /compat/linux/sys linsysfs rw 0 0
tmpfs /compat/linux/dev/shm tmpfs rw,mode=1777 0 0
и перезагружаемся.
x. Ставим порт: archivers/rpm4
x. Берём архив rpm64.tar.gz жопы Одина, распаковываем.
x. Про использование среды совместимости с CentOS 7 тутачки: клац
Устанавливаем пакеты common и server командами:
rpm -i --dbpath /var/lib/rpm --ignoreos --nodeps --relocate /=/compat/linux/ --badreloc 1C_Enterprise83-common-8.3.12-1529.x86_64.rpm
rc-скрипт сервера одноэса ожидаемо обломался на фряхе.
Вот исправленные скрипты:
prein.sh:
groupExists () {
grep -q "^$1:" /etc/group
}
userExists () {
grep -q "^$1:" /etc/passwd
}
userBelongsToGroup () {
id "$1" | grep -q "($2)"
}
useLegacy82=""
commonGroup="grp1cv8"
if userExists usr1cv82; then
useLegacy82=true
fi
if ! groupExists "$commonGroup"; then
pw group add $commonGroup >/dev/null 2>&1 || :
fi
if [ ! -z "$useLegacy82" ]; then
username=usr1cv82
groupname=grp1cv82
else
username=usr1cv8
groupname=grp1cv8
if ! groupExists "$groupname"; then
pw group add "$groupname" >/dev/null 2>&1 || :
fi
# create system user with home directory belong
# to group grp1cv8 and $commonGroup
# -r - system account (don't expire passwd)
# -n don's auto create group with the same name as user
if ! userExists $username; then
pw user add $username -g "$groupname" -G "$commonGroup" \
-m -c "1C Enterprise 8 server launcher" \
>/dev/null 2>&1 || :
fi
fi
if ! userBelongsToGroup "$username" "$commonGroup"; then
pw user mod $username -G "$commonGroup"
fi
dir1CVar="/compat/linux/var/1C"
licenseDir="$dir1CVar/licenses"
if [ ! -d "$licenseDir" ]; then
mkdir -p "$licenseDir"
chown -R $username:$commonGroup "$dir1CVar"
chmod -R g+w "$dir1CVar"
fi
В этот момент устанавливаем основной пакет сервера…
rpm -i --dbpath /var/lib/rpm --ignoreos --nodeps --noscripts --relocate /=/compat/linux/ --badreloc 1C_Enterprise83-server-8.3.12-1529.x86_64.rpm
затем запускаем postin.sh
userExists () {
grep -q "^$1:" /etc/passwd
}
chkconfig --add srv1cv83
if userExists usr1cv82; then
tmpfileName=`mktemp`
startScript="/etc/init.d/srv1cv83"
cat "$startScript" | sed "s/SRV1CV8_USER=usr1cv8/SRV1CV8_USER=usr1cv82/" > "$tmpfileName"
mv "$tmpfileName" "$startScript"
chmod +rx "$startScript"
fi
x. Создаём симлинк на bash:
ln -s /usr/local/bin/bash /bin/bash
x. Даём пользователю usr1cv8 bash в виде дефолтного шелла.
pw user mod usr1cv8 -s /usr/local/bin/bash
x. init-скрипт тоже не работает из коробки. Надо править.
x. Патчим PostgreSQL 10.3 (в моём случае), взятый отсюда: https://www.postgresql.org/ftp/source/v10.3/, затем устанавливаем.
Для сборки PostgreSQL 10.3 надо доставить порты:
devel/readline
gmake
icu
./configure --with-includes=/usr/local/include
make world
make install
pw user add postgres -d /tmp
chown -R /usr/local/pgsql
sudo -u postgres /usr/local/pgsql/bin/initdb -Upostgres -D/usr/local/pgsql/data
mkdir /usr/local/etc/rc.d
cp /contrib/start-scripts/freebsd /usr/local/etc/rc.d/postgresql
chmod +x /usr/local/etc/rc.d/postgresql
cp /contrib/online_analyze/online_analyze.so /usr/local/pgsql/lib
cp /contrib/plantuner/plantuner.so /usr/local/pgsql/lib
echo postgresql_enable=\"YES\" >>/etc/rc.conf
service postgresql start