Nix

Хостинг с которым я работаю. Так что это даже как-бы не реклама

Хостинг unihost.com плюс домен бесплатно
Пользовательский поиск

Понравилось? Поделитесь с знакомыми и друзьями!

  • Unix
  • Linux
  • BSD
  • Unix-like

Linux SSH Jail и доступ к директориям

В общем встала задача дать доступ ограниченный через sftp, но только к двум определенным папкам.
Создаем пользователя и лочим его в домашней директории Об этом много где написано.
А вот теперь добавим в эту директорию пару папок к которым пользователь имеет доступ:
# mkdir newfolder
# mount --bind /folder/to/access/ newfolder

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

Повторение команды в Linux каждый n секунд

Маленькая заметка о полезной команде Watch

Когда-то мне понравилась команда multitail, которая позволяет отслеживать вывод команд и обновление логов в одном терминале разбивая его на несколько окон. Но есть вариант куда проще. Чтобы повторять команду постоянно каждых несколько секунд достаточно использовать команду watch, например статус gearman сервера:
watch -n 2 gearadmin --status

Или каждых 3 секунды просматривать последних 10 строк лога:
watch -n 3 tail -10 /var/log/php-cli.log

Bash-скрипты бекапа баз данных MariaDB и Bash-скрипт массового восстановления из бекапа.

Решил выложить пару скриптов с помощью которых работаю делаю бекап и восстановление из него. Все просто до безобразия, но мало ли, может кому пригодиться.

Скрипт создания бекапа

Создает папку с названием - текущей датой и все базы данных складывает в файл.
Изначально создадим файл mysqlbackup.sh с содержимым:
dbpass="pass"
DATE_DIR=$(date +%Y-%m-%d-%H)
mkdir /home/nelex/MySQL_BKP/${DATE_DIR}
for dbname in `echo show databases| mysql -u root -p$dbpass`; do
echo "Dump $dbname..."
mysqldump -u root -p$dbpass $dbname > "~/MySQL_BKP/${DATE_DIR}/$dbname.sql"
Создадим и папку в которую будет складываться бекап и делаем скрипт исполняемым::
mkdir ~/MySQL_BKP
chmod +x mysqlbackup.sh

Массовое создание баз данных из sql файлов и их импорт.

