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

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

Немного полезного конфига гита для рабочих станций.

[user]
name = Bykva Bykva
email = bykva@bykva.bykva
[color]
diff = auto
status = auto
branch = auto
ui = true
[alias]
st = status
ci = commit
co = checkout
br = branch
tree = log --graph --decorate --pretty=oneline --abbrev-commit
debrelease = "!\
test -f debian/changelog || exit 1; \
hash=\"$(md5sum debian/changelog)\"; \
debchange -r; \
newhash=\"$(md5sum debian/changelog)\"; \
[ \"$hash\" != \"$newhash\" ] || exit 1; \
version=\"$(head -1 debian/changelog |sed -e 's/) .*//' -e 's/.* (//')\"; \
tagname=\"$(head -1 debian/changelog |sed -e 's/) .*//' -e 's/.* (//' -e 's/~/_/g' -e 's/:/%/')\"; \
git ci -m \"prepare for release $version\" debian/changelog || exit 1; \
git tag -s -m \"release $version\" \"$tagname\" || exit 1; \
debchange -i ''; \
git ci -m 'bump version for future' debian/changelog"
[core]
quotepath = false
pager = less -F -X
[url "git://git.debian.org/d-i/"]
insteadOf = git+ssh://git.debian.org/git/d-i/
[push]
default = simple
[pull]
rebase = true
[gitflow "branch"]
develop = development


#git
Минутка полезного софта

Утилита ack (есть в репозитории) - работает по принципу грепа, только с более интересным выводом. Ни в коем случае не призываю избегать grep, эти утилиты очень хорошо дополняют друг друга и можно применять в зависимости от ситуации.

пример: ack whatever

Утилита ncdu (есть в репозитории) - псевдографический проводник с функцией подсчета занимаего места на жестком диске. Удобен для визуальной оценки размера файлов и папок

#utils
Приятные новости от gitlab! Теперь для создания проекта можно просто пушить в несуществующий репозиторий и он создастся.

$ git push --set-upstream ssh://git@gitlab.example.com:12345/group/project.git master
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 1.12 KiB | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
remote:
remote: The private project group/project was successfully created.
remote:
remote: To configure the remote, run:
remote: git remote add origin git@gitlab.example.com:group/project.git
remote:
remote: To view the project, visit:
remote: http://gitlab.example.com/group/project
remote:
To ssh://gitlab.example.com:12345/group/project.git
* [new branch] master -> master
Branch master set up to track remote branch master from ssh://git@gitlab.example.com:12345/group/project.git.


Подробнее: https://docs.gitlab.com/ee/gitlab-basics/create-project.html#push-to-create-a-new-project

и.. куча других нововведений: https://habrahabr.ru/post/350660/

#gitlab #git
Поздравляю всех девушек с чудесным праздником! А их у нас здесь аж больше двадцати! Желаю вам оставаться такими же весёлыми, остроумными и жизнерадостными. Спасибо, что делаете этот мир красивым и добрым. Пусть в вашей жизни будет как можно больше солнечных дней!
С праздником💍🥂🍾
Моя первая попытка написать баш автокомплит. Небольшая функция для kubectl.

умеет подхватывать имена подов и неймспейсов. собственно только это оно и умеет. и подставлять дефолтные ключи

https://github.com/bykvaadm/kubectl_autocomplete

#kubernetes #bash_autocomplete
как задать права на configmap в kubernetes

По тем или иным причиним нужно иногда файлам, которые мапятся в контейнер задавать права. Самый простой пример - положить скрипт и сделать его исполняемым. Сделать это можно с помощью директивы defaultMode: 0744

      volumes:
- name: wrapper
configMap:
name: wrapper
defaultMode: 0744


#kubernetes
Минуточка вакансий

В компанию занимающуюся онлайн платежами требуется финансовый аналитик.
Обязанности - работа с базой PostgreSQL и выполнение сверок с партерами.
Требуются навыки работы с SQL.

Полный рабочий день в офисе в Москве.
ЗП от 60к по договоренности.

Из плюшек: белая ЗП, офис в центре Москвы, настольный футбол и дартс, служебный MacBookPro, регулярные фрукты и холодные напитки в холодильнике.

Кому интересно - писать @noob4ik

#work #ads
Кстати, для любителей cyanogenmod (lineage os), пару недель назад они таки зарелизили официальные сборки 15-й версии (Android 8) для нескольких устройств - в основном как обычно это гугловские устройства, samsung и сяоми.

https://www.lineageos.org/Changelog-16/

#read #news
Используем systemd для запуска docker-контейнеров

[Unit]
Description=My Awesome Service
Requires=docker.service
After=docker.service

[Service]
Restart=always
RestartSec=3
ExecStartPre=/bin/sh -c "/usr/bin/docker rm -f my-awesome-service 2> /dev/null || /bin/true"
ExecStart=/usr/bin/docker run --rm -a STDIN -a STDOUT -a STDERR --env-file=/etc/default/my-awesome-service -p 0.0.0.0:3301:3301 -v /etc/project/service:/etc/wallarm -v /var/lib/blacklist:/var/lib/blacklist -v /var/log/project/service:/var/log/wallarm --name my-awesome-service wallarm-dkr.jfrog.io/my-awesome-service:v0.17.0.0
ExecStop=/usr/bin/docker stop my-awesome-service

[Install]
WantedBy=multi-user.target


#systemd #docker
Переустанавливаем gitlab с заданием root пароля

export GITLAB_ROOT_PASSWORD="pwd_>=8_chars"
export GITLAB_ROOT_EMAIL="host@example.com"

