Админим с Буквой
5.52K subscribers
303 photos
8 videos
59 files
1.16K links
Канал о системном администрировании, DevOps и немного Инфобеза.

По всем вопросам обращаться к @bykva. Рекламу не размещаю.
Download Telegram
Cleanup docker registry

Проверено для версии 2.6.2

1. добавить в конфиг registry эти строки и перезапустить:

storage:
delete:
enabled: true


2. получаем список тегов для репозитория и выбираем список на удаление

curl -u <user>:<password> https://<registry_host>/v2/<repo_name>/tags/list


3. помечаем объекты на удаление через api

repo="REPO_PATH"
tag_list='TAG LIST separated by space'
user="USER"
pwd="PASSWORD"
registry_host="<registry_host>"
header="Accept: application/vnd.docker.distribution.manifest.v2+json"

for tag in ${tag_list}; do
digest=$(curl -I -u $user:$pwd -H "$header" "https://${registry_host}/v2/${repo}/manifests/${tag}" 2>/dev/null| awk '$1 == "docker-content-digest:" {print $2}'| tr -dc '[[:print:]]')
curl -XDELETE -u $user:$pwd -H "$header" "https://${registry_host}/v2/${repo}/manifests/${digest}"
done


4. заходим внутрь контейнера и запускаем garbage-collector.

registry garbage-collect /etc/docker/registry/config.yml


Итого наша задача - получить список тегов, выбрать нужные на удаление. На каждый тег получить sha256 манифеста (docker-content-digest в заголовке ответа), а затем пометить этот заголовок на удаление. К концу 3-го пункта никакие данные еще не удалены. Удаление происходит не вручную, а с помощью нативного сборщика мусора. согласно помеченным манифестам будут удалены выбранные теги.

#docker #registry
Curl resolve w\o dns

Иногда нужно протестировать какой-то домен здесь и сейчас (особенно когда он работает через прокси и\или https), лезть при этом делать dns неохото, прописывать в hosts - тоже долго, поскольку это можно сделать не отходя далеко от курла:

curl --resolve foo.example.com:443:127.0.0.1 https://foo.example.com:443/

#curl
.bashrc vs .bash_profile

разница между ними в том что .bash_profile исполняется при прямом логине в shell, тогда как .bashrc выполняется для non-login shells. Таким образом если вы например хотите настроить алиасы для работы в консоли на удаленном сервере - ваш файл bash_profile, если это будет отличный от прямого входа в shell - тогда настраиваем bashrc.

But, if you’ve already logged into your machine and open a new terminal window (xterm) then .bashrc is executed before the window command prompt. .bashrc is also run when you start a new bash instance by typing /bin/bash in a terminal.

#bash_tips_and_tricks
Смотрим какое правило маршрутизации применится к ip адресу

ip r g x.x.x.x
wheezy to stretch update

При изменение репоса wheezy -> stretch и выполнении команды apt-get update может вылезти ошибка связанная с отсутствием ключей.

W: There is no public key available for the following key IDs:


Поможет доустановка пакетов:

apt-get install debian-keyring debian-archive-keyring


#troubleshooting
Включаем coredump для ОС c systemd на борту

1. ставим пакет для управления - systemd-coredump

2. разрешаем дампить coredump процессам:
в файле /etc/systemd/system.conf правим

DefaultLimitCORE=infinity

3. опционально разрешаем это для root:
в файле /etc/security/limits.d/core.conf

root       hard        core        unlimited
root soft core unlimited


4. задаем поведение для демона, создающего дампы:
в файле /etc/sysctl.d/coredumps.conf

kernel.core_pattern = /var/lib/coredumps/core-%e-sig%s-user%u-group%g-pid%p-time%t
kernel.core_uses_pid = 1
fs.suid_dumpable = 2


5. применение:

systemctl daemon-reexec или reboot

6. проверка:

kill -11 <PID>

в /var/lib/coredumps (или /var/tmp по-умолчанию) создастся coredump.

З.Ы. без каких либо настроек после установки пакета можно сразу управлять дампами через команду

coredumpctl list и coredumpctl dump

