Новости:

Форуму исполнилось 14 лет!

Мы в матрице .
Реализован единый вход, т.е  пользователи форума, могут войти в матрицу со своим логин-паролем и наоборот. У пользователей, зарегистрированных на форуме до 01.07.2026 г., могут возникать ошибки, типа "Не верный логин или пароль". Рекомендуется сменить пароль (Forgot Password).

Мы в телеге .

Главное меню

минимальный набор пакетов для работы slackware

Автор AlternativA, 18 сентября 2026, 22:54:04

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

AlternativA

Всем доброго.

Ещё раз поднимаю избитую тему, попробовал собрать минимальный набор пакетов, получилось на 1,1Гб
правда не то чтобы прям вот мини получился, но вроде рабочий.

Цитироватьa/aaa_base
a/aaa_glibc-solibs
a/aaa_libraries
a/aaa_terminfo
a/acl
a/attr
a/bash
a/bin
a/bzip2
a/coreutils
a/cracklib
a/dcron
a/devs
a/dialog
a/dosfstools
a/e2fsprogs
a/elogind
a/etc
a/eudev
a/file
a/findutils
a/gawk
a/glibc-zoneinfo
a/grep
a/gzip
a/hostname
a/infozip
a/inih
a/kernel-firmware
a/kernel-huge
a/kernel-modules
a/kmod
a/less
a/libpwquality
a/lilo
a/openssl-solibs
a/pam
a/pkgtools
a/procps-ng
a/sed
a/shadow
a/sysklogd
a/sysvinit
a/sysvinit-functions
a/sysvinit-scripts
a/tar
a/time
a/util-linux
a/which
a/xz
ap/diffutils
ap/htop
ap/lsof
ap/mc
ap/nano
ap/slackpkg
ap/sqlite
l/brotli
l/elfutils
l/gdbm
l/glib2
l/gmp
l/libcap
l/libcap-ng
l/libedit
l/libffi
l/libidn2
l/libnl3
l/libpsl
l/libssh2
l/libunistring
l/mpfr
l/ncurses
l/pcre
l/pcre2
l/readline
l/slang
l/zlib
l/zstd
n/ca-certificates
n/curl
n/dhcpcd
n/gnupg2
n/iproute2
n/iputils
n/libassuan
n/libgcrypt
n/libgpg-error
n/libksba
n/libmnl
n/libtirpc
n/network-scripts
n/nghttp2
n/npth
n/openssh
n/openssl
n/pinentry
n/vsftpd
n/wget

столкнулся с трудностями которые пока не могу решить
1. во время загрузки интерфейс перепрыгивает с eth0 на eth1

2. dhcpcd не получает ip адреса с роутера и роутер его не видит.
Цитировать1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 7c:d3:0a:37:c3:04 brd ff:ff:ff:ff:ff:ff
3: wlan1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 50:5b:c2:84:d2:35 brd ff:ff:ff:ff:ff:ff

Graf

По п.1. пропиши жёстко в /etc/udev/rules.d/70-persistent-net.rules
По п.2. а пинги идут до роутера, если статику прописать?

AlternativA

ЦитироватьПо п.1. пропиши жёстко в /etc/udev/rules.d/70-persistent-net.rules
получилось, спс

ЦитироватьПо п.2. а пинги идут до роутера, если статику прописать?
невероятно, но заводской патчкорд оказался битым. Всё завелось как только его поменял

AlternativA

ЦитироватьПо п.1. пропиши жёстко в /etc/udev/rules.d/70-persistent-net.rules
есть нюанс. образ который сейчас собираю, планируется раскидать на разные сервера с 4 сетевухами и разных ПК. Пытаюсь собрать полный скрипт, чтобы вся установка и настройка была максимально автоматизирована, т.к. не я всегда буду рядом с установкой.

как ещё можно решить эту проблему

Graf

Цитироватькак ещё можно решить эту проблему
Дык делаешь скрипт, который ловит МАКи и прописывает в /etc/udev/rules.d/70-persistent-net.rules "согласно купленным билетам"  :biggrin_mini:

AlternativA

