Современные нагрузки требуют высокой производительности сетевых решений, а классические инструменты вроде
iptables и nftables уже не всегда справляются. Здесь на сцену выходят eBPF (Extended Berkeley Packet Filter) и XDP (eXpress Data Path) - технологии для глубокой фильтрации и анализа трафика прямо в ядре Linux.eBPF - механизм в ядре Linux, позволяющий безопасно выполнять программы в режиме ядра без изменения исходного кода. Используется для фильтрации пакетов, мониторинга, трассировки и профилирования системы.
XDP - подсистема ядра Linux, основанная на eBPF, позволяющая обрабатывать пакеты на самом раннем этапе их поступления в систему (на уровне драйвера сетевой карты).
sudo apt install -y bpfcc-tools linux-headers-$(uname -r) #на Debian/Ubuntu
sudo dnf install -y bpftool bcc #на RHEL/Fedora
sudo /usr/sbin/tc qdisc add dev eth0 clsact
sudo /usr/sbin/tc filter add dev eth0 egress bpf direct-action obj xdp_prog_kern.o
Это позволит анализировать выходящий трафик с интерфейса eth0.
#include <linux/bpf.h>
int xdp_drop(struct __sk_buff *skb) {
return XDP_DROP; // Отбрасываем пакет
}
Компилируем и загружаем программу в XDP:
clang -O2 -target bpf -c xdp_drop.c -o xdp_drop.o
sudo ip link set dev eth0 xdp obj xdp_drop.o
Теперь весь трафик на интерфейсе eth0 будет блокироваться на уровне драйвера.
DDoS-защита - можно отбрасывать вредоносный трафик без нагрузки на процессор.
Балансировка нагрузки - построение L4-L7 балансировщиков без iptables.
Мониторинг сети - сбор детальной статистики по пакетам в реальном времени.
Примеры таких решений: Cilium, Suricata, Falco, Katran (Facebook), XDP Firewall.
#linux #eBPF #XDP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Если вам нужен гибкий и высокопроизводительный DHCP-сервер для управления IP-адресами в сети, стоит обратить внимание на Kea DHCP от ISC. В отличие от классического ISC DHCP, Kea предлагает:
Динамическое обновление конфигурации без перезапуска сервера
Поддержку API RESTful для управления в реальном времени
Работу с базами данных (MySQL, PostgreSQL, Cassandra)
Поддержку DHCPv4 и DHCPv6
Для примера, развернем DHCP-сервер Kea на Ubuntu/Debian и настроим его на раздачу IP-адресов.
sudo apt update && sudo apt install -y isc-kea-dhcp4-server
На CentOS/RHEL Kea можно установить через EPEL:
sudo dnf install -y epel-release
sudo dnf install -y kea
/etc/kea/kea-dhcp4.confПример минимальной конфигурации:
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "eth0" ]
},
"subnet4": [
{
"subnet": "192.168.1.0/24",
"pools": [
{ "pool": "192.168.1.100 - 192.168.1.200" }
],
"option-data": [
{ "name": "routers", "data": "192.168.1.1" },
{ "name": "domain-name-servers", "data": "8.8.8.8, 8.8.4.4" }
]
}
]
}
}
eth0 - сетевой интерфейс, с которого раздаются адреса
192.168.1.100 - 192.168.1.200 - пул IP-адресов
192.168.1.1 - шлюз по умолчанию
8.8.8.8, 8.8.4.4 - DNS-серверы
sudo systemctl enable --now kea-dhcp4
sudo systemctl status kea-dhcp4
Проверяем логи для диагностики:
journalctl -u kea-dhcp4 --no-pager -n 50
Если нужно перезапустить DHCP-сервер после изменения конфигурации:
sudo systemctl restart kea-dhcp4
cat /var/lib/kea/dhcp4.leases
Запросим новый IP с клиента:
dhclient -v eth0
Если адрес не выдается, смотрим активные порты Kea:
sudo ss -tulpn | grep kea
Подключение к MySQL или PostgreSQL для хранения аренды IP
Настройка статических IP-адресов для MAC-адресов
Работа с DHCPv6 для IPv6-сетей
Динамическое управление через API RESTful
#linux #DHCP #Kea
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍3
Настройка сетевого стека в Linux - тема специфичная и непростая. В сети полно материалов, но большинство из них просто копируют друг друга, а рекомендации часто устаревшие. Ниже актуальная на сегодня подборка параметров, которые стоит учитывать при настройке сервера. Основной акцент - на управление памятью и таймаутами. Оперативки сейчас много, так что имеет смысл использовать это преимущество.
net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.ip_local_port_range = 10240 65535
net.core.somaxconn = 16384
net.core.rmem_default = 851968
net.core.wmem_default = 851968
net.core.rmem_max = 12582912
net.core.wmem_max = 12582912
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rfc1337 = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
Дополнительно - игнорировать ICMP echo-запросы (ping):
net.ipv4.icmp_echo_ignore_all = 1
Параметры вроде tcp_mem, tcp_rmem, tcp_wmem зависят от объема оперативной памяти и автоматически настраиваются при загрузке. Их можно регулировать вручную при необходимости, но в большинстве случаев дефолтных значений достаточно.
#linux #sysctl #TCP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥6❤4
Если нужно быстро узнать, какие приложения, обновления или MSI-пакеты были установлены или удалены на Windows-системе за последнюю неделю - поможет встроенный журнал Reliability Monitor и небольшой PowerShell-скрипт.
Скрипт вытащит:
Установку/удаление MSI пакетов
Установку/удаление приложений из Microsoft Store
Установленные обновления Windows
Пользователя, от имени которого происходили действия
$DaysAgo = (Get-Date).AddDays(-7)
$RealiabilityFilter = "TimeGenerated > '$DaysAgo' and (SourceName='Microsoft-Windows-WindowsUpdateClient' or SourceName='MsiInstaller')"
Get-CimInstance -ClassName Win32_ReliabilityRecords -Filter $RealiabilityFilter |
Select-Object TimeGenerated, ProductName, User, Message |
Out-GridView
Скрипт использует данные из журнала Win32_ReliabilityRecords и отфильтровывает события только по установке/удалению софта. Отображение в Out-GridView - удобно и наглядно для быстрого анализа.
Отличный инструмент, если нужно быстро понять, что происходило с системой в плане установки ПО.
#windows #audit #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Надежный DNS - это основа стабильной работы инфраструктуры. Если основной DNS падает, могут лечь и внутренние сервисы, и доступ к внешним ресурсам. Один из проверенных способов построения отказоустойчивой DNS-системы - связка Bind9 (авторитетный DNS) + Unbound (рекурсивный кеширующий DNS).
Bind9 отвечает за авторитетные зоны — внутренние домены, PTR-записи, сервисные SRV и т.д.
Unbound обрабатывает внешние запросы (Google, GitHub, NTP и прочее), кеширует и защищает от DNS-рекурсии.
Между ними можно использовать dnsdist для балансировки и DDoS-защиты (опционально).
Обе службы работают на разных портах (например, Bind на 1053, Unbound на 53).
sudo apt install bind9
Конфигурация зоны:
zone "corp.lan" {
type master;
file "/etc/bind/zones/db.corp.lan";
allow-query { any; };
};
Слушаем нестандартный порт:
options {
listen-on port 1053 { any; };
recursion no;
};
sudo apt install unbound
Базовый
unbound.conf:
server:
interface: 0.0.0.0
access-control: 192.168.0.0/16 allow
verbosity: 1
# Кеширование и защита
cache-max-ttl: 86400
hide-identity: yes
hide-version: yes
# Проксирование запросов во внутренние зоны на Bind
local-zone: "corp.lan." transparent
forward-zone:
name: "corp.lan"
forward-addr: 127.0.0.1@1053
Прописываем оба IP-адреса на клиентах или в DHCP:
DNS1: 192.168.1.10
DNS2: 192.168.1.11
Используем keepalived или VRRP для виртуального IP, если хотим активный кластер.
1. Используйте dnsdist для фильтрации, балансировки и rate-limit.
2. Следите за логами (/var/log/syslog или systemd-journald).
#DNS #Bind9 #Unbound
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Если вы проводите много времени в терминале - переход на zsh и настройка Oh My Zsh может серьёзно упростить и ускорить вашу работу. Это не просто замена bash, а настоящий рабочий инструмент с автодополнением, подсветкой синтаксиса, git-индикацией и кучей других плюшек.
sudo apt install zsh # или brew install zsh на macOS
chsh -s $(which zsh) # сделаем zsh шеллом по умолчанию
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Powerlevel10k:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
И укажите в .zshrc:
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git z sudo zsh-autosuggestions zsh-syntax-highlighting)
git - алиасы вроде gst (git status), gco (git checkout)
z - умное перемещение по папкам (находит нужную по частичному совпадению)
sudo - быстрое добавление sudo при повторе команды с ESC+ESC
zsh-autosuggestions - автоподсказки по истории
zsh-syntax-highlighting - подсветка ошибок до нажатия Enter
Автоисправление команд (grpe → grep)
Алиасы можно описывать прямо в .zshrc:
alias gs='git status'
alias ll='ls -alF'
alias ..='cd ..'
#zsh #linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👎2😁1💊1
Если вы регулярно пишете Dockerfile'ы, следует добавить в свой арсенал Hadolint - это линтер, который проверяет как синтаксис, так и best practices. Он поможет выявить ошибки, неточности и неочевидные нюансы на этапе написания. В том числе - проверит shell-команды с помощью правил из ShellCheck.
Hadolint можно использовать:
Локально (через Docker или бинарник)
Через онлайн-версию
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN go mod tidy && \
CGO_ENABLED=0 GOOS=linux go build -o app .
FROM alpine:3.19
RUN apk add --no-cache ca-certificates
WORKDIR /root/
COPY --from=build /app/app .
CMD ["./app"]
Проверка:
docker run --rm -i hadolint/hadolint < Dockerfile
Вывод Hadolint:
DL3007: Не используйте latest, всегда указывайте версию (например, alpine:3.19)
DL3018: Указывайте конкретные версии пакетов при apk add - это улучшает воспроизводимость сборки
FROM debian:bookworm
RUN apt-get update && \
apt-get install -y --no-install-recommends apache2 && \
apt-get clean && rm -rf /var/lib/apt/lists/*
EXPOSE 80 443
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Hadolint замечает:
DL3008: Указывайте точные версии пакетов (например, apache2=2.4.57-1)
DL3009: Чистите списки apt-пакетов после установки
DL3015: Используйте --no-install-recommends, чтобы не тащить лишнее
latest, без версий, без очистки - всё это может привести к нестабильной сборке. Особенно при CI/CD. Линтер Hadolint позволяет быстро выявить подобные места, не дожидаясь багов в проде.
brew install hadolint # macOS
sudo apt install hadolint # Ubuntu (через snap или вручную)
Или через Docker:
docker run --rm -i hadolint/hadolint < Dockerfile
Рекомендации Hadolint в большинстве случаев точны, понятны и логичны. Если вы ещё не используете его - самое время начать.
#Docker #Hadolint
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
По умолчанию настройки GPO (Group Policy Objects) в Windows обновляются в следующих случаях:
Обновление происходит только если служба Group Policy Client (gpsvc) обнаружит изменение версии политики. Номер версии хранится в файле:
<Имя_контроллера_домена>\SYSVOL\<домен>\Policies\<GUID>\gpt.ini
Хотите применить изменения немедленно на удалённой машине? Используйте один из способов:
1. Кликните правой кнопкой по нужному OU (организационному подразделению)
2. Выберите "Group Policy Update"
Invoke-GPUpdate -Computer "PC01" -RandomDelayInMinutes 0
Команда принудительно обновит политики на удалённой системе без задержек.
#windows #GPO #GroupPolicy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🤔1🤡1
Одна из полезных, но редко используемых функций SMB - Access-Based Enumeration (ABE). Она скрывает файлы и папки, к которым у пользователя нет доступа, делая сетевые шары более удобными и безопасными.
При включении ABE пользователь видит только те файлы и папки, к которым у него есть NTFS-доступ (минимум Read). Всё остальное остаётся скрытым. Это особенно полезно в папках с большим количеством вложенных директорий (например, для отделов компании).
Windows Server (SMB):
Get-SmbShare DOCS | Set-SmbShare -FolderEnumerationMode AccessBased
Samba (Linux, FreeBSD). Добавьте в
smb.conf:
hide unreadable = Yes
Скрытие самих расшаренных папок:
access based share enum = Yes
#SMB #server
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🗿4
Среди утилит для сбора информации о железе в Linux
dmidecode выделяется особенным подходом:в отличие от
lshw, hwinfo или inxi, она не опрашивает оборудование напрямую, а читает таблицу DMI/SMBIOS, где уже содержится вся нужная информация. Поэтому работает практически мгновенно, без лишней нагрузки.
# Информация о процессоре
dmidecode -t 4
# или
dmidecode -t processor
Тип оборудования Ключ -t
BIOS 0 или bios
Система 1 или system
Материнская плата 2 или baseboard
Корпус 3 или chassis
Процессор 4 или processor
Память 17 или memory
Кэш 7 или cache
Порты, слоты и т.д. 8–9 и выше
dmidecode -s processor-version
dmidecode -s processor-frequency
Чтобы увидеть все доступные ключи:
dmidecode -s
dmidecode -q -t processor
dmidecode корректно работает только на физическом железе. В виртуальных машинах информация может быть неполной или отсутствовать совсем - это зависит от гипервизора и его настроек.#linux#dmidecode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Ядро Linux - это не монолит, в котором всё скомпилировано раз и навсегда. Оно устроено куда гибче. Большинство драйверов, подсистем и расширений — это загружаемые модули ядра (kernel modules), которые можно подключать и отключать "на лету", без перезагрузки системы.
Модуль ядра - это объектный файл (.ko), содержащий часть функциональности, которая может быть подключена к ядру динамически. Это может быть драйвер оборудования, файловая система, сетевая функциональность и даже механизмы безопасности (например, AppArmor или SELinux).
lsmod
Эта команда выведет список активных модулей, сколько раз они используются и какими другими модулями зависят.
modprobe имя_модуля
Если вы знаете, какой драйвер нужен (например, vfat для FAT-файловых систем), вы можете подгрузить его в ядро прямо во время работы.
modprobe -r имя_модуля
Не все модули можно выгрузить - если они заняты (используются другими модулями или активными процессами), команда завершится ошибкой.
Обычно они находятся в
/lib/modules/$(uname -r)/kernel/Можно искать по названию:
find /lib/modules/$(uname -r) -type f -name '*имя*'
Модули ядра напрямую влияют на:
производительность
безопасность
стабильность системы
поддержку "нестандартного" оборудования
#linux #kernel #modules
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
В Windows Server 2019 и 2022 есть неприятная особенность (или всё-таки баг?), из-за которой нельзя изменить часовой пояс через графический интерфейс. Даже с правами администратора попытка изменить настройки через классическую панель (timedate.cpl) или "Параметры" приводит к ошибке о недостатке разрешений.
С помощью tzutil:
tzutil /s "Russian Standard Time"
Или PowerShell:
Get-TimeZone -ListAvailable | Where-Object DisplayName -like "*Moscow*" | Set-TimeZone
Также можно запустить timedate.cpl с повышенными правами (Run as Administrator) и всё заработает как надо.
#WindowsServer #timezone
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤔1🤡1
Иногда на сервере внезапно заканчивается свободное место - и начинается беготня по командам du, find, lsof, вспоминание синтаксиса и пляски с пайпами. А можно проще. Сохранить себе в закладки bash-скрипт topdiskconsumer, который соберёт всё нужное за тебя.
Он запускается из любой директории и автоматически определяет, с какого тома (mount point) нужно искать.
Далее собирает:
▪ Топ-20 самых крупных файлов
▪ Топ-20 самых "тяжёлых" директорий
▪ Топ-20 больших файлов старше 30 дней
▪ Топ-20 удалённых, но не освобождённых файлов (файлы с открытым дескриптором)
Скрипт не требует зависимостей, стороннего ПО или установки. Всё - стандартные утилиты:
find, du, sort, lsof. Примеры:
du -hcx --max-depth=6 / 2>/dev/null | sort -rh | head -n 20
find / -mount -ignore_readdir_race -type f -exec du -h "{}" + 2>&1 \
| sort -rh | head -n 20
find / -mount -ignore_readdir_race -type f -mtime +30 -exec du -h "{}" + 2>&1 \
| sort -rh | head -20
intNumFiles в начале скрипта или передать флаг -l.
./topdiskconsumer --help
Ссылка на GitHub
#linux #bash
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🫡1
На сервере делаются ежедневные резервные копии, но не хочется тратить кучу места на дублирование одних и тех же файлов? Есть отличный способ - использовать rsync с жёсткими ссылками (hardlinks) для дедупликации. Это позволяет хранить полные снепшоты, при этом экономя место.
Бэкапы выглядят как отдельные директории (backup-2025-05-13, backup-2025-05-12), но все неизмененные файлы - это просто ссылки на одни и те же иноды.
Если файл не изменился - он физически не дублируется, а просто переиспользуется в новом бэкапе.
Пример каталогов:
/backups/
├── daily.0 ← сегодня
├── daily.1 ← вчера
├── daily.2
└── daily.3
daily.0 - свежий бэкап.
daily.1, daily.2, ... - предыдущие снепшоты.
При каждом новом запуске:
старые бэкапы смещаются на +1 (daily.2 → daily.3)
daily.0 создаётся как --link-dest от daily.1
#!/bin/bash
SRC="/home/user"
DEST="/backups"
MAX=7 # сколько дней хранить
# Сдвигаем старые бэкапы
for ((i=MAX-1; i>=0; i--)); do
if [ -d "$DEST/daily.$i" ]; then
mv "$DEST/daily.$i" "$DEST/daily.$((i+1))"
fi
done
# Создаём новый бэкап с дедупликацией
LINK=""
if [ -d "$DEST/daily.1" ]; then
LINK="--link-dest=$DEST/daily.1"
fi
rsync -aAX --delete $LINK "$SRC/" "$DEST/daily.0"
- Каждый бэкап - полный, можно восстановить всё в конкретном состоянии.
- Экономия места - используется только дополнительное место для новых/изменённых файлов.
- Простота восстановления: rsync обратно или просто cp.
#linux #backup
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Если облако не ваш выбор, а хочется полного контроля над железом - Kubernetes на bare-metal отличный вариант. В этом посте будет описан базовый путь, как развернуть свой кластер на физических серверах с нуля.
Один мастер-узел (control plane)
Один или более worker-узлов
Ubuntu Server 22.04+ (или другой поддерживаемый дистрибутив)
Сеть с доступом между узлами (ssh + порты k8s)
root или sudo-доступ
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl apt-transport-https ca-certificates software-properties-common
Выключаем swap (Kubernetes его не любит):
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo systemctl restart containerd
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt update
sudo apt install -y kubeadm kubelet kubectl
sudo apt-mark hold kubeadm kubelet kubectl
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
После успешной инициализации:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sudo kubeadm join 192.168.0.10:6443 --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kubectl get nodes
kubectl get pods --all-namespaces
#kubernetes #baremetal
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍9🔥2❤1
Развёртывание Linux по сети с PXE
Когда нужно установить Linux на множество серверов или ПК без USB-флешек и дисков, на помощь приходит PXE (Preboot Execution Environment) - загрузка ОС по сети. PXE позволяет запустить установщик Linux прямо из сети, что особенно удобно в дата-центрах, офисах и лабораториях.
🌟 Как это работает?
🌟 Что нужно для развертывания PXE?
1️⃣ Устанавливаем нужные пакеты. На PXE-сервере установим DHCP, TFTP и Apache (для раздачи образов):
2️⃣ Настраиваем DHCP для PXE. Редактируем
Перезапускаем DHCP:
3️⃣ Настраиваем TFTP-сервер. Указываем папку для загрузки PXE-файлов в /etc/default/tftpd-hpa:
Перезапускаем:
4️⃣ Загружаем PXELINUX. Скачиваем файлы для PXE:
Создаём каталог для меню:
5️⃣ Создаём загрузочное меню PXE. Создаём файл /srv/tftp/pxelinux.cfg/default:
6️⃣ Готовим установочные файлы. Загружаем образы на веб-сервер:
Перезапускаем Apache:
7️⃣ Запускаем установку по сети. Теперь включаем клиентский компьютер, в BIOS включаем PXE-загрузку и выбираем сетевой интерфейс в качестве загрузочного устройства.
Клиент загрузится и начнёт установку Linux прямо из сети.
#linux #install
🧑💻 NetworkAdmin
Когда нужно установить Linux на множество серверов или ПК без USB-флешек и дисков, на помощь приходит PXE (Preboot Execution Environment) - загрузка ОС по сети. PXE позволяет запустить установщик Linux прямо из сети, что особенно удобно в дата-центрах, офисах и лабораториях.
Компьютер включается и запрашивает сетевой загрузчик по DHCP.
Сервер отвечает и передаёт загрузочный образ через TFTP.
Клиент загружает ядро Linux и переходит к установке системы.
DHCP-сервер (для раздачи PXE-загрузчика)
TFTP-сервер (для передачи загрузочных файлов)
HTTP/NFS-сервер (для хранения установочных файлов)
sudo apt update && sudo apt install isc-dhcp-server tftpd-hpa apache2
/etc/dhcp/dhcpd.conf:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
next-server 192.168.1.10; # PXE-сервер
filename "pxelinux.0";
}
Перезапускаем DHCP:
sudo systemctl restart isc-dhcp-server
TFTP_DIRECTORY="/srv/tftp"
TFTP_OPTIONS="--secure"
Перезапускаем:
sudo systemctl restart tftpd-hpa
sudo mkdir -p /srv/tftp
cd /srv/tftp
sudo apt install syslinux pxelinux
sudo cp /usr/lib/PXELINUX/pxelinux.0 .
sudo cp /usr/lib/syslinux/modules/bios/* .
Создаём каталог для меню:
mkdir -p /srv/tftp/pxelinux.cfg
DEFAULT menu.c32
PROMPT 0
TIMEOUT 100
ONTIMEOUT install
LABEL install
MENU LABEL Install Ubuntu 22.04
KERNEL ubuntu/vmlinuz
APPEND initrd=ubuntu/initrd.gz netboot=http://192.168.1.10/ubuntu/
sudo mkdir -p /var/www/html/ubuntu
cd /var/www/html/ubuntu
wget http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/current/images/netboot/netboot.tar.gz
tar -xzf netboot.tar.gz
Перезапускаем Apache:
sudo systemctl restart apache2
Клиент загрузится и начнёт установку Linux прямо из сети.
#linux #install
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19👎1🔥1