LINUX.ORG.RU

Сообщения iljuase

 

Ubuntu 14.04 + Postgres 9.4 -> Ubuntu 20.04 + Postgres 9.6

Форум — General

Имеется сервер с Ubuntu 14.04 и Postgres 9.4 (поставлена с репозитория http://apt.postgresql.org/pub/repos/apt/dists/). Хочу сделать апгрейд ОС до 20.04 и Postgres до 9.6 (выше пока нельзя, наше приложение не тестировалось с более новыми версиями Postgres).

Как произвести upgrade? Сначала обновить Postgres с 9.4 до 9.6 на Ubuntu 14.04, а далее отключить репозиторий Postgres и обновить ОС с 14.04 до 20.04 через do-release-upgrade? Но ведь тогда бинарники Postgres на 20.04 будут от 14.04, я не уверен, что так сработает.

Или может отключить репозиторий, обновить ОС с 14.04 до 20.04, а далее уже обновить БД на 20.04? Но ведь утилита pg_upgradecluster (которая использует pg_upgrade) всё равно потребует старые бинарники и нет уверенности, что заведётся.

Как вообще корректно обновить Ubuntu с одной версии на другую, имея установленную БД Postgres? На другом сервере установлена Ubuntu 18.04 с Postgres 9.6, я тоже хочу там обновить ОС до 20.04.

 , ,

iljuase ()

Странное поведение find

Форум — General

Ubuntu 14.04.5 LTS

Запустил find по корню:

root@kinder:~# find / -name 'pyenv'

root@kinder:~# 

Ничего не нашёл. Я удивился, т.к. знал, что такая папка должна быть точно. Сделал более «широкий поиск»:

root@kinder:~# find / -name '*pyenv*'
/usr/local/pyenv_old
/usr/local/pyenv_old/test/pyenv.bats
[...]
/usr/local/pyenv_old/libexec/pyenv-version-origin
/usr/local/pyenv_old/libexec/pyenv-versions
/usr/local/pyenv_old/libexec/pyenv-completions
[...]
/usr/local/pyenv/libexec/pyenv-local
/usr/local/pyenv/libexec/pyenv-init
/usr/local/pyenv/libexec/pyenv
/usr/local/pyenv/bin/pyenv
/usr/local/pyenv/plugins/python-build/test/pyenv.bats
[...]

Файлы нашлись. Повторил поиск ещё раз по корню:

root@kinder:~# find / -name 'pyenv'
/usr/local/pyenv_old/libexec/pyenv
/usr/local/pyenv_old/bin/pyenv
/usr/local/pyenv
/usr/local/pyenv/libexec/pyenv
/usr/local/pyenv/bin/pyenv

Файлы нашлись, но далеко не все.

Как такое могло произойти?

 

iljuase ()

pg_basebackup (postgres) со сжатием — на каком этапе сжимается файл?

Форум — General

Привет. Допустим,есть БД размером в 1 ТБ. Хочу перенести его на другой сервер с помощью pg_basebackup (другие методы не предлагать, вопрос пока что больше теоретический, прорабатываю варианты). Но 1 ТБ гнать по сети не могу, слишком долго будет. Поэтому идея такая: запускать pg_basebaclup с опциями

-F t (-F, --format=p|t output format (plain (default), tar))
-z (-z, --gzip compress tar output)
-Z 7 (-Z, --compress=0-9     compress tar output with given compression level)

Так вот, вопрос, на каком этапе происходит сжатие? До передачи данных по сети (на стороне сервера, откуда копируем БД) или уже после передачи по сети (на стороне сервера, который получает копию базы в tar.gz-формате)? Если второй вариант, то когда именно сжимаются файлы? После получения всей базы или как?

 ,

iljuase ()

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

Форум — General

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

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 и сэконоить дисковое пространство

Форум — General

Добрый день!

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

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

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

Спасибо!

 ,

iljuase ()

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

Форум — General

Привет.

Хочу поиграться с 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 одним запросом

Форум — Admin

Привет.

Как убить сразу несколько сессий в 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 работает медленно со вчерашнего дня

Форум — General

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

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

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

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

 ,

iljuase ()

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

Форум — Games

Привет.

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

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

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

Спасибо.

 , ,

iljuase ()

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

Форум — General

Привет.

Есть сервер с 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?

Форум — Admin

Привет.

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

Типа этого:

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

Спасибо!

 

iljuase ()

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

Форум — General

Привет.

Задача: у нас есть прод-среда (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»?

Форум — General

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

Например:

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

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

 ,

iljuase ()

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

Форум — General

Привет.

Допустим, есть 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?

Форум — General

Привет, в конфиге /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. Перенос данных на другой диск

Форум — General

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

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

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

Спасибо!

 

iljuase ()

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

Форум — Desktop

Привет.

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

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

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

 ,

iljuase ()

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

Форум — Development

Привет.

Есть тупой вопрос, который меня беспокоит. Есть функция, которая возвращает 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

Форум — General

Привет.

Создаю скрипт и файл в папке /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. Вывести уведомление на раб. стол

Форум — General

Привет.

Есть простой код на 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 ()

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