ЦитироватьДык делаешь скрипт, который ловит МАКи и прописывает в /etc/udev/rules.d/70-persistent-net.rules "согласно купленным билетам"  :biggrin_mini:

и тоже верно

AlternativA

ЦитироватьДык делаешь скрипт, который ловит МАКи и прописывает в /etc/udev/rules.d/70-persistent-net.rules "согласно купленным билетам"

покажи как может выглядеть такой скрипт, моих познаний не хватает пока, а ии на вертит такого.....

Graf

Цитата: AlternativA от 29 сентября 2026, 08:40:32покажи как может выглядеть такой скрипт, моих познаний не хватает пока, а ии на вертит такого.....

Чёт ленивый я стал...  :biggrin_mini:
А ИИ, ничё так, сделал, нормально.

#!/bin/bash
#
# Назначение:
#   Постоянное именование сетевых интерфейсов для Slackware 15.0.
#   Скрипт формирует/дополняет файл /etc/udev/rules.d/70-persistent-net.rules
#   так, чтобы привязка MAC-адрес -> ethX никогда не менялась.
#
# Логика:
#   1. Читаем уже существующий файл правил и запоминаем,
#      какие MAC уже привязаны к каким ethX.
#   2. Смотрим, какие физические Ethernet-карты есть в системе сейчас.
#   3. Если MAC уже есть в правилах — НИЧЕГО не делаем (сохраняем старую привязку).
#   4. Если MAC новый — дописываем в конец файла новую строку,
#      давая ему следующий свободный номер ethX.
#   5. Старые строки никогда не перезаписываются и не удаляются.
#
# Таким образом:
#   - при обычной перезагрузке eth0 остаётся eth0;
#   - при добавлении новой карты она получает следующий свободный ethX;
#   - порядок загрузки драйверов больше не влияет на имена.
#
# Разместить, например, в /usr/sbin
# и вызывать при загрузке ПОСЛЕ rc.udev, но ДО rc.inet1.
#

set -euo pipefail

# ----------------------------------------------------------------------
# Пути и константы
# ----------------------------------------------------------------------
RULES_FILE="/etc/udev/rules.d/70-persistent-net.rules"
SYSFS_NET="/sys/class/net"

# ----------------------------------------------------------------------
# Если файла правил ещё нет — создаём его с шапкой.
# Дальше мы будем только дописывать строки в конец.
# ----------------------------------------------------------------------
if [ ! -f "$RULES_FILE" ]; then
    cat > "$RULES_FILE" <<'EOF'
# This file was automatically generated by gen-net-rules.sh
# Do not edit manually.
EOF
fi

# ----------------------------------------------------------------------
# Ассоциативные массивы:
#   KNOWN_MAC — множество MAC-адресов, уже присутствующих в файле правил.
#   USED_ETH  — множество имён ethX, уже занятых в файле правил.
# ----------------------------------------------------------------------
declare -A KNOWN_MAC=()
declare -A USED_ETH=()

