LINUX.ORG.RU

Сообщения cruz7

 

Emacs: подключать emacsclient к удаленному серверу

Приветствую, пытаюсь сделать следующее.

1) На сервере (пробовал Ubuntu-16.04.7, и RHEL-8.6) запущен emacs (GNU Emacs 24.5.1 либо GNU Emacs 26.1) в режиме демона:

emacs -nw --eval '(progn (setq server-use-tcp t) (setq server-host "192.168.0.179") (server-start))'

2) Демон создает файл соединения ~/.emacs.d/server/server, который я перенес на машину клиент

3) С машины-клиента (под macOS) запускаю emacsclient (GNU Emacs 28.2):

emacsclient -t -f /Users/cruz7/Documents/server
emacsclient: connected to remote socket at 192.168.0.179
*ERROR*: Could not open file: /dev/ttys001

После чего emacs-сервер сегфолтится:

Fatal error 11: Segmentation fault
Backtrace:
emacs[0x5036d3]
emacs[0x4e9d6e]
emacs[0x50249e]
emacs[0x5026c3]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7fea40621390]
/lib/x86_64-linux-gnu/libc.so.6(+0x9f60a)[0x7fea402e560a]
emacs[0x4ae693]
emacs[0x4aff80]
emacs[0x427864]
emacs[0x55d937]
emacs[0x592b23]
emacs[0x55d3af]
emacs[0x55d74b]
emacs[0x592b23]
emacs[0x55d3af]
emacs[0x55d74b]
emacs[0x592b23]
emacs[0x55d74b]
emacs[0x592b23]
emacs[0x55d74b]
emacs[0x55ce5c]
emacs[0x56026e]
emacs[0x593f2f]
emacs[0x55d74b]
emacs[0x55ce5c]
emacs[0x55ba8b]
emacs[0x593e70]
emacs[0x55d74b]
emacs[0x55ec6c]
emacs[0x55eed0]
emacs[0x55bccb]
emacs[0x596613]
emacs[0x59d369]
emacs[0x4f18c1]
emacs[0x4f539f]
emacs[0x4f63ed]
emacs[0x4f8150]
emacs[0x55bba7]
emacs[0x4ea13e]
emacs[0x55ba8b]
emacs[0x4ee817]
...
Segmentation fault (core dumped)

Т.е. emacs-сервер валится и в ubuntu и в RedHat дистре.

Возможно ли вообще сделать то, чего я хочу?

 ,

cruz7
()

dnf upgrade удаляет файлы

Для своего небольшого приложения наваял spec файл. Установка/удалени пакета dnf install/remove работает успешно, однако dnf upgrade каким-то образом удаляет всю директороию %{_sharedstatedir}/my_app вместе с файлами.

Вот фрагмент:

...
%install
mkdir -p %{buildroot}%{_sharedstatedir}/my_app
...

%files
...
%dir %{_sysconfdir}/my_app
%{_sysconfdir}/my_app/file1
%{_sysconfdir}/my_app/file2
%{_sysconfdir}/my_app/file3

%dir %{_sharedstatedir}/my_app


%post

%preun
if [ $1 == 0 ]; then
   # do it only on uninstall
   rm -rf %{_sharedstatedir}/my_app
   rm -rf %{_sysconfigdir}/my_app
fi

%postun

Что здесь не так?

 , , , ,

cruz7
()

sendto(): менятеся ли содержимое буфера?

Гарантируется ли, что после данного вызоыв содержимое buf останется нетронутым? В man 2 sendo на эту тему ничего не нашел:

sendto(fd, buf, sizeof(buf), ...)

 , ,

cruz7
()

Kea DHCP: поддержка регулярных выражений

Приветствую,

Имеется kea-dhcp-2.0.0, коим я вполне доволен вот уже несколько месяцев.

Имеется сервер с N специализированными smart-карточками, имеют свой управляющий интерфейс через псевдо сетевой интерфейс, создаваемый хостовым драйвером и доступным с именем

