Size: a a a

Админим с Буквой

2018 July 27
Админим с Буквой
Сегодня праздник у девчат, сегодня будут танцы

Поговаривают, что сегодня день благодарности системному администратору. Чувствуете радость? Веселье? Поверните голову налево - кивните челяди. Поверните направо - оцените с прищуром гору подарков. Осторожно! От такого головокружения можно свалиться с трона. Так себе сказка, правда? И оборудование в сказки не верит. И софт. И пользователи. Да и админы уже пошли не те. Стереотипные люди, которых узнавали по пиву и свитеру уже канули в историю. Сейчас то некоторые и звук модема не узнают и шлейф к 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
источник
2018 July 30
Админим с Буквой
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
источник
2018 July 31
Админим с Буквой
GIT отделить ветку в отдельный репозиторий

вариант 1:

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


вариант 2:

git clone -b newbranch CurrentRepo NewRepo


#git
источник
Админим с Буквой
Полноценное логирование действий пользователей в консоли

Все, конечно, знают о ~/.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

Правда, будут проблемы с логированием последовательного/каскадного выполнения команд - выполнение каждой команды запишется отдельной строкой в лог.
источник
2018 August 01
Админим с Буквой
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
источник
2018 August 03
Админим с Буквой
Подстава с centos:6 и docker

https://github.com/CentOS/sig-cloud-instance-images/issues/103

В итоге bash запустить там не удастся.
источник
2018 August 06
Админим с Буквой
источник
Админим с Буквой
источник
2018 August 07
Админим с Буквой
Подскажите человеку;)
источник
Админим с Буквой
Переслано от Yustin Dmitry
Добрый день! может у кого-нибудь есть инфа где в Москве  можно арендовать ресурсов на 560 ядер (3500 GB mem, 28 TB stor)  на 3 месяца, возможно с пролонгацией.
источник
2018 August 08
Админим с Буквой
Jenkins heartbeat error

err:
wrapper script does not seem to be touching the log file in xxxxx
(JENKINS-48300: if on a laggy filesystem, consider -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=300)


В моем случае jenkins находится в k8s, катал его с помощью helm. В качестве решения в values.yaml:

Master:
   JavaOpts: "-Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=3600"


#jenkins #kubernetes #helm #troubleshooting
источник
2018 August 19
Админим с Буквой
alsamixer сделай громче!

Бывают ситуации, когда кинч ну уж слижком тихо играет и хочется сделать громче. вы прибавляете звук на максимум в софте. тихо. прибавляете его в системе на максимум - тихо. А вот как прибавить звук и еще выше максимума:

pactl -- set-sink-volume 0 170%

#alsa #sound
источник
2018 August 20
Админим с Буквой
источник
Админим с Буквой
Переслано от Dok
Вот вам хук, как сделать логирование судохнутых юзеров в отдельных history-файлах

В начало .bashrc всех пользователей добавляем

 if [ -z "$SUDO_USER" ]; then
       SUDO_USER=$(who am i | awk '{ print $1 }')
fi
if [ "$SUDO_USER" ]; then        HISTFILE="$HOME/.bash_history_$SUDO_USER"
fi

И далее все истории будут сохраняться по отдельности для каждого юзера в режиме su.

Если в системе несколько человек судохаются, становится непонятно кто конкретно что сделал. Да и, вообще, хистори рута превращается в помойку.
А так у каждого свой файл.
источник
Админим с Буквой
При условии, что эти люди тупые и им не объяснить что надо делать sudo -s (sudo -i), что делает HOME=/path/to/real/home, а не /root. И тогда история сохраняется нормально в хомяке пользователя
источник
Админим с Буквой
who am i && whoami

первый скажет вам кто вы есть на самом деле, а второй - кто вы есть сейчас. Это значит, что пользователь, выполнивший команду sudo su через whoami увидит root, а через who am i - кто же он есть на самом деле - его username.
источник
Админим с Буквой
Изменяем размер образа в ceph и применяем в k8s

1. Выяснить название image:

kubectl -n NAMESPACE get pv PV_NAME -o jsonpath="{.spec.rbd.image}"

2. выполнять с хоста, с которого настроен доступ к rbd. IMAGE_NAME взять из предыдущего шага.

export IMAGE_NAME=<image_name>
export SIZE=<size, ex. 20G>

посмотреть информацию по image

rbd info $IMAGE_NAME

выполнить изменение размера:

rbd resize $IMAGE_NAME --size $SIZE

посмотреть результат

rbd info $IMAGE_NAME

3. выяснить на какой ноде запущен под (соответственно куда смонтировано блочное устройство)

kubectl -n NAMESPACE get po -o wide

4. выполнить на ноде, полученной на предыдущем шаге

получаем номер путь к блочному устройству

mount | grep IMAGE_NAME | awk '{print $1}'
# результат: /dev/rbd0

проверяем размер фс в поде:

docker ps | grep POD_NAME
docker exec -ti CONTAINER_ID df -h | grep rbd

выполняем изменение размера:

resize2fs /dev/rbd0

проверяем результат:

docker exec -ti CONTAINER_ID df -h | grep rbd

З.Ы. тут написано без какой либо конкретики - просто направление того как с этим работать, поскольку методы получения нужной информации для ключевых шагов (имя образа, пода, rbd, ноды...) может отличаться от системы к системе. А уж проверять финальные результаты можно еще как минимум двумя способами. Строго говоря k8s тут вообще не причем =)

#kubernetes #ceph #rbd
источник