LINUX.ORG.RU

Сообщения iljuase

 

ansible, как прокинуть перемнные окружения (environment variables) в ad hoc команду?

Привет, нужно сделать вот это:

curl -L ya.ru

С помощью ansible, предварительно экспортировав переменную окружения для proxy.

Вот типа этого:

ansible  -f 7  -i ./hosts balancer  -m shell -a 'curl -L  ya.ru' -e "http_proxy:127.0.0.1:3128 https_proxy:127.0.0.1:3128"

Но команда выше некорректная. Как исправить? В интернетах примеры только с playbook, а мне нужно в ad-hoc команде.

Вот это тоже не работает:

ansible  -f 7  -i ./hosts balancer  -m shell -a 'curl -L  ya.ru' -e http_proxy:127.0.0.1:3128 -e https_proxy:127.0.0.1:3128

 

iljuase
()

Создать много копий базы данных postgres и сэконоить дисковое пространство

Добрый день!

Есть prod-база Postgres размером в 1.3 ТБ. Необходимо создать около пяти тестовых сред (несколько для аналитиков, несколько для разработчиков, одну для тестировщиков и т.д.) с этой базой данных, чтобы они периодически обновлялись с прода.

Можно развернуть пять разных виртуалок с отдельными базами, но тогда уйдёт много дискового пространства и уйдёт много времени на разворот одной и той же базы данных.

Можно ли как-то сэкономить дисковое пространство? Я знаю, что можно это реализовать через btrfs + subvolumes, но есть ли другие варианты?

Спасибо!

 

iljuase
()

Не работает bonding в VirtualBox

Привет.

Хочу поиграться с bonding в Linux в исследовательских целях. Создал VM с двумя сетевыми интерфейсами (bridge) в VirtualBox: https://imgur.com/a/4GWXIqX

Далее объединил их в bonding: https://imgur.com/a/ZpoAGr1

Но ip не присваивается, сеть не работает.