ens[0-9]+f[0-9]+
(ну это udev постарался). Через этот интерфейс карточка посылает dhcp запрос на получение адреса и различных опций от хоста. Эти карточки не имеют возможности себя как-то уникально идентифицировать, то есть с точки зрения хоста единственный способ это смотреть с какого интерфейса пришел запрос.

Хотелось бы понять — есть ли возможность пользоваться regexp'ами в kea? В документации ничего на этот счет не сказано.

PS. Полагаю что в крайнем случае можно было бы это реализовать в своем плагине, но это на крайний случай.

 ,

cruz7
()

С библиотека для grpc

Есть ли C-библиотека для работы с grpc? То что представлено на grpc.io поддерживает С++/С# и пр. скриптовые языки. Весь проект уже на C и переписывать на C++ нет возможности. Знаю что можно в одном проекте «мешать» С и С++ но IMHO это тот еще изврат.

 ,

cruz7
()

поведение linux свитча для дублирующих MAC-адресов

Предположим есть простой linux бридж с вумя портами. В FDB есть одна запись для MAC1 на порту port1; появляется другое устройство на port2 с таким же MAC. Что должен сделать свитч в данном случае: заменить FDB запись новой (MAC1 на port2), или добавить вторую запись. Если это второй вариант, то каково поведение бриджа при форвардинге пакетов для MAC1 - на какой порт будет форвардить?

Спасибо.

 , ,

cruz7
()

VLAN bridge на Линуксе и транк-порт

Приветствую,

Имеется следующая конфигурация:

       +-----+
       |  L3 |
       +--+--+
          |
          |
          |br0  PVID=??
   +------+-------+
   | Linux Bridge |
   +------+-------+
          |trunk (vid 1-4094)
          |
          |
   +------+-------+
   |   L2 switch  |
   +-+----+-----+-+
     |    |     |
     |    |     |
    1|   2| .. X|

т.е. пакет, выходящий из бриджа через br0, очищается от VLAN тега, приложение «слушающее» на br0 получает чистый IP пакет.

Но как сделать чтобы ответный пакет, выходящий из бриджа в направлении L2 свитча, тегировался бы правильным VLAN тэгом?

Я предполагал, что бридж может форвардить ответ на основании destination MAC и VLAN ID исходного пакета, то есть бридж по идее должен бы сохранить это в своей FDB. Но на деле этого не происходит. Что я делаю не так? Схема, как я изобразил выше, не будет работать?

Спасибо!

транк-порт

 , ,

cruz7
()

не компилируется модуль non-retpoline компилятором

Приветствую,

Имеется RedHat-8.5 с ядром 4.18.0-348.20.1.el8_5.x86_64, gcc-8.5.0

Установил пакеты kernel-devel и kernel-headers, и попробовал собрать простейший ядерный модуль:

#include <linux/module.h>
#include <linux/kernel.h>

static __init test_init(void)
{
   printk("Init module\n");
   return 0;
}

static __exit void test_exit(void)
{
   printk("Cleanup modulen\n");
}

module_init(test_init)
module_exit(test_exit)

MODULE_DESCRIPTION("Test module")
MODULE_LICENSE("GPL")

Makefile:

obj-m += test_mod.o
MSRC ?= $(PWD)
KDIR ?= /lib/modules/`uname -r`/build/
all:
    make -C $(KDIR) M=$(MSRC) modules
clean:
    make -C $(KDIR) M=$(MSRC) clean

Далее:

%  make V=1
make -C /lib/modules/`uname -r`/build M= modules
make[1]: Entering directory '/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64'
arch/x86/Makefile:249: *** You are building kernel with non-retpoline compiler, please update your compiler..  Stop.
make[1]: Leaving directory '/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64'
make: *** [Makefile:4: all] Error 2
%

