DECnet в Linux

Часть 1

Posted by Unik on 05.11.2019

Под многие операционные системы от DEC нет TCP/IP, зато есть DECnet. Поэтому было бы удобно развернуть у себя свою сеть для обмена файлами и прочего. DECnet может работать поверх существующей локальной сети и довольно таки прост в настройке. А все его преимущества раскрываються когда в сети появляеться линукс-хост с поддержкой decnet. И сейчас я покажу как это сделать..

В качестве линукс-хоста буду использовать Ubuntu 16.04. Decnet модуль в ядре устарел и работает не корректно, но есть пропатченая версия, которая точно работает с ядрами 4.4.x и 4.9.x поэтому и убунту беру старую, но проблем у неё с репозитариями пока еще нет. Для установки пропатченого модуля придется пересобрать ядро.

Для начала устанавливаем Ubuntu Server 16.04, там как раз идет необходимое ядро. При установке запрещаем автоматическое обновление, чтобы не обновилось кастомное ядро. Затем устанавливаем необходимые пакеты:

$ sudo apt install install git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache

Качаем исходники ядра 4.4.x

$ cd ~
$ mkdir kernelbuild
$ cd kernelbuild
$ git clone -b linux-4.4.y git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

Копируем конфиг из старого ядра в новое и адаптируем его.

$ cd linux-stable
$ cp /boot/config-`uname -r` .config
$ yes '' | make oldconfig

Обычно дальше нужно запустить "make menuconfig" и выбрать нужные модули, но нам это не понадобиться т.к. по умолчанию модуль decnet уже включен. На данном этапе нужно заменить в ядре модуль на пропатченый dflkm.zip Для этого, содержимым архива, нужно заменить всё, что находиться в ~/kernelbuild/linux-stable/net/decnet

А дальше запускаем сборку ядра:

$ make clean
$ make -j `getconf _NPROCESSORS_ONLN` deb-pkg LOCALVERSION=-decnet

Процесс этот достаточно долгий, например в виртуалке это заняло около 3х часов. В итоге должны получить 5 пакетов для установки. Устанавливаем эти пакеты:

$ cd ..
$ sudo dpkg -i linux-firmware-image-4.4.198-decnet_4.4.198-decnet-1_amd64.deb
$ sudo dpkg -i linux-libc-dev_4.4.198-decnet-1_amd64.deb
$ sudo dpkg -i linux-headers-4.4.198-decnet_4.4.198-decnet-1_amd64.deb
$ sudo dpkg -i linux-image-4.4.198-decnet-dbg_4.4.198-decnet-1_amd64.deb
$ sudo dpkg -i linux-image-4.4.198-decnet_4.4.198-decnet-1_amd64.deb

После перезагрузки команда "uname -r" должна показать что используеться новое ядро.

Теперь когда есть рабочий модуль, нужно установить различные утилиты. Скачиваем архив dnprogs-2-68.zip Этот архив с утилитами, то же с различными патчами для нормальной работы. Распаковываем, собираем и устанавливаем:

$ make
$ sudo make install

При загрузке модуль ядра не будет подгружаться т.к. это нужно сделать вручную. Для этого я написал такой скрипт:

#!/bin/bash
# Load DECnet module
ADR="1.XXX"

# Check the script is being run by sudo

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as: sudo "${0##*/}
   exit 1
fi

modprobe decnet
echo -n ${ADR} | tee /proc/sys/net/decnet/node_address
dnetd
phoned

echo " For test, type: dnping HOST -u USER -p PASS"

В этом скрипте в 3ей строке нужно указать DECnet-адрес. На этом с установкой всё, во второй части опишу как это всё настроить на 2х ПК с Убунтой.