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

По всем вопросам обращаться к @bykva. Рекламу не размещаю.
Download Telegram
Убитый контейнер докера не запускается

Ошибка:
endpoint with name XXXX already exists in network bridge.
Решение:
docker network disconnect --force bridge <Container ID or Endpoint ID or Container NAME>

Это не для тех, кто не умеет гуглить, а для того чтобы наоборот каждый раз не гуглить когда такое возникает=)

#docker #troubleshooting #networking
Запускаем задачу в background в докер контейнере через ansible

Особо ничего сложного, nohup да &, однако процесс все равно не отпускает консоль, посему ansible зависает. Чтобы этого не происходило, можно применить такую конструкцию:

- name: run bg job
shell: docker exec -i <container> sh -c 'nohup CMD &'
async: 45
poll: 0

#docker #ansible
ну да, я занимаюсь правками текста прямо в канале ¯\_(ツ)_/¯
RBAC on docker registry

Поигрался тут на днях с одним сервисом который позволяет использвать token-based аутентификацию пользователя с docker registry. Стандартный вариант логин-пароль уже не удовлетворяет потребностям и пришлось искать что-то другое. В итоге набрел на готовое решение от cesanta/docker_auth. Написано на go, легковестный token-сервис с поддержкой различных способов аутентификации пользователей и также, что самое главное - это ACL. С помощью acl можно задавать кто, и какие репозитории может пушить и пуллить, с точностью до регулярного выражения. В качестве базы хранения пользователей-acl можно выбрать статический файл, mongodb, ldap и некоторые другие. В том числе можно использовать и сторонний софт, хоть самопис. токен будет выдаваться в зависимости от кода ответа этого софта. И тут уже можно сделать все что угодно - хоть выдавать токены в зависимости от времени суток. Поковырявшись в этом собрал готовое решение, запускаемое через docker-compose. Оно содержит набор из 3 контейнеров: docker_auth, docker registry и mongo. После старта docker-compose все что нужно сделать - загрузить список правил и пользователей в mongo через простейший shell-скрипт.

https://github.com/bykvaadm/docker_auth

#docker #auth
progit_v2.1.3.epub
5.7 MB
Книга про гит на русском. Это для тех людей, кто вдруг ее еще не видел. Или вдруг еще даже не пользовался никогда гитом. Самое время начать!

#git
Выпуск Debian 9.5

Доступно пятое корректирующее обновление дистрибутива Debian 9, в которое включены накопившиеся обновления пакетов и устранены недоработки в инсталляторе. Выпуск включает 91 обновление с устранением проблем со стабильностью и 100 обновлений с устранением уязвимостей.
Kubernetes restart all pods

kubectl -n NS get po --show-labels
## pickup necessary labels
kubectl -n NS delete po -l app=xxxx


#kubernetes
Лулз

#include <stdlib.h>
#include <stdio.h>
#include <cerr.h>
#include <bash.h>

#define INFINITE ~0u

int main(int argc, char *argv[]) {
printf("Hello world!\n");
while(INFINITE) {
printf("login: ");
char login[8];
scanf("%s", login);//buffer overflow, i have no beer for fix it
printf("passsword: ");
char pwd[8];
scanf("%s", pwd);//wtf?! beer! beer! beer!
if(0.25 > rand() / (float)RAND_MAX) {
startBash(login);
} else {
printf("Login is incorrect!\n");
}
if(0.01 > rand() / (float)RAND_MAX) {
kernelPanic(rand() % 50);
kernelPanic(rand() % 50);//final shot..DIE! or beer..
}
}
return 0;
}


источник: http://absurdopedia.wikia.com/wiki/Linux#.D0.A4.D0.B0.D0.B1.D1.80.D0.B8.D0.BA.D0.B0_.D0.BF.D0.B8.D0.BD.D0.B3.D0.B2.D0.B8.D0.BD.D0.BE.D0.B2?li_source=LI&li_medium=wikia-footer-wiki-rec
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