man gcc на моей системе (RHEL8.5) сообщает что -mindirect-branch= поддерживается компилятором (насколько я понимаю, именно эта опция «включает» retpoline).

Далее, проверил arch/x86/Makefile:

ifdef CONFIG_RETPOLINE
ifeq ($(RETPOLINE_CFLAGS),)
  $(error You are building kernel with non-retpoline compiler, please update your compiler.)
endif
...

endif

Похоже, что переменная RETPOLINE_CFLAGS не определена, перезапускаю make:

% make V=1 RETPOLINE_CFLAGS=y
make -C /lib/modules/`uname -r`/build/ M= modules
make[1]: Entering directory '/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64'
make -f ./scripts/Makefile.build obj=arch/x86/entry/syscalls all
make -f ./scripts/Makefile.build obj=scripts/basic
(cat /dev/null; ) > scripts/basic/modules.order
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=arch/x86/tools relocs
set -e; mkdir -p include/config/;       echo "4.18.0-348.20.1.el8_5.x86_64$(/bin/sh ./scripts/setlocalversion .)" < include/config/auto.conf > include/config/kernel.release.tmp; if [ -r include/config/kernel.release ] && cmp -s include/config/kernel.release include/config/kernel.release.tmp; then rm -f include/config/kernel.release.tmp; else : '  UPD     include/config/kernel.release'; mv -f include/config/kernel.release.tmp include/config/kernel.release; fi
make -f ./scripts/Makefile.asm-generic \
            src=uapi/asm obj=arch/x86/include/generated/uapi/asm
make -f ./scripts/Makefile.asm-generic \
            src=asm obj=arch/x86/include/generated/asm