ip- адрес должен приходить с роутера TP-Link Archer C20 (https://www.tp-link.com/ru/home-networking/wifi-router/archer-c20/). Т.е. мой ПК аодключён к роутеру через кабель и на нём уже запущен VirtualBox.

В чём может быть проблема? Для типа Бондинга round-robin оборудование (в моём случае роутер) не должен же поддерживать ничего на своей стороне? Без Бондинга всё работает.

 ,

iljuase
()

Убить несколько сессий в postgres одним запросом

Привет.

Как убить сразу несколько сессий в postgres одним запросом? Запросы нужно перечислять списком (вариант where datname='my_db' не подходит).

Сейчас я делаю так:

select pg_terminate_backend(pid) from pg_stat_activity where pid in  (19215,19216,19244);

Но мне кажется, это некрасиво и слишком громоздко. Как сделать красиво и элегантно?

 

iljuase
()

ru.archive.ubuntu.com работает медленно со вчерашнего дня

Вчера в 11 вечера при обновлении Firefox заметил, что скорость скачивания с российских реп Ubuntu упала до 32-200 кб\сек. Подумал, что дело в провайдере и пошёл спать.

Сегодня утром на работе обновляю Firefox на ноуте — скорость тоже не радует. На работе провайдер другой, значит, дело не в провайдере.

Кто хостит ru.archive.ubuntu.com и кому писать? Менять репы на европейские пока не хочется...

У всех такая проблема?

 ,

iljuase
()

DualShock 4 v2 можно ли взять для Ubuntu 19.04 + steam?

Привет.

Хочу приобрести DualShock 4 v2 по акции за 2500 руб (https://www.mvideo.ru/products/geimpad-dlya-konsoli-ps4-playstation-4-dualsho... + промокод super500)

Скажите, пожалуйста, он полностью совместим с Linux? Буду играть только лицензионные игры со Steam. Есть у кого опыт?

Хороший ли выбор за свои деньги?

Спасибо.

 ,

iljuase
()

Куда подевалась оперативная память?

Привет.

Есть сервер с 24GB RAM:

bars@demo-btrfs:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          24104       16173        1940        5003        5991        2576
Swap:             0           0           0
Видно, что свободно 2.5 GB RAM.

Но кто есть RAM? Я не понимаю. Вот htop: https://i.imgur.com/exjJKRv.png

Видно, что нету прямо активных потребителей RAM.

Вот подсчёт потребителей памяти через ps:

bars@demo-btrfs:~$ ps aux | awk '{sum+=$6} END {print sum / 1024}'
1301.44

HugePages не используется:

bars@demo-btrfs:~$ grep -i huge /proc/meminfo 
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

balooning нету:

bars@demo-btrfs:~$ systemd-detect-virt
vmware
bars@demo-btrfs:~$ vmware-toolbox-cmd stat balloon
0 MB

Прикладываю /proc/meminfo:

MemTotal:       24683516 kB
MemFree:         1994120 kB
MemAvailable:    2640152 kB
Buffers:           25684 kB
Cached:          6005996 kB
SwapCached:            0 kB
Active:          3658092 kB
Inactive:        2609192 kB
Active(anon):    3226240 kB
Inactive(anon):  2134996 kB
Active(file):     431852 kB
Inactive(file):   474196 kB
Unevictable:       14088 kB
Mlocked:           14088 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               776 kB
Writeback:             0 kB
AnonPages:        249668 kB
Mapped:           550568 kB
Shmem:           5123404 kB
Slab:             197020 kB
SReclaimable:      98404 kB
SUnreclaim:        98616 kB
KernelStack:        6448 kB
PageTables:        16016 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    12341756 kB
Committed_AS:   20304992 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:    21727168 kB
DirectMap2M:     3438592 kB
DirectMap1G:     2097152 kB

Так кто есть оперативку?

 ,

iljuase
()

Что должен уметь делать администратор postgres?

Привет.

Занимаюсь изучением Postgres. Можете написать список типичных задач, которые должен уметь выполнять администратор баз данных postgres?

Типа этого:

  • Снимать дампы
  • Разворачивать дампы
  • Создавать пользователей
  • Редактировать pg_hba.conf и т.д.

Спасибо!

 

iljuase
()

pg_restore exit code; игнорирвоание несущественных ошибок — как лучше поступить?

Привет.

Задача: у нас есть прод-среда (prod-server) и тестовая среда (test-server). На обеих серверах есть база данных postgres, и иногда наши аналитики ставят задачу на «рефреш» базы данных (сдампить прод-среду и перелить данные на тестовую). Мне это надоело руками делать и пришла в голову гениальная идея: сделать это через Jenkins.

Чтобы аналитики заходили в Jenkins, нажимали одну кнопку и сами обновляли базу без нашего участия. Типа этого: https://imgur.com/a/hU1AEwS

Вопрос 1: Aдекватно ли использовать Jenkins в данном случае? Просто Jenkins создан в первую очередь для разработки, а не таких задач, насколько я понимаю... Если не адекватно — что можно использовать? Надо бесплатное решение и Open Source, компания вряд ли будет закупать что-то новое по нашим хотелкам.

----------------------------

Окей, я написал такой простой сценарий в Jenkins:

#enable debug mode and stop script ib case of errors
set -x
set -e

unset PGCLUSTER

#generate file name
if [[ "$databse_dump_date" == "latest" ]]
then 
dump_name=bars_web_bb_`date  -d "1 day ago"  "+%F"`.dump
else
dump_name=bars_web_bb_$databse_dump_date.dump
fi

#copy dump from backup server to /tmp/
scp -o "ProxyCommand=ssh -q -N -W %h:%p my_username@192.168.221.35" root@172.153.153.54:/backups/daily_backups/$dump_name /tmp/

#block all new connection
psql -c "ALTER DATABASE web_bb_chelyab CONNECTION LIMIT 0;"

#recreate database
psql -c "select pg_terminate_backend(pid) from pg_stat_activity where datname='web_bb_chelyab';"
psql -c "DROP DATABASE web_bb_chelyab;"
psql -c "CREATE DATABASE web_bb_chelyab OWNER bars_web_bb;"

#restore_database
pg_restore -U bars_web_bb -d web_bb_chelyab -j 2 /tmp/$dump_name
psql -c "ALTER DATABASE web_bb_chelyab CONNECTION LIMIT -1;"

#remove dump
rm -f /tmp/$dump_name

То есть просто копируем дамп через scp, пересоздаём базу данных, делаем pg_restore. Всё бы хорошо, но нет. При тестировании обнаружил ошибку:

+ pg_restore -U bars_web_bb -d web_bb_chelyab -j 2 /tmp/bars_web_bb_2019-08-15.dump
CREATE DATABASE
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 34405; 0 0 COMMENT EXTENSION plpgsql 
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
    Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';



WARNING: errors ignored on restore: 1
[SSH] exit-status: 1
Build step 'Execute shell script on remote host using ssh' marked build as failure
[BFA] Scanning build for known causes...
[BFA] No failure causes found
[BFA] Done. 0s
Finished: FAILURE

И Jenkins-job завершился аварийно, так как при выполнении команды pg_restore произошли незначительные ошибки.

Углубившись в эту тему, я нашёл тему на stackoverflow: https://stackoverflow.com/questions/32147653/how-do-i-reliably-determine-whet...

Типа pg_restore почти всегда игнорирует ошибки при восстанволении, и, в конечном счёте, возвращает не 0, а 1. Он не умеет определять, какие ошибки критичные, а какие нет. В моём случае из-за незначительных ошибок jenkins-job не завершился корректно.

Вопрос 2: как лучше поступить в моём случае, чтобы Jenkins-Job игноировал незначительные ошибки? В голову приходит только этот вариант:

set -x
set -e
...
[копирование дампа, set -e нужен, чтобы не начинать восстанволение, если scp авершится неудачно]
set +e #убираем set -e, чтобы не прерывать скрипт в случае незначительных ошибок в pg_restore
pg_restore -U bars_web_bb -d web_bb_chelyab -j 2 /tmp/$dump_name
set -e [снова включаем set -e]
psql -c "ALTER DATABASE web_bb_chelyab CONNECTION LIMIT -1;"

#remove dump
rm -f /tmp/$dump_name

Этот вариант адекватен? Есть ли лучше способы?

 ,

iljuase
()

Что значит «escaping undone»?

Из документации: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Description

Например:

Same as "%i", but with escaping undone.

Как это расшифровывается? Переводчики не помогают.

 ,

iljuase
()

Выполнить баш-скрипт, сохранить выполняемую команду, stdout и stderr в один файл

Привет.

Допустим, есть bash-скрипт 1.sh:

sleep 10s
echo AAA
rm -rf /tmp/1/*
rm -rf /tmp/2/*
ls /tmp/

Мне нужно запустить его, и сохранить stdout\stderr в файл и чтобы было понятно, какая команда записала выполнялась перед этим.

Перенаправить syderr\stdout я могу, например, так:

./1.sh &>/tmp/1.log

Но я не узнаю, какая команда именно записала то или иное в лог.

Хочу получить типа этого:

sleep 10s
тут stderr+stdout
echo AAA
тут stderr+stdout 
...

Как это сделать? На ум приходит только тупой цикл типа этого:

commands="sleep 10s
echo AAA
rm -rf /tmp/1/*
rm -rf /tmp/2/*
ls /tmp/"

for i in $commands
do
echo $i
$i
done

Как лучше сделать?

 

iljuase
()

Что означает !DENY в sudoers?

Привет, в конфиге /etc/sudoers столкнулся с такой записью:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
%devadmins	ALL=(ALL)	ALL, !DENY

Я вхожу в группу devadmins.

Я не могу сделать «sudo su - www-data», но могу, к примеру, сделать «sudo -u www-data -i» или «sudo cat /etc/sudoers». Или вообще отредактировать этот файл: «sudo nano /etc/sudoers».

Что мне запрещено? Не совсем понял смысл второй строки (!DENY)... Или что хотели сделать админы?

 

iljuase
()

lvconvert vs pvmove. Перенос данных на другой диск

Привет. Надо перенести данные с одного диска на другой.

Можно воспользоваться двумя способами минимум:
https://www.tecmint.com/lvm-storage-migration/
1) Создать зеркало, перенести данные, выкинуть оригинальной диск из зеркала и т.д.
2) Воспользоваться просто pvmove

Какая между ними принципиальная разница и какой способ лучше?

Спасибо!

 

iljuase
()

Ubuntu 19.04, Gnome. Как изменить интервал проверки доступности новых обновлений?

Привет.

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

Всё окей, но проерка обновлений происходит слишком часто. Из-за этого утилита update-notifier пишет гигабайты данных на диск. Можно как-то изменить этот интервал? Проверять раз в три часа мне бы хватило.

Эта утилита запускается вместе с gnome. В dconf опции не нашёл: https://imgur.com/a/6kLpSL4

 ,

iljuase
()

python3. Вопрос по синтаксису. Как принято писать у опытных разработчиков? else нужно в данном случае или нет?

Привет.

Есть тупой вопрос, который меня беспокоит. Есть функция, которая возвращает True, если переменная requests содержит слово «Next», иначе вернёт False.

Можно записать с явным указанием else:

def get_next_page(requests):
    """Does next page exist?"""
    if requests.text.find("Next") != -1:
        return True
    else:
        return False

А можно без else, результат будет одинаковым:

def get_next_page(requests):
    """Does next page exist?"""
    if requests.text.find("Next") != -1:
        return True
    return False

Какой вариант наиболее предпочтительный?

 

iljuase
()

опция DynamicUser=true в systemd service, не могу писать в файл с правами 777

Привет.

Создаю скрипт и файл в папке /opt/1/ с правами 777:

sudo mkdir -p  /opt/1/
sudo chmod -R 777 /opt/1/
echo 'hey' >/opt/1/1.txt
chmod 777 /opt/1/1.txt

vodka@vodka-PC:~$ ll /opt/1/1.txt
-rwxrwxrwx 1 vodka vodka 4 мая  1 17:30 /opt/1/1.txt*

Сам скрипт:

vodka@vodka-PC:~$ cat /opt/1/2.py
#!/usr/bin/python3
my_file=open("/opt/1/1.txt", 'w')
my_file.write('i am not OK')
my_file.close

Создаю сервис и делаю так, чтобы от запускался от пользователя и группы, которых на самом деле не существует (elena\temnikova) с опцией DynamicUser=true:

[Unit]
Description=Hey

[Service]
Type=oneshot
ExecStart=/opt/1/2.py
User=elena
Group=temnikova
StandardOutput=journal
StandardError=journal
DynamicUser=true

[Install]
WantedBy=multi-user.target

Запускаю и получаю ошибку о том, что скрипт не может писать в файл, у которого права 777 (/opt/1/1.txt):

vodka@vodka-PC:~$ sudo systemctl daemon-reload 
vodka@vodka-PC:~$ sudo systemctl start elena
мая 01 17:41:04 vodka-PC systemd[1]: Starting Hey...
мая 01 17:41:04 vodka-PC 2.py[25861]: Traceback (most recent call last):
мая 01 17:41:04 vodka-PC 2.py[25861]:   File "/opt/1/2.py", line 2, in <module>
мая 01 17:41:04 vodka-PC 2.py[25861]:     my_file=open("/opt/1/1.txt", 'w')
мая 01 17:41:04 vodka-PC 2.py[25861]: OSError: [Errno 30] Read-only file system: '/opt/1/1.txt'
мая 01 17:41:04 vodka-PC 2.py[25861]: Error in sys.excepthook:
мая 01 17:41:04 vodka-PC 2.py[25861]: Traceback (most recent call last):
мая 01 17:41:04 vodka-PC 2.py[25861]:   File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 145, in apport_excepthook
мая 01 17:41:04 vodka-PC 2.py[25861]:     os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), 'wb') as f:
мая 01 17:41:04 vodka-PC 2.py[25861]: OSError: [Errno 30] Read-only file system: '/var/crash/_opt_1_2.py.64592.crash'
мая 01 17:41:04 vodka-PC 2.py[25861]: Original exception was:
мая 01 17:41:04 vodka-PC 2.py[25861]: Traceback (most recent call last):
мая 01 17:41:04 vodka-PC 2.py[25861]:   File "/opt/1/2.py", line 2, in <module>
мая 01 17:41:04 vodka-PC 2.py[25861]:     my_file=open("/opt/1/1.txt", 'w')
мая 01 17:41:04 vodka-PC 2.py[25861]: OSError: [Errno 30] Read-only file system: '/opt/1/1.txt'
мая 01 17:41:04 vodka-PC systemd[1]: elena.service: Main process exited, code=exited, status=1/FAILURE
мая 01 17:41:04 vodka-PC systemd[1]: elena.service: Failed with result 'exit-code'.
мая 01 17:41:04 vodka-PC systemd[1]: Failed to start Hey.

Кто-нибудь может подсказать, что я делаю не так? Спасибо!

 , , ,

iljuase
()

Python3. notify2. Вывести уведомление на раб. стол

Привет.

Есть простой код на python3, который выводит уведомление на раб. стол:

#!/usr/bin/python3
import notify2

def set_notify(head, text):
    try:
        notify2.init('Steam_gifts_bot')
        n = notify2.Notification(head, text)
        n.set_timeout(15000)
        n.show()
    except Exception as e:
        print(f"Can not send the notification: {e}")

set_notify("Hey", "I am here")

Всё работает, если запустить с терминала. Но если запустить этот же скрипт как «сервис», то уведомление не работает из-за ошибки.

Сервис:

vodka@vodka-PC:~$ cat /etc/systemd/system/1.service
[Unit]
Description=Hey

[Service]
Type=simple
ExecStart=/tmp/1.py
ExecStop=killall 1.py
User=vodka
Group=vodka
StandardOutput=journal
StandardError=journal
Environment="PYTHONUNBUFFERED=on"
Environment="DISPLAY=:1"

[Install]
WantedBy=multi-user.target

Ошибка:

мая 01 16:43:44 vodka-PC dbus-daemon[13634]: [session uid=1000 pid=13631] AppArmor D-Bus mediation is enabled
мая 01 16:43:47 vodka-PC 1.py[13628]: Can not send the notification: org.freedesktop.DBus.Error.NoServer: Failed to connect to socket /tmp/dbus-e4nBzpAGhV: Connection refused

Есть идеи. как исправить?

 , ,

iljuase
()

docker, сломал автозапуск контейнера после удаления другого контейнера [--volumes-from]

Привет.

Был контейнер check-mk. Вышел новый image и я решил обновить приложение согласно инструкции: https://hub.docker.com/r/checkmk/check-mk-raw

Если кратко, сделал вот это:

docker container run -dit -p 8080:5000 --volumes-from monitoring_old --name monitoring checkmk/check-mk-raw:1.5.0p15

А потом удалил контейнер monitoring_old согласно инструкции:

docker rm monitoring_old

Сейчас после ребута ПК этот контейнер не стартует автоматически:

апр 22 11:09:14 vodka-PC dockerd[1348]: time="2019-04-22T11:09:14.931990498+03:00" level=info msg="Loading containers: start."
апр 22 11:09:14 vodka-PC dockerd[1348]: time="2019-04-22T11:09:14.936571404+03:00" level=error msg="Error looking up volumes-from container" error="No such container: monitoring" from-container=monitoring
апр 22 11:09:14 vodka-PC dockerd[1348]: time="2019-04-22T11:09:14.937898922+03:00" level=error msg="Error looking up volumes-from container" error="No such container: monitoring" from-container=monitoring

Но при этом руками он стартует:

vodka@vodka-PC:~$ docker container ls -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                      PORTS               NAMES
c92c54185519        checkmk/check-mk-raw:1.5.0p15   "/docker-entrypoint.…"   19 minutes ago      Exited (0) 16 minutes ago                       monitoring_p15
65dcdd9aa92a        checkmk/check-mk-raw:1.5.0p15   "/docker-entrypoint.…"   About an hour ago   Exited (0) 18 minutes ago                       monitoring_new
vodka@vodka-PC:~$ docker start c92c54185519
c92c54185519
vodka@vodka-PC:~$ docker container ls 
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                            PORTS                              NAMES
c92c54185519        checkmk/check-mk-raw:1.5.0p15   "/docker-entrypoint.…"   19 minutes ago      Up 4 seconds (health: starting)   6557/tcp, 0.0.0.0:8080->5000/tcp   monitoring_p15

Как починить автозапуск?

 ,

iljuase
()

нужна помощь с od (HEX->DEC)

Привет,

Не могу разобраться с конструкцией:

sudo dd if=/dev/cpu/0/cpuid bs=16 count=8 2>/dev/null | od -j 112 -A n -t u4

После выполнения команды я получаю вот это:

vodka@vodka-PC:~$ sudo dd if=/dev/cpu/0/cpuid bs=16 count=8 2>/dev/null | od -j 112 -A n -t u4
          0   43804591          0 2617245696

Как воспроизвести это, скажем, с ghex? Я делаю вот это:

vodka@vodka-PC:~$ sudo dd if=/dev/cpu/0/cpuid bs=16 count=8 2>/dev/null 1>/tmp/p.txt

Открываю файл с ghex и иду на 113 байт:

00 00 00 AF 67 9C 02 00 00 00 00 00 00 00 9C
https://i.imgur.com/oqieiOg.png

Как из всего этого получить 0 43804591 0 2617245696?

Спасибо.

 

iljuase
()

Что значит [ $(( capabilities >> 2 & 1 )) -eq 1 ]?

С 2251 строки (https://github.com/speed47/spectre-meltdown-checker/blob/master/spectre-meltd...):

[ $(( capabilities >> 0 & 1 )) -eq 1 ] && capabilities_rdcl_no=1
[ $(( capabilities >> 1 & 1 )) -eq 1 ] && capabilities_ibrs_all=1
[ $(( capabilities >> 2 & 1 )) -eq 1 ] && capabilities_rsba=1
[ $(( capabilities >> 3 & 1 )) -eq 1 ] && capabilities_l1dflush_no=1
[ $(( capabilities >> 4 & 1 )) -eq 1 ] && capabilities_ssb_no=1

Как понимать конструкцию «capabilities >> 3 & 1»?

Спасибо.

 

iljuase
()

RSS подписка на новые темы