Метка: bash

  • Ошибка KDE: «execvp: Ошибка формата выполняемого файла»

    Ситуация

    При запуске программы через меню приложений возникает эта ошибка, программа не запускается.

    Я встречал это на Oracle SQLDeveloper любой версии 20+, который устанавливался из официального rpm в среде Ubuntu + KDE с помощью sudo alien -dic. Ошибки не было в MATE. Может не встречаться в GNOME. Встретил только в KDE.

    Ошибки нет, если запустить программу напрямую из терминала.

    Ошибки нет, если запустить desktop-файл через gio launch.

    Выдача прав a+x на desktop-файлы не помогает.

    Запуск через kioclient5 exec прерывается ошибкой:

    Неизвестная ошибка 100
    execvp: Ошибка формата выполняемого файла
    Отправьте сообщение об ошибке на https://bugs.kde.org
    (далее…)
  • Делаем бекап проекта простым путём

    black and white plastic containers
    Photo by Markus Winkler on Unsplash

    Сегодня 07.07.2022. Два дня назад я очень глупо и почти случайно потерял всё, что было на этом сервере. Бэкапы были только от мая — это лучше, чем ничего, однако регулярного резервирования не было. Тут либо жизнь меня ничему не учит, либо уже научила и я стал достаточно аккуратен, чтобы не ронять проды как слон в посудной лавке, позволив себе облениться ¯\_(ツ)_/¯

    В общем, бекапы развернул, всё настроил; делал это в течение нескольких часов на протяжении двух дней. Жаль, я не помню что я мог или потерял окончательно, так что если не досчитаетесь каких-то постов — ну штош.

    До этого я не парился с бекапами: ну есть же какие-то, сервак не шатаю, по счетам плачу сполна, чё ему будет-то? Вчера я психанул и забацал простой скрипт, который делает всё за меня.

    В этот раз я поленился правильно, как должно: не хочешь заниматься рутиной — автоматизируй и не занимайся.

    Поскольку проекты развёрнуты по-старинке, на сервере нет докеров или чего-то сложного, значит и решение элементарно: bash + mysqldump + gzip + rsync + crontab + запасной сервер.

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

    (далее…)
  • Установка разрешения на мониторе через терминал на Ubuntu 18+

    Привет. Я тут запилил простой скрипт для установки кастомного разрешения экрана на Ubuntu.

    Однажды, я столкнулся с такой проблемой. Есть два 100% одинаковых монитора. Оба работают в максимальном разрешениии 1600×900. Оба подключены к родным видео-выходам на материнке. Однако один монитор подключен к D-Sub напрямую, а второй — через переходник HDMI <-> D-Sub. И картинка на втором по умолчанию всегда в 1920×1080, которое монитор героически сжимает в свои 1600×900 (и которое внезапно отсутствует в настройках). В результате на экране мелкое невнятное мыло, но судя по всему, картинка выдаётся в настоящем FullHD.

    Ниже — получившийся скрипт. На самом деле, я уже не один год использовал его упрощённую версию для себя. Просто я причесал его, чтобы выложил в паблик. Всё работает хорошо. Тебе остаётся только выставить положения мониторов в настройках ОС (и там, кстати, появится новый недостающий режим). Скрипт можно использовать также и с одним монитором.

    (далее…)
  • Обработка аргументов в bash-скриптах без getopt и getopts

    Привет. Я в свободное время для рабочих целей пишу один проект, который состоит из кучи bash-скриптов. Есть одна точка входа, которая из cli принимает аргументы. Этот скрипт подключает остальные куски функционала через source. В этих кусках описаны функции, которые должны обрабатывать разные аргументы, нужные только для чего-то конкретного.

    В первой версии проекта я просто явно передавал $1, $2, $N сверху вниз, в другие функции. Это было топорным решением, и оно работало, потому что возможные аргументы и их порядок был известен и прост. Но эстетически это было отвратительно. Чтобы мне было приятно смотреть на код, нужно было сильно усложнить вообще всё, чтобы всё стало намного проще.

    Итак, я должен принимать от пользователя разные аргументы в разные функции, при этом я хочу дать пользователю возможность передать на вход:

    • длинные аргументы без значений:
      ./script.sh --foo --bar
    • длинные аргументы со значениями:
      ./script.sh --foo=bar
    • короткие аргументы без значений:
      ./script.sh -a -b -c
    • короткие аргументы со значениями:
      ./script.sh -a avalue -b bvalue
    • комбинировать короткие любые короткие аргументы в одно слово:
      ./script.sh -abc bvalue
    • всё перечисленное выше — одновременно!
    • порядок аргументов не должен иметь значения
    • иметь доступ к любому из них откуда угодно в любой момент времени.
    (далее…)
  • DavFS2. Куда утекает свободное место? Got error 28 from storage engine

    DavFS2. Куда утекает свободное место? Got error 28 from storage engine

    На сервере стало уменьшаться свободное место. Какое-то время не придавал этому значения, т.к. чётко знал, что у меня дважды в день работает скрипт автоматического бекапа базы данных с выгрузкой в облако.

    Хранить бекапы в том же месте, что резервировалось — глупый риск. Поэтому я просто чистил устаревше архивы на сервере ручками раз в несколько дней, т.к. они уже есть в облаке.

    Однажды утром, после свежего бекапа, MySQL стал падать с ошибкой:

    Got error 28 from storage engine

    Эта ошибка возникает во время выборки записей из БД. Поскольку выборка хранится в кеше на диске и в этот момент возникает ошибка, значит что-то с ним не так. Самое банальное — закончилось место. По факту так и оказалось. СУБД просто негде было хранить файлы кеша.

    Но как? На сервере свежий бекап только один, и его размер несоизмеримо меньше, чем сейчас должно быть свободного места.

    Начал поиски обжоры.

    (далее…)