Что мы делаем в IT
328 subscribers
126 photos
1 video
156 links
Решение практических задач, возникающих при работе администратора ПК
Download Telegram
Устанавливаем Portainer.
Это WebGUI для Docker, Docker Compose, Kubernetes.
Может работать в контейнере на Proxmox.
apt update && apt upgrade -y
apt install git curl gpg -y
curl -fsSL https://get.docker.com -o get-docker.sh
sh ./get-docker.sh
cat << 'EOF' > docker-compose.yml
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
environment:
- TZ=Europe/Moscow
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- .data:/data
ports:
- "8000:8000"
- "9443:9443"
restart: always
EOF
docker compose up -d

После этого GUI доступно по адресу https://НАШ_IP:9443/
#linux #docker #compose #webgui #portainer
Запускаем Immich в Portainer.
Нужно там что-то запустить для проверки.
В меню Stacks нажимаем Add stack.
В Web editor вставляем:
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- stack.env
ports:
- 2283:3001
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false

immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
volumes:
- model-cache:/cache
env_file:
- stack.env
restart: always
healthcheck:
disable: false

redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
healthcheck:
test: redis-cli ping || exit 1
restart: always

database:
container_name: immich_postgres
image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_INITDB_ARGS: '--data-checksums'
env_file:
- stack.env
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck:
test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
start_interval: 30s
start_period: 5m
command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
restart: always

volumes:
model-cache:

Нажимаем Environment variables -> Advanced mode и вставляем:
TZ=Europe/Moscow
UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
IMMICH_VERSION=release
DB_PASSWORD=ПАРОЛЬ_СЕРВЕРА_БД
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Жмякаем deploy.
Пробуем заходить на http://НАШ_IP:2283/
#linux #portainer #docker #compose #immich
Ищем, что удалить из Docker.
Не особо заморачиваясь.
С этим помог проект lazydocker.
Далее, далее, готово:
curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
.local/bin/lazydocker

Открывается интерфейс, там ищем лишнее.
Удаляем кнопкой "d", как и в ncdu.
#linux #docker #lazydocker #tui
Добавляем точку доступа Unifi.
Установить контролер мы уже умеем.
Обычно, если контролер находится в локальной сети, то точки он видит автомагически сам.
А если контролер в другом VLAN или доступен через VPN то автомагии нужно помочь.
Необходимо, чтоб DNS сервер, который выдаётся по DHCP, резолвил имя "unifi" в IP контролера.
Если вдруг это не работает, то вот инструкция с другими способами.
На пример можно вычислить IP точки,
подключиться к ней по SSH с учётными данными ui / ui или ubnt / ubnt
и указать IP контролера командой:
set-inform http://IP_КОНТРОЛЕРА:8080/inform

#unifi #dns #wifi
Запускаем Zoraxy в Portainer.
Это альтернатива Nginx Proxy Manager, только не заставляет почтовый ящик вместо логина использовать 😎
И выдаём ему IP из локальной сети.
Для этого добавляем к конфигу docker compose сеть с драйвером macvlan.
В меню Stacks нажимаем Add stack.
В Web editor вставляем:
services:
zoraxy:
image: zoraxydocker/zoraxy:latest
container_name: zoraxy
restart: unless-stopped
ports:
- 80:80
- 443:443
- 8000:8000
volumes:
- .config/zoraxy/:/opt/zoraxy/config/
- .config/zerotier/:/var/lib/zerotier-one/
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime
environment:
FASTGEOIP: "true"
ZEROTIER: "false"
networks:
LAN250:
ipv4_address: 192.168.1.250

networks:
LAN250:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
ip_range: 192.168.1.250/32


Жмякаем deploy.
Пробуем заходить на http://192.168.1.250:8000/
#linux #portainer #docker #compose #zoraxy #proxy #npm #macvlan #networks
Монтируем существующий раздел в контейнер Proxmox.
В контейнере у меня NAS.
В сервер воткнул диск с данными и хочу его раздавать по сети.
Почему-то в этих ваших проксмоксах нет для этого кнопки 🤔
Хотя достаточно одной команды:
mount /dev/sdx /ZFS/subvol-101-disk-0/mnt