set -e; mkdir -p include/generated/uapi/linux/;         (echo \#define LINUX_VERSION_CODE 266752; echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; echo '#define RHEL_MAJOR 8'; echo '#define RHEL_MINOR 5'; echo '#define RHEL_RELEASE_VERSION(a,b) (((a) << 8) + (b))'; echo '#define RHEL_RELEASE_CODE 2053'; echo '#define RHEL_RELEASE "348.20.1"';) < Makefile > include/generated/uapi/linux/version.h.tmp; if [ -r include/generated/uapi/linux/version.h ] && cmp -s include/generated/uapi/linux/version.h include/generated/uapi/linux/version.h.tmp; then rm -f include/generated/uapi/linux/version.h.tmp; else : '  UPD     include/generated/uapi/linux/version.h'; mv -f include/generated/uapi/linux/version.h.tmp include/generated/uapi/linux/version.h; fi
rm -f include/linux/version.h
set -e; mkdir -p include/generated/;    if [ `echo -n "4.18.0-348.20.1.el8_5.x86_64" | wc -c ` -gt 64 ]; then echo '"4.18.0-348.20.1.el8_5.x86_64" exceeds 64 characters' >&2; exit 1; fi; (echo \#define UTS_RELEASE \"4.18.0-348.20.1.el8_5.x86_64\";) < include/config/kernel.release > include/generated/utsrelease.h.tmp; if [ -r include/generated/utsrelease.h ] && cmp -s include/generated/utsrelease.h include/generated/utsrelease.h.tmp; then rm -f include/generated/utsrelease.h.tmp; else : '  UPD     include/generated/utsrelease.h'; mv -f include/generated/utsrelease.h.tmp include/generated/utsrelease.h; fi
mkdir -p .tmp_versions ; rm -f .tmp_versions/*
make -f ./scripts/Makefile.build obj=.
(cat /dev/null; ) > modules.order
mkdir -p ./tools
make LDFLAGS= MAKEFLAGS=" " O=/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64 subdir=tools -C ./tools/ objtool
mkdir -p /usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/objtool && make O=/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64 subdir=tools/objtool --no-print-directory -C objtool
make -C /usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/build CFLAGS= LDFLAGS= /usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/objtool/fixdep
make -f /usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/build/Makefile.build dir=. obj=fixdep
/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/build/Makefile.build:37: /usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/build/Build.include: No such file or directory
make[5]: *** No rule to make target '/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/build/Build.include'.  Stop.
make[4]: *** [Makefile:47: /usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/objtool/fixdep-in.o] Error 2
make[3]: *** [/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/build/Makefile.include:4: fixdep] Error 2
make[2]: *** [Makefile:65: objtool] Error 2
make[1]: *** [Makefile:1699: tools/objtool] Error 2
make[1]: Leaving directory '/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64'
make: *** [Makefile:4: all] Error 2
%

/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64/tools/build/Build.include действительно отсутствует. Какой пакет устанавливает этот файл?

Или может быть проще отключить retpoline в ядре насовсем? Можно ли это сделать без пересборки ядра?

Попробовал отключить retpoline при загрузке ядра, т.е. добавил в grub конфигурационный файл опцию spectre_v2=off, однако компиляция все равно срывается, теперь на другом:

% make V=1
make -C /lib/modules/`uname -r`/build/ M=/home/mrv/tmp modules
make[1]: Entering directory '/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64'
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (                \
echo >&2;                                                       \
echo >&2 "  ERROR: Kernel configuration is invalid.";           \
echo >&2 "         include/generated/autoconf.h or include/config/auto.conf are missing.";\
echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";      \
echo >&2 ;                                                      \
/bin/false)
mkdir -p /home/mrv/tmp/.tmp_versions ; rm -f /home/mrv/tmp/.tmp_versions/*
make -f ./scripts/Makefile.build obj=/home/mrv/tmp
(cat /dev/null;   echo kernel//home/mrv/tmp/test_mod.ko;) > /home/mrv/tmp/modules.order
  gcc -Wp,-MD,/home/mrv/tmp/.test_mod.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/8/include -I./arch/x86/include -I./arch/x86/include/generated   -I./include/drm-backport -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -DCC_HAVE_ASM_GOTO -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_AVX512=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -DCONFIG_TPAUSE=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -fno-jump-tables -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-int-in-bool-context -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -Wno-unused-const-variable -g -gdwarf-4 -pg -mrecord-mcount -mfentry -DCC_USING_FENTRY -fno-inline-functions-called-once -Wdeclaration-after-statement -Wno-pointer-sign -Wno-stringop-truncation -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -fmacro-prefix-map=./= -Wno-packed-not-aligned  -DMODULE  -DKBUILD_BASENAME='"test_mod"' -DKBUILD_MODNAME='"test_mod"' -c -o /home/mrv/tmp/.tmp_test_mod.o /home/mrv/tmp/test_mod.c
In file included from ./include/linux/module.h:18,
                 from /home/mrv/tmp/test_mod.c:1:
./include/linux/moduleparam.h:22:1: error: expected ‘,’ or ‘;’ before ‘static’
 static const char __UNIQUE_ID(name)[]       \
 ^~~~~~
./include/linux/module.h:158:32: note: in expansion of macro ‘__MODULE_INFO’
 #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
                                ^~~~~~~~~~~~~
./include/linux/module.h:196:34: note: in expansion of macro ‘MODULE_INFO’
 #define MODULE_LICENSE(_license) MODULE_INFO(license, _license)
                                  ^~~~~~~~~~~
/home/mrv/tmp/test_mod.c:19:1: note: in expansion of macro ‘MODULE_LICENSE’
 MODULE_LICENSE("GPL")
 ^~~~~~~~~~~~~~
make[2]: *** [scripts/Makefile.build:322: /home/mrv/tmp/test_mod.o] Error 1
make[1]: *** [Makefile:1571: _module_/home/mrv/tmp] Error 2
make[1]: Leaving directory '/usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64'
make: *** [Makefile:6: all] Error 2
%

Перехожу в /usr/src/kernels/4.18.0-348.20.1.el8_5.x86_64 и делаю make oldconfig && make V=1 prepare, почти сразу сваливается на невозможности найти tools/build/Build.include

 , , ,

cruz7
()

как автоматически активизировать systemd unit-файл при установке RPM

Приветствую,

Создал свой rpm, в состав которой также входит unit-файл описывающий systemd сервис. При установке rpm, данный файл копируется в /usr/lib/systemd/system, однако чтобы активировать сервис, все равно нужно сделать systemctl enable my_service.

Хочу исправить свой my_package.spec файл так, чтобы сервис активировался автоматически. Погуглив, добавил:

%post
%systemd_post my_service.service

Но это не помогает. Что еще нужно сделать или %systemd_post неверный подход?

Спасибо!

 , , ,

cruz7
()

сконвертировать ifcfg-eth0 в unit файл

Приветствую,

Можно ли в RedHat дистрибутивах (да и наверное во всех в которых применяется systemd) определять интерфейсы и их конфигурацию (IP, маски, маршруты и пр.), которые создаются при загрузке, не в /etc/sysconfig/network-scripts/ifcfg-* а в systemd unit-файлах?

Две причины:

1) Где-то читал, что RedHat планирует сделать /etc/sysconfig/network-scripts/ifcfg-* файлы obsolete и все будет через unit-файлы с хранилищем в формате key-value

2) Я бы хотел создавать интерфейсы своим скриптом, не нашел как это сделать средствами ifcfg-* файла.

 ,

cruz7
()

мое приложение создает сетевой интерфейс - как сохранить конфигурацию?

Приветствую,

OS - RedHat 8.0

Имеется приложение которое создает bridge интерфейс, конфигурирует его и назначает IP адрес – все это через netlink интерфейс. Теперь вопрос - как все это сделать persistent, то есть чтобы после перезагрузки системы конфигурация автоматически поднималась бы?

Как я понимаю, для этого есть NetworkManager который хранит конфигурацию в /etc/sysconfig/network-scripts/ifcfg-* То есть как я понимаю, у меня два варианта:

  1. Научить мое приложение общаться с NetworkManager (dbus?)

  2. Вручную (т.е. в моем приложении) создавать /etc/sysconfig/network-scripts/ifcfg-*

Есть ли какие-то еще варианты? Отказываться от приложения невозможно, оно выполняет еще и др. функционал.

 , ,

cruz7
()

grpc «прячет» соединения?

Играюсь с примерами на питоне, которые поставляются с grpc в директории examples\python*, например helloworld.

Заметил интересную особенность: когда стартую сервер на localhost:50051, а потом клиент, то не вижу установленного TCP соединения (использую ss -tnep), тем не менее tcpdump показывает обмен пакетов.

С другой стороны, telnet localhost 50051 и «ss» проказывает соединение.

Выглядит как будто grpc пытается как-то оптимизировать установление соединения? Либо grpc «включает» некую linux-фичу?

Буду признателен за пояснения!

 , ,

cruz7
()

kea dhcp: статическая привязка адресов

Приветствую,

Необходимо сделать статическую привязку dhcp-клиентов к IP адресу:

  1. клиент подключается и получает IP адрес

  2. в какой-то момент клиент отключается

  3. клиент опять полнимается и dhcp сервер должен выдпть такой же адрес, что и на первом шаге

Можно завести статические записи в kea конфиге, но для этого нужно заранее знать MAC-адреса или client-id всех клиентов. Но можно ли добиться того, чтобы сервер при первом выделении IP клиенту автоматически заводил бы на него статическую запись? Можно ли это сделать стандартными средствами Kea или нужно создать свою hook-библиотеку?

Спасибо!

 ,

cruz7
()

Kea-Dhcp: модификация Yang моделей и лицензия

Kea-Dhcp поддерживает Netconf и содержит коллекцию Yang моделей. Сам пакет распространяется под лицензией Mozilla Public License 2.0, но если я изменяю yang-файлы (модифицирую или добавляю новые), то как на это смотрит лицензия, нужно ли публиковать изменения? (ведь yang файлы не совсем исходники)

 , ,

cruz7
()

protobuf - описать сетевые интерфейсы

Приветствую

Раньше не имел дел с protobuf, теперь понадобилось вытягивать интерфейсы со всеми наиболее важными атрибутами. Создал вот такой proto-файл:

message PortRequest {
  string name = 1;
}

message PortReply {
  string name = 1;
  int32 ifindex = 2;
  int32 type = 3;
  bytes hw_address = 4;
  ...
}

message PortsReply {
  repeated PortReply Ports = 1;
}

service PortsService {
  rpc GetPort(stream PortRequest) returns (stream PortReply) {}
}

Хотелось бы еще добавить GetPorts для получения всех интерфейсов, но не уверен как это описать в схеме? Нужно ли добавлять новый request, или можно как-то использовать PortRequest?

Буду признателен за подсказки, спасибо!

 , ,

cruz7
()

DHCP: как выполнить vlan discovery

Приветствую. Понадобилось для одного embedded девайса делать VLAN discovery, то есть когда девайс заранее не знает c каим VlanID нужно конфигурировать интерфейс, но может его выяснить средствами dhcp, сохранить в persistent memory и в следующий раз пользоваться сохраненным VlanID. DHCP потому, что устройство специфическое и ничего другого нет.

Для этого я решил использовать dhclient-script, который выполняется клиентом в определенных «точках». Скрипту передаются различные переменные, например $reason и пр. - BOUND (получили адрес), RENEW (обновили), TIMEOUT/FAIL (не удалось получить ответ от dhcp сервера) и т.д.:

  1. конфигурируем порт с VlanID=2 (вроде как ID=1 зарезервирован)

  2. пробуем послать DHCPDISCOVER

  3. не удается -> вызывается скрипт в «точке» TIMEOUT

  4. конфигурируем порт с VlanID=3 и идем на шаг 2

  5. и так далее до тех пор пока не получим DHCPOFFER (то есть dhclient-script будет вызван с $reason=BOUND), значит определили VlanID, записали его в файл для след. раза.

Понятно что будет работать медленно, но авто-дискавери будет делаться только самый первый раз когда устройство совсем «голое».

Мне интересно, может быть есть какие-то альтернативные решения? Спасибо!

 , ,

cruz7
()

dhcp: API для управления конфигурацией сервера

Имеется dhcp сервер со следующей конфигурацией (передает данные клиенту в option-43):

option space my-space;
option my-space.node-ip code 1 = ip-address;
option my-space.node-name code 2 = text;

class "vendor-classes" {
        match option vendor-class-identifier;
}

subclass "vendor-classes" "my-class" {
        vendor-option-space my-space;
        option my-space.node-ip 10.5.6.7;
        option my-space.node-name "NodeName123";
}

Адрес указанный в option my-space.node-ip может назначаться динамически, то есть нужен механизм позволяющий менять конфигурацию сервера на лету.

На ум приходит два варианта:

1. Скрипт на dhcp-сервере - получающий новый IP адрес, меняющий конфиг и рестартующий демон. Но IMHO решение не элегантное, не атомарное.

2. Мне известно о OMAPI (http://www.ipamworldwide.com/ipam/isc-dhcp-api.html). Пробежался по документации, но как я понял поддерживаются только lease objects (release and renew), host objects, group и failover-state, и также graceful shutdown of the server. Но не похоже что OMAPI дает доступ к option space?

Если кто сталкивался с подобным, был бы рад услышать!

 ,

cruz7
()

isc-dhclient отказывается отправлять dhcp-client-id and vendor-class-id

Приветствую,

Имеется isc-dhcp-4.2.5 клиент и сервер (из пакетов) установленные на двух машинах с CentOS-7.4. По ряду причин не могу обновить дистрибутив .

Конфигурация сервера:

option domain-name "mydomain.org";
option domain-name-servers ns1.mydomain.org, ns2.mydomain.org;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;

option space myspace;
option myspace.node-ip code 1 = ip-address;

# Tell the server to return vendor-specific information
option dhcp-parameter-request-list 43;

class "vendor-classes" {
    match option vendor-class-identifier;
}

subclass "vendor-classes" "my-vendor-class-ID" {
    vendor-option-space myspace;
    option myspace.node-ip 10.5.6.7;
}

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.50 10.0.0.60;
    option routers 10.0.0.254;
}

Конфигурация клиента:

interface "veth0" {
    send dhcp-client-identifier "my-client-ID"; 
    send vendor-class-identifier "my-vendor-class-ID";
    send dhcp-lease-time 900;
}

Наблюдаю следующие проблемы:

1. Клиент отказывается отправлять опции dhcp-client-identifier и vendor-class-identifier (проверено tcpdump-ом)

2. Сервер, в свою очередь, не отправляет Option-43 (т.е vendor-specific information)

Выглядит так что клиент просто игнорирует эти опции (данная версия не поддерживает?) Что я делаю не так?

PS. Последний isc-dhcp (ver. 4.4.2) собранный из https://gitlab.isc.org/isc-projects/dhcp таких проблем не выявил.

 , ,

cruz7
()

обновить Ubuntu 16.04.7 LTS до 18.04.5 LTS

Имеется машина с достаточно старым дистрибутивом Ubuntu-16.04.7 LTS. Пакеты я обьновлял регулярно, но до сих пор не обновлял всю систему, весь дистрибутив целиком, включая ядро, системные библиотеки и пр.

Сейчас при логине, появляется сообщение что доступен новый релиз 18.04.5 LTS.

Насколько безопасно обновится с 16.04.7 до 18.04.5, имеются ли какие-то подводные камни? Просто никогда этого ранее не делал.

В частности:

a) Некоторые пакеты, последние версии которых отсутствовали в официальном репозитории Ubuntu-16.04.7, я скачивал из репозитория ubuntu-18.x.x и устанавливал .deb файлы. Не будет ли конфликта при апргрейде?

b) Ядро на этой машине не дистрибутивное (4.15.0-13-generic), а 4.15.0 (собрал сам, дистрибутивное ядро по какой-то причине не поддерживало мои WiFi интерфейс и видео карту). Будет ли проблема при обновлении, если ядро не из дистра?

Спасибо.

 , ,

cruz7
()

ядро шедулит код на изолированные ядра

Приветствую,

Имеется система на Intel Xeon Platinum 8160 CPU с ядром 4.19.71, присутствует 24 физических ядра и по 2 треда на ядро, т.е. в сумме — 48 логических ядер. Эксперимунтирую с виртуализацией (qemu и kvm) и хотел бы изолировать группу ядер от планировщика OS, т.е. чтобы эти ядра выполняли только код приложения на vcpu тредах из виртуальной машины. Добавил директиву isolcpus в grub.cfg:

isolcpus=1-23,25-47

Перезагрузился, однако вижу что ядерные треды выполняются на ядрах которые я пытаюсь изолировать :

# ps -A -L -o pid,nlwp,tid,c,psr,comm |sort -n -k 5 | grep 27
  148    1   148  0  27 kworker/27:0-mm_percpu_wq
  149    1   149  0  27 kworker/27:0H-events_highpri
  267    1   267  0  27 kworker/27:1-mm_percpu_wq
  799    1   799  0  27 kworker/27:1H-events_highpri
...
#

В выводе ps 5-я колонка это ID ядра, в данном случае 27, который согласно isolcpus= не должен пользоваться ядром.

Означает ли что ядерные треды это исключение из правил, и ядро все равно будет из выполнять на ядрах из директивы isolcpus или я упустил что-то очевидное?

Спасибо.

 , , , ,

cruz7
()

RSS подписка на новые темы