# ----------------------------------------------------------------------
# Шаг 1. Разбор существующего файла правил.
# Ищем строки вида:
#   SUBSYSTEM=="net", ACTION=="add", ..., ATTR{address}=="aa:bb:..", ..., NAME="eth0"
# Из каждой такой строки извлекаем MAC и имя интерфейса.
# ----------------------------------------------------------------------
while IFS= read -r line; do
    # Проверяем, что в строке есть ATTR{address}=="..." и NAME="ethN"
    if [[ "$line" =~ ATTR\{address\}==\"([0-9a-fA-F:]+)\" ]] && \
       [[ "$line" =~ NAME=\"(eth[0-9]+)\" ]]; then
        mac="${BASH_REMATCH[1],,}"      # приводим MAC к нижнему регистру
        name="${BASH_REMATCH[2]}"
        KNOWN_MAC["$mac"]=1
        USED_ETH["$name"]=1
    fi
done < "$RULES_FILE"

# ----------------------------------------------------------------------
# Шаг 2. Определяем следующий свободный номер ethX.
# Начинаем с 0 и увеличиваем, пока имя занято.
# ----------------------------------------------------------------------
next_eth_index=0
while [[ -n "${USED_ETH[eth${next_eth_index}]:-}" ]]; do
    next_eth_index=$((next_eth_index + 1))
done

# ----------------------------------------------------------------------
# Флаг: были ли добавлены новые правила. Нужен, чтобы понять,
# надо ли перезагружать правила udev в конце.
# ----------------------------------------------------------------------
changed=0

# ----------------------------------------------------------------------
# Шаг 3. Обход всех сетевых интерфейсов в /sys/class/net.
# ----------------------------------------------------------------------
for iface_path in "$SYSFS_NET"/*; do
    iface="$(basename "$iface_path")"

    # Пропускаем loopback
    [ "$iface" = "lo" ] && continue

    # Пропускаем виртуальные интерфейсы (veth, bridge, docker и т.п.)
    case "$iface" in
        veth*|virbr*|docker*|br-*|bond*|tap*|tun*|vlan*|*.vlan) continue ;;
    esac

    # Оставляем только физические устройства (у них есть ссылка "device")
    [ -e "$iface_path/device" ] || continue

    # Оставляем только Ethernet (ARPHRD_ETHER = 1)
    [ -f "$iface_path/type" ] || continue
    [ "$(cat "$iface_path/type")" = "1" ] || continue

    # Читаем MAC-адрес, приводим к нижнему регистру
    [ -f "$iface_path/address" ] || continue
    mac="$(tr 'A-Z' 'a-z' < "$iface_path/address")"

    # Пропускаем пустой/нулевой MAC
    [ "$mac" = "00:00:00:00:00:00" ] && continue

    # Если MAC уже известен — оставляем старую привязку, ничего не делаем.
    if [[ -n "${KNOWN_MAC[$mac]:-}" ]]; then
        continue
    fi

    # ------------------------------------------------------------------
    # Это новый MAC. Назначаем ему следующий свободный ethX.
    # ------------------------------------------------------------------
    eth_name="eth${next_eth_index}"

    # Собираем данные для комментария: PCI ID и имя драйвера.
    pci_id=""
    driver=""
    devpath="$(readlink -f "$iface_path/device" 2>/dev/null || true)"
    if [ -n "$devpath" ] && [ -f "$devpath/vendor" ] && [ -f "$devpath/device" ]; then
        pci_id="$(cat "$devpath/vendor"):$(cat "$devpath/device")"
        if [ -e "$devpath/driver" ]; then
            driver="$(basename "$(readlink -f "$devpath/driver")")"
        fi
    fi

    # ------------------------------------------------------------------
    # Дописываем новое правило в конец файла.
    # ------------------------------------------------------------------
    {
        echo ""
        if [ -n "$pci_id" ]; then
            echo "# PCI device ${pci_id} (${driver})"
        else
            echo "# Network device ${iface}"
        fi
        printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="%s", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="%s"\n' \
            "$mac" "$eth_name"
    } >> "$RULES_FILE"

    echo "Добавлено правило: $mac -> $eth_name"

    # Помечаем MAC и имя как занятые, сдвигаем счётчик.
    KNOWN_MAC["$mac"]=1
    USED_ETH["$eth_name"]=1
    next_eth_index=$((next_eth_index + 1))
    changed=1
done

# ----------------------------------------------------------------------
# Шаг 4. Если были добавлены новые правила — просим udev их перечитать.
# ----------------------------------------------------------------------
if [ "$changed" -eq 1 ]; then
    if command -v udevadm >/dev/null 2>&1; then
        udevadm control --reload-rules || true
    fi
    echo "Файл $RULES_FILE обновлён."
else
    echo "Новых сетевых интерфейсов не обнаружено, файл не изменялся."
fi

exit 0


Обзываешь, например, gen-net-rules.sh . Делаешь исполняемым. Кидаешь в /usr/sbin и в конце /etc/rc.d/rc.udev прописываешь:
if [ -x /usr/sbin/gen-net-rules.sh ]; then
    /usr/sbin/gen-net-rules.sh
fi

Всё, названия закреплены.