если знать, что у нас по какому пути находится 😉
#linux #proxmox #lxc #mount #lsblk #dmesg #zfs #container
Получаем root на Realme C51.
Ваши данные не сохранятся.
Скачиваем:
☑️ Драйвер
☑️ Уязвимая прошивка А.27
☑️ SPD Research Tool
☑️ Скрипт разблокировки
☑️ Magisk
☑️ Shamiko
☑️ PlayIntegrityFix
☑️ Android Platform Tools
Приступаем:
1️⃣ Распаковываем всё в кучу.
2️⃣ Устанавливаем драйвера (DriverSetup.exe).
3️⃣ Открываем программу для прошивки (ResearchDownload.exe), нажимаем ⚙️ (кнопка 1) и выбираем файл ums9230_hulk_Natv-user-gms_QOGIRL6_hulk_SIGN.pac, выбираем 22718 и жмем ОК, выбираем RU (00110111).
4️⃣ Заходим в ImageFiles\_DLFiles_ЦИФЕРКИ, копируем оттуда boot.img, так же копируем oppo22718.bin в oppo22716.bin и oppo22717.bin.
5️⃣ Нажимаем ▶️ (кнопка 3).
6️⃣ Выключаем смартфон, зажимаем кнопку громкости вниз и подключаем его к компьютеру.
7️⃣ После завершения прошивки нажимаем ⏹️ (кнопка 4) и отключаем смартфон от компьютера.
8️⃣ Запускаем unlock.bat зажимаем кнопку громкости вниз и подключаем смартфон к компьютеру.
9️⃣ Нажимаем далее->далее->готово (yes, any key, etc.).
После этого смартфон перезагрузится.
Клацаем в телефончике далее->далее->готово пока не включим ADB.
По ADB устанавливаем Magisk:
adb install app-release.apk

Загружаем в смартфон boot.img, Shamiko и PlayIntegrityFix:
adb push boot.img /sdcard
adb push Shamiko-БЛАБЛАБЛА-release.zip /sdcard
adb push PlayБЛАБЛАБЛА.zip /sdcard

В телефончике заходим в Magisk, выбираем "пропатчить образ" и указываем на boot.img.
Забираем пропатченный образ на комп:
adb pull /storage/emulated/0/Download/magisk_patched-БЛАБЛАБЛА.img

Перезагружаемся в fastboot:
adb reboot fastboot

В fastboot прошиваем патченное ядро:
fastboot flash boot magisk_patched-БЛАБЛАБЛА.img
fastboot reboot

По ADB отключаем всякие обновления, чтоб ничего не слетело:
adb shell pm disable-user --user 0 com.nearme.romupdate
adb shell pm disable-user --user 0 com.android.dynsystem
adb shell pm disable-user --user 0 com.oplus.sau
adb shell pm disable-user --user 0 com.oppo.ota

В телефончике заходим в Magisk и устанавливаем Shamiko и PlayIntegrityFix.
#windows #android #root #cve #realme #xiaomi #spd #firmware #magisk #adb #fastboot
Очищаем место от WAV файлов.
Файлы *-t.wav и *-r.wav, которым больше 7 дней - удаляем:
find /ПУТЬ/К/ФАЙЛАМ -type f -mtime +7 \( -iname '*-t.wav' -o -name '*-r.wav' \) -exec rm -f {} \;

Оставшиеся файлы *.wav, которым больше 7 дней - конвертируем в MP3:
find /ПУТЬ/К/ФАЙЛАМ -type f -iname "*.wav" -mtime +7 -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -vn -ab 128k -n "${FILE%.wav}.mp3" && rm -f "${FILE}"' _ '{}' \;