gitlab-rake gitlab:setup ${GITLAB_ROOT_PASSWORD:+GITLAB_ROOT_PASSWORD=$GITLAB_ROOT_PASSWORD} ${GITLAB_ROOT_EMAIL:+GITLAB_ROOT_EMAIL=$GITLAB_ROOT_EMAIL}


Это к вопросу, например, какого хрена у меня не логинится в gitlab, когда я поставил helm install gitlab, все же должно работать из коробки! А вот.. Длинна пароля больше 8 символов должна быть, иначе запись этого пользователя в базу даже не попадет.

#gitlab #helm #kubernetes
Let’s Encrypt начал выдавать wildcard сертификаты

https://habrahabr.ru/post/351252

#read #thirdparty #news
Админим с Буквой
Let’s Encrypt начал выдавать wildcard сертификаты https://habrahabr.ru/post/351252 #read #thirdparty #news
Пример настройки bind для получения сертификата.

$ORIGIN .
$TTL 604800 ; 1 week
example.com IN SOA ns01.example.com. root.example.com. (
33 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
NS ns01.example.com.
NS ns02.example.com.
A 8.8.4.4

$ORIGIN example.com.

$TTL 1 ; 1 second
_acme-challenge IN TXT w0TwTVFDhq2fUYbuqFiuigIGIGfqiZURWIAR_OUyNyU
_acme-challenge IN TXT Ks3zUh7wepiUf2g8GyIGHUkjbGigikqkGHYx7bLMSIA


#bind #letsencrypt
helm Blah-blah-blah already exists

Возникла ошибка при установке хелма, что какой-то компонент уже существует. Поскольку как оказалось такая проблема не только у меня была, решил сделать об этом заметку. Действительно, хелм ругается неспроста. В этой ситуации нужно убедиться, что у вас действительно нет дубликатов этого компонента, например уже развернутого в кластере, или, как в мом случае, текстовый редактор сделал backup файла в папке templates с именем <компонент>.yaml.save и хелм его начал спокойно обрабатывать.

#helm #troubleshooting
А еще небольшая радость.. hackbar запилили в quantum (FF 57+). Теперь он доступен из консоли разработчика (имхо не очень удобно)
И еще радость, что в недавно вышедшем FF59 постепенно допиливают недоделанные WebExtensions. Вполне возможно, что некоторые старые расширения (которые меняли части интерфейса) заживут новой жизнью.
Хорошая новость для тех, кто пользуется Самбой – разработчики анонсировали версию 4.8, в которой заявлена полная совместимость с Active Directory (aka АД), добавлена в модуль kdc поддержка групповых политик для паролей, и применено исправление недавней уязвимости CVE-2018-1057, позволяющей любому авторизованному непривилегированному пользователю менять пароли других. Чуть подробнее – по ссылке: http://www.opennet.ru/opennews/art.shtml?num=48260

#samba #update
Forwarded from Information Hardening
#network

немного о нюансах работы DHCP

тачка: "чуваки, есть DHCP?"
DHCP: "ага"
"дай адрес"
"держи"
тачка: "чуваки, это чей адрес?"
с галерки: "мой!"
тачка: "что ты мне выдал, скотина?! забери обратно!"

* * *

тачка: "черт! адрес занят!... есть DHCP?"
DHCP: "нуу, я"
"дай адрес"
DHCP: "чуваки, кто занял адрес?"
"кто занял адрес?"
"кто занял адрес?"
....
(тишина)
DHCP тачке: "да держи, норм адрес"
тачка: "!!!!"

* * *

...: "псс, тачка, лови адрес"


ну а че, пятница же))
one-line base64

Возникла необходимость запилить ssl-серт в ingress контроллер в k8s. на вход он принимает сертификат в bas64, причем в одну строчку. Нельзя например сделать вот так:
tls.crt: |
datadatadata
datadatadata


для того чтобы правильно сделать encoding, нужно запускать команду вот так:

base64 -w 0 example.com.key


На выходе получаем однострочный base64, который и помещаем в переменную.

#kubernetes #base64 #ssl
helm upgrade... the fucking resource already exists

хелм на данный момент все еще сырой продукт. И ведет он себя довольно-таки странно в некоторых ситуациях. При добавлении нового ресурса можно получить ошибку... что ресурс, мать его, не найден! Мало того что ресурс не найден, так если запросить kubectl, оказалось что helm все прекрасно создал!

как workaround мне повезло решить проблему так:
1) разделить все ресурсы по отдельным yaml'ам (я добавил новый ресурс - ingress+secrets два в одном)
2) удалить все эти ресурсы, на которые ругается helm
3) запустить upgrade заново и надеяться что вам повезет.

Мне - повезло, а вы?

#troubleshooting #helm #kubernetes #fucking_fuck
А еще тут говорят, что например из-за race condition можно столкнуться с тем, что один ресурс может создаться вообще в неизвестное время относительно другого.
Forwarded from Dmytro Zavalkin
# This secret has to be in the same file with service account otherwise it can
# be created after service account is created. Kubernetes won't wait for
# secret to become available while creating service account. If secret doesn't
# exist - service account creation will immediately fail.
---
apiVersion: v1
kind: Secret
type: kubernetes.io/dockercfg
metadata:
name: "{{ .Release.Name }}-docker-registry"
labels:
app: {{ .Release.Name | quote }}
data:
.dockercfg: {{ .Values.dockerCfg }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: "{{ .Release.Name }}-default"
labels:
app: {{ .Release.Name | quote }}
imagePullSecrets:
- name: "{{ .Release.Name }}-docker-registry"