Понадобилось мне залить сразу несколько баз данных, и чтобы не делать это все руками я написал этот небольшой скрипт.
Скрипт берет указанную в первом параметре папку и из нее проходит по каждому SQL файлу, создает базу с названием файла без ".sql" и загоняет файл в нее. Все просто:
#!/bin/bash
indir=$1
dblogin="root"
dbpass="pass"
postfix=".sql"
prefix="./"
cd $indir
for file in `find ./ -type f -name "*$postfix"`
do
    table_tmp=${file%$postfix}
    table_tmp=${table_tmp#$prefix}
    table=${table_tmp,,}
    mysql -u$dblogin -p$dbpass -e "create database $table default charset utf8"
    mysql -u$dblogin -p$dbpass $table < $file
Делаем файл исполняемым:
chmod +x mysqlbackup.sh
Не забываем что наш скрипт бекапа создает и таблицы используемые самой СуБД, так что если вам они не нужны, удалите/переместите их.
Таким образом запускаем файл:
import_from_dir.sh ~/MySQL_BKP/2015-06-02-14

Вот и все.

Ошибки установки пакетов в Debian "missing final newline" и "bash: /usr/bin/apt-get: cannot execute binary file: Exec format error"

Жизнь на частично экспериментальной версии дистрибутива привносит свои приключения. И снова ошибка. На этот раз вида:
dpkg: unrecoverable fatal error, aborting:
files list file for package 'imagemagick-6.q16' is missing final newline

И таких ошибок было несколько, появлявшиеся одна за другой. Решение достаточно простое. Нужно найти файл с соответствующим названием и переместить в временную директорию. Не знаю стоит ли его возвращать на место, но переместить с места куда-нибудь уж точно стоит.
# mkdir /var/lib/dpkg/info/old
#mv /var/lib/dpkg/info/imagemagick-6.q16.* \  /var/lib/dpkg/info/old/
У меня таких файлов было несколько, перемещал их все, после этого dpkg заработал.
Следующая ошибка в у меня выглядела при запуске команд apt так:
bash: /usr/bin/apt-get: cannot execute binary file: Exec format error

Чтобы ее поправить нам и нужен был рабочий dpkg, печально было бы если бы тот в свою очередь тоже умер.
На этой странице выбираем нужный нам дистрибутив и ищем более свежую версию apt, в нашем случае в категории "Administration Utilities". Качаем и ставим командой:
dpkg -i apt.deb

Вероятно что выдаст сообщение о проблеме с зависимостями, точнее их версиями. В моем случае:
Unpacking libapt-pkg-dev:amd64 (1.0.9.10) over (1.0.9.7) ...
dpkg: dependency problems prevent configuration of libapt-pkg-dev:amd64:
libapt-pkg-dev:amd64 depends on libapt-pkg4.12 (= 1.0.9.10); however:
  Version of libapt-pkg4.12:amd64 on system is 1.0.9.7.
libapt-pkg-dev:amd64 depends on libapt-inst1.5 (= 1.0.9.10); however:
  Version of libapt-inst1.5:amd64 on system is 1.0.9.7.

dpkg: error processing package libapt-pkg-dev:amd64 (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
libapt-pkg-dev:amd64
Это значит что указанные пакеты так же нужно скачать нужной версии и поставить до установки этого пакета.
На этом все.

Рекурсивно задать права доступа для всех папок и для всех файлов

В очередной раз копируя шаблон админ-панели в новый проект, получил неправильные права доступа. Чтобы все махом поправить, нужно всем директориям дать доступ на чтение и открытие, а всем файлам права на чтение для всех.
Выполнить это можно всего-лишь двумя командами:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)


Найдено на superuser.com

AwesomeWM: виджет индикатор раскладки своими руками

Надоело без виджета раскладки клавиатуры, да и хотелось сделать свой виджет для Awesome WM. Версия Awesome WM 3.5.

Немного о самом виджете

Виджет использует только доступные в системе команды. Специально не делал завязку на другие программы типа kbdd и skb, так как их может не быть в системе по умолчанию. Весь код ниже идет с комментариями почти каждой строки, объясняющей что к чему и почему.

Создаем виджет

Качаем иконки
Распаковываем сами картинки(размером 48 пикселей), нужные для наших раскладок в ~/.config/awesome/keyboard/flags, предварительно создав нужные папки keyboard/flags.

В общем, если в двух словах, нам нужно создать виджет до добавления всех виджетов на панель, а потом разместить в нужном месте вместе с другими виджетами.
Код размещения виджетов выглядит приблизительно так:

Ошибка при импорте дампа базы в MariaDB

При импорте дампа базы через консоль получил следующую ошибку:
# mysql -pmypass mydm < mydb.sql
ERROR 1064 (42000) at line 3597: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*/' at line 1


Вся беда начиная со строки 3597 оказалась из-за комментариев разделенной символом новой строки на несколько строк.
К слову сказать, комментарии вида:
/*!50003 */
Представляют из себя инструкцию MySQL и MariaDB произвести некоторые действия. Но такой вот перенос разрывает по всей видимости такую инструкцию.
Так как файл достаточно большой, открыть его удобнее всего vim-ом. Можно конечно составить регулярку для sed, но у меня всего пару комментариев, по этому проще и удобнее удалить вручную
#vim mydb.sql

Переходим на нужную строку:
:3597

Совмещаем текущую строку со следующей зажав Shift+j Когда отредактировали переносы, сохраняем и выходим.
:wq

Ну и дальше у нас импорт проходит все достаточно просто
mysql -pmypass mydm < mydb.sql

P.S. Может есть варианты получше, поудобнее, если знаете напишите.

Ошибка при обновлении Debian GNU\Linux dpkg: error processing procps (--configure)

Возникла проблема при апгрейде, выглядит так:
dpkg: error processing procps (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
procps
E: Sub-process /usr/bin/dpkg returned an error code (1)


Моя версия Debian GNU\Linux:
# lsb_release -rd
Description: Debian GNU/Linux 8.0 (jessie)
Release: 8.0


Вся беда оказалась всего-лишь в измененном вручную /etc/sysctl.conf. Я добавлял туда две строчки для выгрузки драйвера который мешает другим драйверам.
Делаем бекап
cp /etc/sysctl.conf /etc/sysctl.conf_bkp


И удаляю те строки что сам добавлял. После чего апгрейд проходит успешно.

Работа над ошибками 2 или неприятности линуксоидов

Pre: Тем кто столкнется с подобным...


Внутри:
  • Загрузка в частично слетевший Grub2 и его восстановление
  • wicd не подключается к Wi-Fi роутеру
  • W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168h-1.fw for module r8169
  • Нет Awesome в GDM
  • Awesome WM не применяются настройки из ~/.config/awesome/

Debian GNU\Linux: работа над ошибками

В здоровом теле, здоровый дух. Как-то так и с компьютерами и софтом.

Итак, решил я прошерстить свою систему на предмет возникающих ошибок и разобраться хотя бы с частью из них. Для того чтобы увидеть какие ошибки сыпятся можно смотреть логи, а можно в дополнение ко всему запускать софт из терминала, как то делаю я:
#chromium&


При этом весь поток всякой чепухи будет литься в консоль. Можно сделать перенаправление вывода в файл в виде:
#chromium >/tmp/chomium.log&


Смотрим.

Ошибка 1.

Fontconfig error: Cannot load default config file


Debian GNU\Linux 8 + broadcom wi-fi + ядро 3.18

С каждым годом мои заметки про Wi-Fi под линуксом становятся все короче. И вот вам очередная.
Решил я собрать ядро Zen-Kernel 3.18 себе, прошлое 3.15 было. И не велико дело собрать сейчас ядро, вопрос с дровами на wi-fi. Попробовал собрать из исходников под 3.15 что были, патчи накладывал, качал более свежую версию дров, но все никак Wi-Fi не заводился. Работать нужно, забил на пару недель. И вот снова...
В итоге все очень просто оказалось.

Дрова Broadcom разбиты по разным пакетам в Debian репозитории.
К примеру BCM43 поддерживает чипсеты: BCM4301, BCM4306, BCM4311, BCM4312, BCM4318, BCM4321 and BCM4322
Мой же чипсет в пакете brcm80211: BCM4313,BCM43224,BCM43225 Установка описана прямо на странице. Единственное что оставалось сделать, переинициализировать модуль с дровами в системе, именно из-за этого и не завелся wi-fi сразу, не смотря на то что пакет сам у меня стоял и дрова подхватились, но устройство в iwconfig -a так и не появлялось. Итак, заветные строчки:
modprobe -r brcmsmac
modprobe brcmsmac


Теперь iwconfig -a показывает:
-a        No such device


А нифига он нормально не показывает. Показывает что нет устройства. Но это уже после подключения к точке доступа, до этого показало мое устройство :-D . Сеть появилась, а это главное, по принципу занятого Zen-линуксоида, остальное пока меня мало волнует. Работает - не трогай. Пока не поломалось.

К слову сказать, зато ifconfig -a выдает наш wlan0:
wlan0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx 
          inet addr:192.168.1.105  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: xxxx:xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:134 errors:0 dropped:0 overruns:0 frame:0
          TX packets:167 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:50
          RX bytes:26716 (26.0 KiB)  TX bytes:39745 (38.8 KiB)


Ну в общем-то на этом все. Можно вписать куда-нибудь в автозагрузку заветные строки по переинициализации модуля и забить пока работает. До след. компиляции ядра.

DBF в MySQL: Как я конвертировал ФИАС.

Добрый день, уважаемый читатель!

Вот, как всегда мне достаются весьма увлекательные задачи. В этот раз нужна была база улиц Челябинска и Казани. Те кто с подобным сталкиваются наверняка слышали о КЛАДР-е. Это такой себе список городов, улиц и т.д. Но он к 2011 году успел устареть морально и в плане разработки его забросили. К слову, тот же самый разработчик решил начать с чистого листа и в 2011г, и по текущее время разрабатывает базу ФИАС. База большая, архив 2ГБ, в распаковке около 10Гб. И вот я решил загнать всю эту базу в MySQL. Заодно скилы подтянуть. В дополнение ко всему единственный нормальный конвертер dbf2mysql для линукса поддерживает кодировку только latin1.

Выкладывают эту базу на сайте Федеральной Налоговой Службы(ФНС)
Выкладывают ее там в формате DBF и XML. Мы будем работать с DBF.

Итого, имеем платформу Debian GNU\Linux на 8-ядерном сервере, 12Гб ОЗУ и базу данных разбитую файликами на 10Гб в формате DBF.

Сам скрипт конвертации вышел таким вот:

Установка Su для Android(из Debian GNU\Linux)

В целом по интернету как не почитаешь, так получить доступ к руту под андроидом целая сказка. Но вся эта сказка сводиться всего к нескольким командам, которые выполняются на свой страх и риск.
  1. Держим на заметке подсказки что и какая команда делает.
  2. Ставим ADB - утилиту для низкоуровнего управления телефоном.
    Я ставил прямо из дистрибутива командой:
    apt-get install android-tools-adb android-tools-fastboot android-tools-fsutils
  3. Подключаем телефон
  4. Коннектимся к его консоли командой: adb shell
  5. Находим наш системный раздел командой: # mount | grep system
  6. Переподключаем его с правами на чтение-запись(было ведь только чтение):
    mount -o rw,remount -t ext4 /system
  7. Так как файл su у меня уже есть в системе, я просто создаю на него симлинк:
    ln -s /system/xbin/su /system/bin/su
  8. И назначаю права
    chmod 6755 /system/xbin/su
  9. Возвращаю доступ только на чтение файловой системе:
    mount -o ro,remount -t ext4 /system

Дальше на телефоне запускаю SuperSu который говорит что все в порядке.
Все.

Небольшой TuneUp производительности Linux

Уменьшаем интенсивность логирования

В дистрибутиве, при установке по умолчанию, логирование включено очень детально. Но если это не сервер то логировать столь детально и интенсивно возможно не нужно. По этому можно отключить отпределенное логирование закомментировав ненужные строки в конфигурационном файле /etc/rsyslog.conf:
auth,authpriv.*                        /var/log/auth.log
*.*;auth,authpriv.none         -/var/log/syslog
cron.*                         /var/log/cron.log
daemon.*                       -/var/log/daemon.log
kern.*                         -/var/log/kern.log
lpr.*                          -/var/log/lpr.log
mail.*                         -/var/log/mail.log
user.*                         -/var/log/user.log

Тут так же могут быть правила для -/var/log/debug и -/var/log/messages, так же |/dev/xconsole.
Сообщения ядра ведутся в два лога kern.log и syslog. Комментируем устанавливая символ '#' в начале соответствующей строки. При надобности точно так же включаются логи при наличии проблем в системе.

Оптимизируем кеш директорий

Приложения, такие как браузер и менеджер окон, которые используют дисковый кеш, могут соответствовать спецификации стандарта XDG Base Directory Specification. В этом случае, переменная окружения XDG_CACHE_HOME указывает директорию в которой сохраняются файлы кеша. Поместив кеш в память(ramdisk) можно сильно ускорить производительность таких приложений, в противном случае браузер и другие приложения, не поддерживающие стандарт, так и продолжат использовать тяжелый для записи дисковый кеш. Для примера, установленный в Debian Wheezy LXDE, может хранить настройки в файле /etc/alternatives/x-session-manager. При добавлении строки
export XDG_CACHE_HOME="/dev/shm/.cache"
в начале этого файла, программы запущенные из X, поддерживающие стандарт, будут использовать ramdisk в /dev/shm для хранения кеша.

В большинстве дистрибутивах основанных на Debian, tmpfs устройство находиться по пути /run/shm (должно присутствовать в /etc/fstab), и x-session-manager как бинарный файл, но вы так же можете добавить ту же строку в новый файл, в директории /etc/profile.d/, например /etc/profile.d/xdg_cache_home.sh, который будет выполняться при каждом входе в систему. Содержимое файла:
#!/bin/bash
export XDG_CACHE_HOME="/dev/shm/.cache


Используем tmpfs

Для монтирования /tmp и /var/tmp (эти директории часто используются для хранения временных файлов многих программ) в памяти(ramdisk), вам нужно добавить следующие строки в /etc/fstab:
tmpfs    /tmp        tmpfs    defaults    0 0
tmpfs    /var/tmp    tmpfs    defaults    0 0
Так же нужно добавить строку, если ее нету для /dev/shm как tmpfs:

tmpfs    /dev/shm    tmpfs    defaults    0 0


Взято отсюда.

Подружить PulseAudio + Skype + MOCp + другие

skype
Когда у кого не было проблем с PulseAudio? Все они решабельные в основном, но их хватает. И вот после обновления скайпа сейчас без пульсаудио никак не обойтись, но возникает множество проблем. Например звук в Skype не работает когда работает MOCp. Или другие приложения которые используют звук. Решение не новое, но мало ли, может кто еще не видел.

Здесь подсказано отличное решение. Это запуск приложения с параметром к PulseAudio.
Редактируем ярлык добавив параметр PULSE_LATENCY_MSEC=30 перед самым запускаемым файлом.
[Desktop Entry]
Name=Skype
Comment=Skype Internet Telephony
Exec=PULSE_LATENCY_MSEC=30 skype %U
Icon=skype.png
Terminal=false
Type=Application
Encoding=UTF-8
Categories=Network;Application;
MimeType=x-scheme-handler/skype;
X-KDE-Protocols=skype


Ну или если с консоли запускаем то просто пишем команду:
PULSE_LATENCY_MSEC=30 skype&
Ну или тот же MOCP:
PULSE_LATENCY_MSEC=30 mocp
Все вроде. Это позволяет подружить приложения между собой.

Страницы

Subscribe to RSS - Nix