По просьбам подписчиков версия для windows:
Get-ChildItem "К:\ФАЙЛАМ" -Recurse -Filter *.wav | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} | % { ffmpeg.exe -i $_.FullName -vn -ab 128k ("NewPath" + "\" + $_.Name + ".mp3") }

#linux #vs #windows #powershell #GetChildItem #WhereObject #GetDate #find #ffmpeg #mtime #wav #mp3 #rm #bash
Посмотреть на котиков в трубе очень просто.
Достаточно простого советского ...
-p -f 2 -k 2 -e 1 -n -q --native-frag --wrong-chksum --frag-by-sni --fake-from-hex 160303 --fake-with-sni www.google.com --fake-gen 11 --set-ttl 5 --allow-no-sni --max-payload 1200

#windows #github #good #bye #check #dpi #google
50 оттенков прокси.
Допустим нам, по неизвестной причине, потребовалось использовать разные маршруты для разных сайтов.
Это можно сделать на L3 или на L7.
3️⃣ На L3 это будет называться PBR (Policy-Based Routing)
В простейшем случае выглядит как-то так (wireguard):
AllowedIPs = 188.114.96.0/22, 104.16.0.0/12, 162.158.0.0/15 и т.д.

7️⃣ На L7 это будет называться WPAD (Web Proxy Auto-Discovery protocol)
Нужно WEB server, раздающий файл proxy.pac
apt install lighttpd -y

примерно такого вида:
cat << 'EOF' > /var/www/html/proxy.pac
function FindProxyForURL(url, host) {
if (
shExpMatch(host, "*adobe.com")
|| shExpMatch(host, "*.amazonaws.com")
|| shExpMatch(host, "*.bing.com")
) return "PROXY 192.168.1.132:1080; HTTPS 192.168.1.132:8080";
return "DIRECT";
}
EOF

systemctl restart lighttpd
systemctl enable --now lighttpd

URL к wpad.dat прописываем в браузере в автонастроку прокси.
#lan #network #wpad #pac #proxy #url #host #AllowedIPs #subnets #osi #routing
Стримим Web-камеру.
apt install v4l-utils ustreamer -y
ustreamer --device=/dev/video0 --host=0.0.0.0 --port=8080

Можно сервис сделать:
cat << 'EOF' > /usr/lib/systemd/system/ustreamer.service
[Unit]
Description=ustreamer
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/ustreamer --device=/dev/video0 --host=0.0.0.0 --port=8080
RemainAfterExit=no
RestartSec=1
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now ustreamer

Смотрим по адресу http://НАШ_IP:8080/stream
Можно даже использовать эту web-камеру как web-камеру через IP-Camera-Bridge!
#linux #stream #ustreamer #video #web #usb
Переворачиваем всё вверх дном.
Вчерашнюю вебку было удобнее крепить перевёрнутой.
Теперь нужно развернуть изображение.
Берём плагин Stylus, клацаем "создать стиль для", в редактор пишем:
img {
transform: rotate(180deg);
}

Можно на любом другом сайте всё перевернуть, если вдруг над кем-то пошутить надо 😈
#browser #web #html #css #stylus #img #transform #rotate
Сегодня пятница, а на следующей неделе каникулы.
По этому сегодня ChatGPT подумала за меня)
Очень похоже на правду:
Чтобы стримить веб-камеру через FFmpeg, выполните следующие шаги:
1. Установите FFmpeg: Убедитесь, что FFmpeg установлен на вашем компьютере. Вы можете установить его через пакетный менеджер вашей операционной системы. Например, на Ubuntu выполните команду:
sudo apt update
sudo apt install ffmpeg

2. Подключите веб-камеру:
Убедитесь, что ваша веб-камера подключена и распознается системой. Вы можете проверить это с помощью команды:
ls /dev/video*

3. Запустите стриминг:
Используйте следующую команду, чтобы начать стримить видео с веб-камеры:
ffmpeg -f v4l2 -i /dev/video0 -f flv rtmp://your-streaming-server/live/stream

В этой команде:
-f v4l2 указывает формат ввода (Video4Linux2, используется в Linux).
-i /dev/video0 - это путь к вашему устройству веб-камеры (может быть другим, проверьте с предыдущей командой).
-f flv указывает формат вывода.
rtmp://your-streaming-server/live/stream - это URL вашего RTMP-сервера, куда будет отправляться поток.
4. Настройка параметров: Вы можете добавить дополнительные параметры для настройки качества видео, разрешения, битрейта и других параметров. Например:
ffmpeg -f v4l2 -i /dev/video0 -video_size 1280x720 -framerate 30 -f flv rtmp://your-streaming-server/live/stream

Теперь ваша веб-камера будет стримить видео на указанный RTMP-сервер. Убедитесь, что на сервере настроен прием потоков для успешной передачи данных.
#linux #chatgpt #ffmpeg #rtmp #stream
Включаем аудит удаления файлов в Windows.
Инструкция.
Включаем политику:
auditpol /set /subcategory:"Файловая система" /success:enable /failure:disable

Включаем аудит нужной директории:
$Path = "D:\Share"
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule('Everyone', 'Delete,DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl

Сохраняем лог в файл:
$Outfile = "C:\delete-file-log.txt"
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$strLog = $Computer + " " + $File + " " + $Time + " " + $User
$strLog | out-file $Outfile –append
}
}