#troubleshooting #coredump
перезапуск гнома

alt+F2 -> ввести букву r -> нажать enter

Окна при этом не будут закрыты. Аналог команды для терминала:

gnome-shell --replace

#troubleshooting
Forwarded from Кавычка (Bo0oM)
При внедрении собственных шаблонов в серверные шаблонизаторы (уязвимость SSTI) — эксплуатацию можно автоматизировать с помощью утилиты tplmap. Она и шаблонизатор подберет, и удобный шелл откроет для выполнения произвольного кода. Еще и плагин к Burp Suite имеет.

https://github.com/epinna/tplmap
Kubernetes 1.10.x -> 1.11.x

Грабли! Грабли! Грабли! куда же без них...

Традиционно выкладываю свой опыт обновления тестового кластера на новую мажорную версию. Итак, прежде чем обновляться, читаем:

Тыц: https://github.com/kubernetes/kubernetes/issues/65863
и Тыц: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md

#kubernetes #troubleshooting
Интересно, этот кусок говна, вообще способен нормально обновляться между мажорными версиями, а не ломать все нахер?...
Сегодня праздник у девчат, сегодня будут танцы

Поговаривают, что сегодня день благодарности системному администратору. Чувствуете радость? Веселье? Поверните голову налево - кивните челяди. Поверните направо - оцените с прищуром гору подарков. Осторожно! От такого головокружения можно свалиться с трона. Так себе сказка, правда? И оборудование в сказки не верит. И софт. И пользователи. Да и админы уже пошли не те. Стереотипные люди, которых узнавали по пиву и свитеру уже канули в историю. Сейчас то некоторые и звук модема не узнают и шлейф к 3,5" IDE диску не присоединят. Технологии довольно-таки сильно шагнули вперед. Появилось больше абстракций - надстроек над управлением системами, которые позволяют даже домохозяйкам думать что они - сисадмины. Но, остановись на секунду, и вот уже ты того и гляди станешь домохозяйкой, если не будешь постоянно и постоянно что-то изучать. Знания, которые у тебя были 5 лет назад на 30% уже сейчас не нужны. И вот уже вчерашний студент, который не тратил время на изучение ненужного сейчас материала начинает знать в каких-то областях уже больше тебя. IT одна из самых быстроразвивающихся отраслей и в ней постоянно нужно учиться и быть в тонусе. И хоть сегодня обычный день, я все равно рад за то что есть такие люди, которые не боятся и кабель проложить и конденсатор перепаять и модуль написать к любимому приложению. С праздником вас, всех заинтересованных в технологиях, с днем системного администратора!

#sysadminsday
Получаем информацию о смонтированных rbd на нодах куба

Запускать на ноде куба. Этот скрипт полезен, если у вас дохлый мастер, иначе все это куда проще достается из апишки.

#!/bin/bash

IFS=$'\n'

for i in $(docker ps); do
ID=$(echo $i | awk '{print $1}');
for j in $(docker inspect $ID | grep "volumes/kubernetes.io~rbd"|grep -v "Source"); do
NAME=$(docker inspect $ID | grep "Hostname\"")
external_mpath=$(echo $j | awk -F\: '{print $1}' | grep -o '/var/lib.*')
internal_mpath=$(echo $j | awk -F\: '{print $2}')
rbd=$(mount | grep $external_mpath | awk '{print $1}')
dnumber=$(echo $rbd | egrep -o "[0-9]+")
image=$(cat /sys/bus/rbd/devices/${dnumber}/name)
echo ""
echo "name: $NAME"
echo "rbd: $rbd"
echo "mount path: $internal_mpath"
echo "image: $image"
done
done


Результат:

name:             "Hostname": "mongodb-database-865cfb8d6f-lgfnl",
rbd: /dev/rbd8
mount path: /data/db",
image: kubernetes-dynamic-pvc-af3f3636-635d-11e8-9801-0a580af4013f


т.е. отсюда можно узнать какому конкретно контейнеру какой конкретно image соответствует. Это полезно когда у вас динамический контроллер и сдохший мастер - чтобы забрать данные с запущенных подов.

