Если после установки системы, как у меня, у вас каталог /usr/src/ пуст, тогда придется воспользоваться исходными файлами с официального сайта.
1. Устанавливаем пакет subversion
# cd /usr/ports/devel/subversion # make install clean
теперь доступна команда svn, используется для извлечения чистой копии исходных кодов(с официльного сайта(репозитория) в локальный каталог(вашей машины). Для просмотра репозиториев через браузер используйте http://svnweb.FreeBSD.org/.
Предупреждение:
Если локальный каталог уже существует, но не был создан с помощью svn, переименуйте его или удалите перед загрузкой. Загрузка в существующий не-svn каталог может вызвать конфликты между существующими файлами и получаемыми из репозитория.
2. Заливаем к себе файлы с репозитория
# rm -rf /usr/src # svn checkout https://svn0.us-west.FreeBSD.org/base/releng/11.1/ /usr/src
, где первой строкой чистим папку, если в ней что-то еще есть, согласно предупреждению
svn0.us-west.FreeBSD.org — репозиторий
base — раздел с основными системными файлами FreeBSD
releng — ветка с исправлениями(bug-fix и security patches для соответствующего RELEAZE)
11.1 — (номер моего релиза)копирую содержимое этого каталога в
/usr/src/ — приемный каталог
Дополнительная информация, которая привела к накоплению вышеизложенной выжимки:
Мониторинг процессов и куда он привел
Используем top для отображения процессов. Находим PID нужного процесса.
Запускаем truss с опцией p для просмотра обращений данного процесса в системе.
truss -p PID
Нашел таким образом обращения openvpn:
root@vpn:/usr/ports # truss -p 557
write(1,»Mon Apr 2 10:17:21 2018 event_w»…,71) = 71 (0x47)
poll({ 6/POLLIN|POLLPRI 5/POLLIN|POLLPRI },2,18) = 0 (0x0)
poll({ 6/POLLOUT 5/0x0 },2,1009) = 1 (0x1)
sendto(6,»1\M-r,\M-v^`\M-B\M^[:q\M-z\M^Cw(«…,69,0,{ AF_INET6 [::ffff:192.168.1.8]:4747 },28) = 69 (0x45)
poll({ 6/POLLIN|POLLPRI 5/POLLIN|POLLPRI },2,1009) = 0 (0x0)
poll({ 6/POLLOUT 5/0x0 },2,2055) = 1 (0x1)
sendto(6,»1\0\0\^AQ\^[\M-::fQ\M-d\M-.)\M-)»…,38,0,{ AF_INET6 [::ffff:192.168.1.2]:60471 },28) = 38 (0x26)
poll({ 6/POLLIN|POLLPRI 5/POLLIN|POLLPRI },2,2055) = 1 (0x1)
recvfrom(6,»I\0\0\^B\0\0\^A~b8\M-j\M-X\M^K9″…,2030,0,{ AF_INET6 [::ffff:94.228.244.5]:49705 },0x7fffffffce34) = 41 (0x29)
poll({ 6/POLLIN|POLLPRI 5/POLLIN|POLLPRI },2,2055) = 1 (0x1)
recvfrom(6,»I\0\0\^A\^[f\M^^\^[\M-&+\M^Q}V»…,2030,0,{ AF_INET6 [::ffff:192.168.1.8]:4747 },0x7fffffffce34) = 72 (0x48)
poll({ 6/POLLIN|POLLPRI 5/POLLIN|POLLPRI },2,2055) = 0 (0x0)
poll({ 6/POLLIN|POLLPRI 5/POLLIN|POLLPRI },2,1177) = 0 (0x0)
Решил разобраться, что за AF_INET6 сыпятся так часто.
Можно отключить поддержку IPv6 и IPSec, закомментировав две строчки в конфигураторе ядра:
#options INET6
#options IPSEC
Название архитектуры зависит от CPU. Часто либо i386, либо amd64. Конфиг ядра, идущего в системе по умолчанию, называется GENERIC. Можно скопировать его и назвать, например, NEWKERNEL:
cd sys/amd64/conf
sudo cp GENERIC NEWKERNEL
У меня в системе отсутствует каталог /usr/src/sys, это означает, что исходные тексты ядра не были установлены. (ВОТ ТУТ начинается Эпопея, можно сразу листать до РЕШЕНИЯ отсутствия файла GENERIC). Наиболее простой способ установить их — запустить sysinstall как root, выбрать Configure, потом Distributions, потом src, потом base и sys. В моем случае(Freebsd работает на виртуальной машине Hyper-V на windows server 2012) sysinstall не работает. Скачал с помощью ftp и get исходный установочный диск FreeBSD-11.1-RELEASE-amd64-disc1.iso на FreeBSD.
Далее подключаем iso-образ в качестве CD диска командой mdconfig -a -t vnode -f PATH_TO_YOUR_ISO/ISOFILE.iso:
mdconfig -a -t vnode -f FreeBSD-11.1-RELEASE-amd64-disc1.iso
Устройство md автоматически создалось с помощью mdconfig
и получило имя, которое и отобразилось после выполнения аналогичной команды, например md0
или md1
. Моё устройство назвалось md1. Создал папку cdrom в корне диска. Подключил данное устройство в качестве диска командой mount устройство точка-монтирования:
mount -t cd9660 /dev/md1 /cdrom
Удаляем устройство командой
mdconfig -d -u X , где X- номер устройства
У меня не захотел удаляться, сославшись на занятость. Удалил с помощью флага f: umount -f /cdrom
Но еще до этого, после монтирования каталог cdrom оказался пуст(скорее всего сам образ диска был битый). Прикрутил к Hyper-V образ, а затем уже в FreeBSD смонтировал устройство cd0. После этого файлы появились в /cdrom. Но нужного файла с конфигурацией ядра и здесь нет, каталог src пуст. Решил скачать DVD образ FreeBSD, возможно там есть. По пути установил wget(при установке ругнулась на отсутсвие в /etc/make.conf строки DEFAULT_VERSIONS+=ssl=openssl). Добавил, предварительно создав сам make.conf.
Качнул образ:
wget —no-check-certificate https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.1/FreeBSD-11.1-RELEASE-amd64-dvd1.iso
Смонтировал уже быстро. Но пусто и тут оказалось.
Нашел, что sysinstall заменен на bsdinstall. Оказалось это не одно и тоже. Пошел другим путем.
Having spent the better part of the past two days trying, in vain I might add, to completely disable IPv6 in the kernel, I can’t seem to do it. I’ve added the obligatory lines to /etc/rc.conf:
ip6addrctl_enable="NO"
ip6addrctl_policy="ipv4_prefer"
ipv6_activate_all_interfaces="NO"
ipv6_network_interfaces="none"
Those were selected from a handful of online posts that seemed related, and from running through the /etc/defaults/rc.conf file and finding any seemingly relevant IPv6 settings and saying «NO!»
However, these haven’t achieved the desired goal. Essentially, what I would like to see when I check the sysctl for the kernel ipv6 feature is as follows:
sysctl -n kern.features.inet6
0
Здесть у меня вышло значение 1, вместо 0.
Выполнил следующее:
в /etc/sysctl.conf добавить
net.inet6.ip6.auto_linklocal=0
потом
sysctl net.inet6.ip6.auto_linklocal=0
Все, теперь это уже работает и продолжится после перезагрузки.
И все равно после перезагрузки на интерфейсе lo0 есть ipv6. Вернулся к идее пересборки ядра. Дошел до документации на официальном сайте(отменив изменения в make.conf и src.conf):
Примечание:
Если каталог /usr/src/
отсутствует в вашей системе (или этот каталог пуст), то это значит, что исходные тексты не были установлены. Наиболее простой способ установить их — воспользоваться csup(1), как описано в Раздел 21.5, <<Синхронизация исходных текстов>>. Далее, создайте символическую ссылку на /usr/src/sys/
:
#
ln -s /usr/src/sys /sys
Нашел, что
Начиная с 28 февраля 2013 года порты FreeBSD перестанут быть доступны через CVS, т.е. их нельзя будет зеркалировать или синхронизировать для поддержания в актуальном виде через такие инструменты как CVSup. Причиной прекращения поддержки CVS является переход к использованию Subversion для разработки и поддержания дерева портов, в то время как используемые средства экспорта SVN в CVS имеют ряд ограничений, приводящих к затруднениям при организации работы зеркал.
Пользователям предлагается спланировать переход на portsnap или svn для обновления дерева портов.
Перехожу к Раздел 21.5, <<Синхронизация исходных текстов>>
Стоп.
Нашел тут же: О том, как актуализировать исходные тексты с использованием Subversion, описано в Раздел A.4, <<Использование Subversion>>. Идем сюда.
A.4.1. Введение
По состоянию на июль 2012 года FreeBSD использует Subversion в качестве основной системы контроля версий для хранения всего исходного кода FreeBSD, документации и Коллекции Портов.
Примечание:
Subversion в основном является инструментом разработчика. Большинству пользователей следует использовать
freebsd-update
(Раздел 21.2, <<Обновление FreeBSD>>) для обновления основной системы FreeBSD иportsnap
(Раздел 5.6, <<Использование Коллекции Портов>>) для обновления Коллекции Портов FreeBSD.
Внимая примечанию, возвращаюсь к Разделу 21.2, <<Обновление FreeBSD>>
Прочитал. Документация, снова привела меня к Раздел A.4, <<Использование Subversion>>.
Совершил открытие. https://svnweb.freebsd.org/base/stable/11/sys/amd64/conf/ тут нашел файлы конфигурации ядра. Можно их с помощью svn перетянуть себе. Удобная штука! Там много других файлов исходных.
Пробую качнуть с московского репозитория, который здесь в списке нашел:
svn checkout https://svn0.ru.FreeBSD.org/base/head/stable/11/sys/amd64/conf /usr/src/amd64/conf
фиг. Получил «svn: E670008: hostname nor servname provided, or not known».
Пробую с основного, буржуйского(кстати можно пользоваться протоколом rsync):
svn checkout https://svn0.us-west.FreeBSD.org/base/head/stable/11/sys/amd64/conf /usr/src/…/amd64/conf
Тоже ругается, но хотя бы нашел хост, оказалось head лишее, и sys пропустил в приемном каталоге. Как оказалось дальше, этого одного каталога мало, скопирую весь amd64 Исправляюсь:
svn checkout https://svn0.us-west.FreeBSD.org/base/stable/11/sys/amd64 /usr/src/sys/amd64
РЕШЕНО!(ошибочка как дальше выяснилось..) В /usr/src/amd64/conf лежит GENERIC. Можно переходить к сборке ядра без IPv6 согласно официальному руководству. Скопирую в отдельный файл и отредактирую его /usr/src/amd64/conf/NEWGENERIC.
cp GENERIC NEWGENERIC
Закоментировал строку options INET6
wget —no-check-certificate https://svn0.us-west.freebsd.org/base/stable/11/sys/Makefile
- Перейдите в каталог
/usr/src
:#
cd /usr/src
- Соберите ядро:
#
make buildkernel KERNCONF=NEWKERNEL
- Установите новое ядро:
#
make installkernel KERNCONF=NEWKERNEL
Не пошло.. отсутвует Makefile в /usr/src/ в исходниках тоже его не нашел. Даже папки srs нет там. Накопал это:
If you’re just trying to get the source directory, you might find it easier to grab the source manually:
ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/9.1-RELEASE/
The file you want is src.txz. This is the release version however, and you may want to get the latest patches. I can’t recall if freebsd-update picks that up or not.
По аналогии переделал в ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/11.1-RELEASE/
ура! есть ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/11.1-RELEASE/src.txz, качаю
открываю клиента фтп: ftp
заходим на хост: open ftp.freebsd.org
(вхожу под anonymous)
далее иду в нужную директорию: cd pub/FreeBSD/releases/amd64/amd64/11.1-RELEASE/
качаю файл: get src.txz
выхожу из клиента: bye
MC нормально открывает этот архив, берем что нужно и копируем куда надо.
Упс.. да это же таже штука что и на исходниках.. нет тут Makefile, смотрим дальше.. С конца надо читать! Нашел! Оказывается что нужно целиком все засунуть в src, берем теперь из папки RELENG(заодно узнал, что это bug-fix ветка). Через браузер можно здесь посмотреть содержимое: https://svnweb.freebsd.org/base/releng/. Первой строкой удаляем прежний src, второй заливаем заново с исходников.
РЕШЕНИЕ: # rm -rf /usr/src # svn checkout https://svn0.us-west.FreeBSD.org/base/releng/11.1/ /usr/src
вот так просто
исправить отсутствие файла конфигурации ядра GENERIC в FreeBSD 11.1 установленной с CD-образа
Пробую обновить ядро теперь. Возвращаю ссылку на обновленое ядро назад(тут стало понятнее зачем ссылку лучше делать и хранить ядро новое отдельно):
cd /usr/src/sys/amd64/conf
ln
-s /root/kernels/NEWGENERIC
собираю
cd /usr/src
make buildkernel KERNCONF=NEWGENERIC
make installkernel KERNCONF=NEWGENERIC
reboot now
Последний аккорд:
truss -p 507
,где 507 - PID процесса openvpn.
AF_INET6 больше не беспокоят.
Вот и вербное воскресение за окном и яркая Луна. Приятных снов!