#windows #audit #gpo #powershell #policy #acl #security
Устанавливаем новый QEMU-KVM на CentOS 7.
Было:
/usr/libexec/qemu-kvm -version
QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-175.el7_9.6), Copyright (c) 2003-2008 Fabrice Bellard

Устанавливаем:
curl -o /etc/yum.repos.d/jmliger-virt7-upstream-epel-7.repo https://copr.fedorainfracloud.org/coprs/jmliger/virt7-upstream/repo/epel-7/jmliger-virt7-upstream-epel-7.repo
yum install qemu-system-x86 qemu*cv libvirt
systemctl restart libvirtd

Стало:
/usr/libexec/qemu-kvm -version
QEMU emulator version 5.2.0 (qemu-5.2.0-4.el7.1)
Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers

#linux #eol #centos7 #qemu #kvm #libvirt #epel
Аудит входа и выхода пользователей на RDP:
$filterXml = "
<QueryList>
<Query Id='0' Path='Security'>
<Select Path='Security'>
*[System[EventID=4624 or EventID=4634]
and
EventData[Data[@Name='LogonType'] = '10']
and
( System[TimeCreated[timediff(@SystemTime) &lt;= 32400000]])
]
</Select>
</Query>
</QueryList>"

$properties = @(
@{n='ID';e={$(If ($_.id -eq 4624) {"Вход"} Else {"Выход"})}},
@{n='User';e={$(If ($_.Properties[5].Value) {$_.Properties[5].Value} Else {$_.Properties[1].Value})}},
@{n='TimeStamp';e={$_.TimeCreated}}
)

$d1 = (get-date).ToString("yyyy-MM-dd")
Get-WinEvent -FilterXml $filterXml | Select-Object $properties | Export-CSV -Path "C:\UsersIO_$d1.csv" -NoTypeInformation -Encoding UTF8

Более продвинутую версию нашёл на github.
#vindows #event #audit #powershell #csv #export #query
Устанавливаем lvmsync на CentOS 7.
yum install gpg -y
gpg --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
/usr/local/rvm/bin/rvm install 2.1
echo 'export rvm_prefix="$HOME"' > /root/.rvmrc
echo 'export rvm_path="/usr/local/rvm"' >> /root/.rvmrc
exit
rvm use 2.1 --default
gem install lvmsync

#linux #eol #centos7 #ruby #gem #lvmsync
Получаем информацию с iLO на сервере HP.
Если iLO не подключен в сеть, например.
Инструкция.
Установка:
wget http://downloads.linux.hpe.com/SDR/repo/mcp/Debian/pool/non-free/hp-health_10.61-1-0_amd64.deb
apt install ./hp-health_10.61-1-0_amd64.deb

Использование:
hpasmcli -s "SHOW SERVER"
hpasmcli -s "SHOW DIMM" | grep -E "Module|Size|Status"
hpasmcli -s "SHOW TEMP; SHOW FAN"
hpasmcli -s "SHOW IML" | more
hplog -t
hplog -f
hplog -p

#linux #hp #hpe #ilo #ipmi #hpasmcli #hplog
Обновляем CentOS 7 до AlmaLinux.
Инструкция.
curl -o /etc/yum.repos.d/CentOS-Base.repo https://el7.repo.almalinux.org/centos/CentOS-Base.repo
yum upgrade -y
reboot now

yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
yum install -y leapp-upgrade leapp-data-almalinux
leapp preupgrade
rmmod pata_acpi
echo PermitRootLogin yes | tee -a /etc/ssh/sshd_config
leapp answer --section remove_pam_pkcs11_module_check.confirm=True
leapp upgrade
reboot now

#linux #eol #centos7 #almalinux #rpm #yum #leapp