#ceph #kubernetes #troubleshooting
apt update error

Ошибка:

Err:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Couldn't create tempfiles for splitting up /var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_xenial_InRelease
Could not execute 'apt-key' to verify signature (is gnupg installed?)

На самом деле проблема не о том, о чём написано в ошибке - проблема в записи в директорию /tmp.

#troubleshooting #apt
GIT отделить ветку в отдельный репозиторий

вариант 1:

git push url://to/new/repository.git branch-to-move:new-branch-name


вариант 2:

git clone -b newbranch CurrentRepo NewRepo


#git
Forwarded from mindsellers
Полноценное логирование действий пользователей в консоли

Все, конечно, знают о ~/.bash_history. Равно как и о том, что его нужно за собой чистить, особенно, если занимаешься на чужой системе чем-то интересным. Недавно мне стало интересно, как же хранить реальные логи действий, да желательно с привязкой к тому, кто реально хулиганил на системе(мало ли, у кого гипотетически есть sudo) и ко времени.

В интернетах наткнулся на проект snoopy logger. Потестил, и выяснил, что штука вполне неплохая, лог пишет исправно, ставится или скриптами от разработчиков или из репозиториев (в Убунтовских есть).

Не вижу смысла в дальнейших подробностях - заходим и ставим!

https://github.com/a2o/snoopy

#linux #bash
В добавление к предыдущему посту от @CatSchrodinger

>>>>
Касательно snoopy - часто используют auditd и для логирования команд лайна пользователя нужно в /etc/audit/audit.rules добавить строку: -a exit,always -F arch=b64 -S execve

Правда, будут проблемы с логированием последовательного/каскадного выполнения команд - выполнение каждой команды запишется отдельной строкой в лог.
mouse3 и буфер обмена в linux

Довольно-таки удобно в linux использовать второй буфер обмена. Чтобы им воспользоваться достаточно нужный текст всего-навсего выделить. чтобы вставить текст куда-либо - нужно нажать на колесико или приложить к тачпаду 3 пальца. также к сожалению не все пользуются выделением "слова" по двойному клику. Например в консоли, чтобы выделить и скопировать какое-то слово достаточно просто дважды кликнуть по нему. а затем вставить в нужное местос помощью mouse3 (колесико или 3 пальца).

В данном контексте слово - набор символов отделенное с обоих сторон пробелами.

Итого:

Выделить:
дважды кликнуть по слову mouse1 (или тапнуть два раза по тачбару одним пальцем)

Скопировать:
1й буфер обмена: то что выделено - уже находится в нем
2й буфер обмена: ctrl+c | shift+ctlr+c (в терминале) / пкм - скопировать

Вставить:
1й буфер обмена: mouse3 | тап 3 пальцами по тач паду
2й буфер обмена: ctrl+v | shift+ctlr+v (в терминале) / пкм - вставить

Не единичны случаи когда нужно скопировать несколько вещей. тогда один блок вы выделяете и копируете как обычно, а второй - выделяете и... все. он уже в буфере обмена.

З.Ы. порядок занесения текста в буфер обмена важен! сначала выделить - ctrl+c (по сути здесь текст находится уже в двух буферах обмена!) потом просто выдлить текст для помещения его во второй буфер обмена.

З.З.Ы. эта фишка со вторым буфером обмена по mouse3 работает везде, а не только в терминале.

И на сладкое. Не все знают, что также по mouse3 можно в браузере открывать ссылки в новом окне. типа не обязательно каждый раз по ней кликать пкм - открыть в новом окне. mouse3 делает это за вас.

#usefulls
bash использование grep как условия для if

хотелось бы составить такую конструкцию:

если бла-бла-бла (вывод) | grep <expression> то выполнить <cmd>


Проблема в том, что grep выдает на stdout строку, которую он нашел. и тогда на if подается набор каких-то отфильтрованных символов. шо бы таки этого избежать, можно просто использовать с грепом ключ --quiet. тогда if реагирует на код возврата - нашел - не нашел - true & false. как раз то что нужно для условия.

#bash_tips_and_tricks