воскресенье, 20 мая 2012 г.

Настройка X-сервера

Файл конфигурации моего X-сервера подвергался многократным доработкам. Большинство доработок приведено здесь. Из не уместившегося здесь, остались установка фирменного драйвера от nvidia и настройка xinerama для подключения телевизора. Настройка Xinerama описана в этой заметке: Xinerama: монитор и телевизор, а установка фирменного драйвера от nvidia описана здесь: Установка проприетарных драйверов ATI/nVidia в Debian GNU/Linux (Etch).

1. Получение заготовки файла конфигурации

Для начала запустим X-сервер в режиме автоматического конфигурирования:
# X -configure
X-сервер протестирует всё доступное оборудование и запишет файл конфигурации в /root/xorg.conf.new. Скопируем его в каталог /etc/X11 под именем xorg.conf:
# cp /root/xorg.conf.new /etc/X11/
Теперь можно отключить взаимодействие X-сервера с HAL. Для этого в файле /etc/X11/xorg.conf нужно прописать секцию ServerFlags и две опции:
Section "ServerFlags"
  Option "AutoAddDevices" "False"
  Option "AllowEmptyInput" "False"
EndSection
Чтобы X-сервер перезапускался при нажатии комбинации клавиш Ctrl+Alt+Backspace, можно добавить ту же секцию следующую опцию:
Option "DontZap" "False"
2. Русская раскладка

Теперь нужно русифицировать клавиатуру.

Если вы отключили HAL, то раскладки клавиатуры настраиваются в файле /etc/X11/xorg.conf. Для этого в секцию InputDevice с настройками клавиатуры нужно добавить следующие строки:
Option      "XkbRules" "xorg"
Option      "XkbModel" "pc104"
Option      "XkbLayout" "us,ru"
Option      "XkbOptions" "grp:alt_shift_toggle,grp_led:caps"
Option      "XkbVariant" ",winkeys"
Option      "AutoRepeat" "250 30"
Если HAL включен, то нужно создать файл /etc/hal/fdi/policy/10-keymap.fdi со следующим текстом:
<?xml version="1.0" encoding="UTF-8"?"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keymap">
      <append key="info.callouts.add" type="strlist">hal-setup-keymap</append>
    </match>
    <match key="info.capabilities" contains="input.keys">
      <merge key="input.xkb.rules" type="string">base</merge>
      <merge key="input.xkb.model" type="string">keyboard</merge>
      <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="Linux">
      <merge key="input.xkb.model" type="string">evdev</merge>
      <merge key="input.xkb.layout" type="string">us,ru</merge>
      <merge key="input.xkb.variant" type="string">,winkeys</merge>
      <merge key="input.xkb.options" type="string">grp:alt_shift_toggle</merge>
      <merge key="input.xkb.options" type="string">grp_led:caps</merge>
    </match>
  </device>
</deviceinfo>
Настройки клавиатуры в варианте для HAL пригодятся на случай, если в ручной конфигурации допущены какие-то ошибки. В этом случае X-сервер переключится в режим самоконфигурации и подхватит настройки клавиатуры, заданные для HAL.

Оба варианта настроек задают две раскладки: американскую английскую и русскую раскладку, которая принята в Windows (то есть на подавляющем большинстве современных серийных клавиатур). Переключателем раскладки будет комбинация одновременно нажатых клавиш Alt и Shift. Индикатором раскладки - светодиод клавиши CapsLock.

3. Настройка монитора

Все настройки монитора указываются в секции Monitor.

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

Мой монитор LG Flatron L1730S выдаёт по DDC вполне рабочие режимы, но они не совпадают с режимами, заявленными в документации. Среди режимов DDC нет режима с разрешением 1280x1024 при частоте кадровой развёртки 75 Герц.

Узнать информацию, которую монитор отдаёт видеокарте по протоколу DDC, можно с помощью команды ddcprobe из пакета xresprobe.

Значения частот вертикальной и горизонтальной развёртки можно прописать в качестве начальных:
HorizSync    30.0 - 83.0
VertRefresh  56.0 - 75.0
Теперь, чтобы добавить поддержку недостающих режимов, воспользуемся программой gtf из пакета xserver-xorg-core.

Запускаем команду, указывая желаемое разрешение:
$ gtf 1280 1024 75 -x
Она выдаст строку Modeline для этого режима, которую нужно будет включить в эту же секцию:
# 1280x1024 @ 75.00 Hz (GTF) hsync: 80.17 kHz; pclk: 138.54 MHz
Modeline "1280x1024_75.00" 138.54 1280 1368 1504 1728 1024 1025 1028 1069 -HSync +Vsync
То же самое нужно повторить для всех остальных желаемых режимов.

Максимальное значение hsync из всех Modeline'ов укажем в настройках частоты горизонтальной развёртки:
HorizSync    30.0 - 83.0
VertRefresh  56.0 - 75.0
Однако если всё определилось правильно, или вы иногда меняете монитор на другой, то лучше там ничего не указывать.

Для включения режима энергосбережения монитора нужно указать опцию DPMS:
Option "DPMS"
Правильные размеры видимой части экрана в миллиметрах можно измерить линейкой и указать в этом же разделе:
DisplaySize      340   270
4. Настройка экрана

При переключении разрешения экрана по Ctrl-Alt-+ и Ctrl-Alt-- вас может утомить листать большое количество режимов. Большинство режимов имеют очень низкую глубину цвета. Самой высокой глубиной цвета является 24-битная. Для этого в секции Screen удалим все подсекции Display, в которых опция Depth принимает значения, отличные от 24. Также полезно в секции Screen указать предпочтительную глубину цвета в 24 бита. В результате секция примет следующий вид. Здесь же можно указать доступные Modeline'ы, расчитанные с помощью программы gtf:
Section "Screen"
  Identifier "Screen0"
  Device     "Card0"
  Monitor    "Monitor0"
  DefaultDepth  24
    SubSection "Display"
      Viewport 0 0
      Depth     24
      Modes "1280x1024_75.00" "1024x768_75.00" "800x600_75.00" "640x480_75.00"
    EndSubSection
EndSection
5. Другие примеры настройки X-сервера через HAL

Другие примеры настройки X-сервера через HAL можно найти в каталоге /usr/share/hal/fdi/. Например, упомянутый пример настройки раскладок клавиатуры находится в файле /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi

6. Пример моего конфигурационного файла X-сервера
Section "ServerFlags"
        Option "AutoAddDevices" "False"
        Option "AllowEmptyInput" "False"
        Option "DontZap" "False"
EndSection

Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
        RgbPath      "/etc/X11/rgb"
        ModulePath   "/usr/lib/xorg/modules"
        FontPath     "/usr/share/fonts/X11/misc"
        FontPath     "/usr/share/fonts/X11/Type1"
        FontPath     "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection

Section "Module"
        Load  "dri"
        Load  "GLcore"
        Load  "glx"
        Load  "dbe"
        Load  "record"
        Load  "extmod"
        Load  "xtrap"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "XkbRules" "xorg"
        Option      "XkbModel" "pc104"
        Option      "XkbLayout" "us,ru"
        Option      "XkbOptions" "grp:alt_shift_toggle"
        Option      "XkbVariant" ",winkeys"
        Option      "AutoRepeat" "250 30"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "auto"
        Option      "Device" "/dev/input/mice"
        Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
        DisplaySize  338 270 # mm
        Identifier   "Monitor0"
        VendorName   "LG"
        ModelName    "Flatron L1730S"
 ### Comment all HorizSync and VertRefresh values to use DDC:
        HorizSync    30.0 - 80.2
        VertRefresh  56.0 - 75.0
        Option       "DPMS"
        # 1280x1024 @ 75.00 Hz (GTF) hsync: 80.17 kHz; pclk: 138.54 MHz
        Modeline "1280x1024_75.00"  138.54  1280 1368 1504 1728  1024 1025 1028 1069  -HSync +Vsync
        # 1024x768 @ 75.00 Hz (GTF) hsync: 60.15 kHz; pclk: 81.80 MHz
        Modeline "1024x768_75.00"  81.80  1024 1080 1192 1360  768 769 772 802  -HSync +Vsync
        # 800x600 @ 75.00 Hz (GTF) hsync: 47.02 kHz; pclk: 48.91 MHz
        Modeline "800x600_75.00"  48.91  800 840 920 1040  600 601 604 627  -HSync +Vsync
        # 640x480 @ 75.00 Hz (GTF) hsync: 37.65 kHz; pclk: 30.72 MHz
        Modeline "640x480_75.00"  30.72  640 664 728 816  480 481 484 502  -HSync +Vsync
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "SWcursor"                  # [<bool>]
        #Option     "HWcursor"                  # [<bool>]
        #Option     "NoAccel"                   # [<bool>]
        #Option     "ShadowFB"                  # [<bool>]
        #Option     "UseFBDev"                  # [<bool>]
        #Option     "Rotate"                    # [<str>]
        #Option     "VideoKey"                  # <i>
        #Option     "FlatPanel"                 # [<bool>]
        #Option     "FPDither"                  # [<bool>]
        #Option     "CrtcNumber"                # <i>
        #Option     "FPScale"                   # [<bool>]
        #Option     "FPTweak"                   # <i>
        #Option     "DualHead"                  # [<bool>]
        Identifier  "Card0"
        Driver      "nvidia"
        VendorName  "nVidia Corporation"
        BoardName   "NV43 [GeForce 6600]"
        BusID       "PCI:5:0:0"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth    24
        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes "1280x1024_75.00" "1024x768_75.00" "800x600_75.00" "640x480_75.00"
        EndSubSection
EndSection

суббота, 19 мая 2012 г.

Настройка загрузки с раздела LVM

На том же зеркале репозиториев Debian для пользователей Уфанета я настраивал LVM. У меня было несколько жёстких дисков, которые мне хотелось задействовать для хранения репозиториев. Тогда я решил это сделать, объединив все эти жёсткие диски с помощью LVM, и создав на нём отдельный большой раздел для хранения репозиториев. Для этой цели я даже прикупил SATA-контроллер с интерфейсом PCI, потому что в этом компьютере встроенного контроллера SATA не было.

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

В результате образовалась комичная ситуация - для того, чтобы загрузить систему, мне нужно было перед перезагрузкой отключать SATA-диски от контроллера. А когда BIOS уже начинал загрузку с IDE-диска, мне нужно было быстро их подключить снова, чтобы Linux нормально смонтировал разделы LVM. Впрочем, делать это мне пришлось всего несколько раз - этот домашний сервер никогда специально не выключался и грузить его таким способом приходилось только после сбоев электропитания или после перезагрузки, связанной с установкой обновлений ядра.

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

Устанавливаем утилиты для работы с томами LVM:
# apt-get install lvm2
Подготовка initrd для работы ядра с корневой файловой системой в томе LVM:
# cp /usr/share/initramfs-tools/hooks/lvm2 /etc/initramfs-tools/hooks/
# cp /usr/share/initramfs-tools/scripts/local-top/* /etc/initramfs-tools/scripts/local-top/
# update-initramfs -u
Теперь очередь GRUB. У меня стоит grub 0.97 и менять мне его пока не хочется. Поэтому нужно создать отдельный раздел для /boot. Оценив объём файлов, находящихся в каталоге /boot с помощью команды du -h --max-depth 0 /boot, я решил создать раздел boot объёмом 50 мегабайт.

Переносим содержимое /boot в новый раздел (описание процедуры переноса опущено), на оставшемся пустом месте диска создаём раздел LVM, в котором создаём логический раздел для корневой файловой системы. Переносим корневой раздел, за исключением содержимого /boot, в логический том LVM.

После того, как перенос окончен, в файле /boot/grub/menu.lst находим строчки:
title           Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/hda2 ro
initrd          /boot/initrd.img-2.6.26-2-686

title           Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/hda2 ro single
initrd          /boot/initrd.img-2.6.26-2-686
И меняем их на следующие:
title           Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/mapper/vg-root ro
initrd          /boot/initrd.img-2.6.26-2-686

title           Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/mapper/vg-root ro single
initrd          /boot/initrd.img-2.6.26-2-686
В файле /etc/fstab делаем такую-же замену. Заменяем:
/dev/hda2                 /               ext3    defaults,errors=remount-ro 0       1
На:
/dev/mapper/vg-root       /               ext3    defaults,errors=remount-ro 0       1
Можно перезагружаться.

пятница, 18 мая 2012 г.

Настройка воспроизведения MIDI в Debian GNU/Linux

С MIDI я разбирался несколько раз. Первый раз я настраивал воспроизведение MIDI для игры Doom (Музыка в PrBoom). Потом я ставил дополнительные сэмплы для того, чтобы улучшить качество воспроизведения музыки в Doom и заставить звучать те инструменты, сэмплы которых не входили в комплект программного секвенсора timidity (Музыка MIDI - улучшаем звук). Потом я купил подержанную звуковую карту Creative SoundBlaster Live 5.1! и настроил аппаратный её секвенсор.

Возможно кто-то удивится и не поймёт, зачем мне устаревшая подержанная звуковая карта? Объясняю - преимущество этой звуковой карты заключается в том, что она имеет собственную память объёмом 32 мегабайта. В эту память можно загрузить микропрограммы с эффектами или фильтрами для звука, а можно загрузить сэмплы. Современные звуковые карты во-первых зачастую уже не имеют аппаратных секвенсоров MIDI, т.к. MIDI на компьютерах давно вышел из моды, а во-вторых - используют для своих нужд прямой доступ к оперативной памяти компьютера. С одной стороны это может быть и хорошо, потому что звуковая карта может использовать сэмплы, общий объём которых ограничен только объёмом оперативной памяти компьютера, а с другой стороны это не очень хорошо, т.к. при этом звуковая карта теряет автономность и становится сильно зависимой от пропускной способности шины.

Мне же иногда хочется играть в старые игры для DOS, которые запускаются в DosBox в режиме частичной эмуляции. В старых играх мне хочется слышать ту MIDI-музыку, которая была сделана специально для игры и была встроена в неё. Но, поскольку мой компьютер староват, вычислительной мощности процессора иногда не хватает на одновременную частичную эмуляцию среды Dos и синтеза звука программным MIDI-секвенсором. В таких случаях звук начинает заикаться, а игра притормаживать. Выхода три: 1. отказаться эстетствовать и не слушать музыку в старых играх, а то и вовсе в них не играть, 2. купить мощный компьютер, что чревато лишними расходами и дополнительными хлопотами, 3. купить подходящую звуковую карту, а заодно узнать что-то новое о настройке аппаратных MIDI-секвенсоров.

Довелось мне даже испытать работу MIDI-клавиатуры (с интерфейсом USB), которую давал мне друг. Интересно, что она определилась и заработала сходу - мне для этого не понадобилось ставить никаких драйверов, не пришлось делать каких-то настроек. Я просто поставил Rosegarden (аналог Cakewalk для Linux) и клавиатура с ним прекрасно заработала.

Все эти мои эксперементы сопровождались дополнениями вики-страницы, содержимое которой я сейчас и приведу.

1. Список секвенсоров

Узнать список доступных MIDI-секвенсоров можно с помощью следующей команды:
$ aplaymidi -l
У меня эта команда выдаёт следующее:
Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
 16:0    SB Live! 5.1 Dell OEM [SB0228]   EMU10K1 MPU-401 (UART)
 17:0    Emu10k1 WaveTable                Emu10k1 Port 0
 17:1    Emu10k1 WaveTable                Emu10k1 Port 1
 17:2    Emu10k1 WaveTable                Emu10k1 Port 2
 17:3    Emu10k1 WaveTable                Emu10k1 Port 3
 20:0    CA0106                           CA0106 MPU-401 (UART)
Аппаратному MIDI-секвенсору соответствуют порты 17:0, 17:1, 17:2, 17:3. Дополнительные его характеристики можно узнать с помощью следующей команды:
$ cat /proc/asound/card0/wavetableD1
Которая должна выдать примерно следующую информацию:
Device: Emu10k1
Ports: 4
Addresses: 17:0 17:1 17:2 17:3
Use Counter: 0
Max Voices: 64
Allocated Voices: 0
Memory Size: 134217728
Memory Available: 134213632
Allocated Blocks: 1
SoundFonts: 0
Instruments: 0
Samples: 0
Locked Instruments: 0
Locked Samples: 0
2. Программный секвенсор timidity

При отсутствии аппаратных MIDI-секвенсоров (секвенсоров, имеющихся прямо в звуковой карте) можно установить программный MIDI-секвенсор:
# apt-get install timidity
Вместе с timidity будет установлен набор семплов (иначе называемых Gravis Ultra Sount Patches или коротко - GUS-патчей) freepats.

3. Улучшенные сэмплы в timidity

Набор семплов, устанавливаемый freepats, не полный и не отличается высоким качеством, поэтому можно установить дополнительный набор патчей из состава fluidsynth:
# apt-get install fluid-soundfont-gm fluid-soundfont-gs
В файле /etc/timidity/freepats.cfg добавляем следующие строчки (я добавил в начало):
dir /usr/share/sounds/sf2/
soundfont FluidR3_GM.sf2 order=0
soundfont FluidR3_GS.sf2 order=1
И перезапускаем секвенсор:
# /etc/init.d/timidity restart
4. Программный секвенсор fluidsynth

Имеется альтернативный программный MIDI-секвенсор, который называется fluidsynth. Установить его можно следующей командой:
# apt-get install fluidsynth
Секвенсор fluidsynth не имеет сценария инициализации, поэтому для его запуска необходимо написать простенький сценарий инициализации или запустить его вручную, например так:
$ fluidsynth -a alsa -i /usr/share/sounds/sf2/FluidR3_GM.sf2 -i /usr/share/sounds/sf2/FluidR3_GS.sf2 -m alsa_seq -r 44100 -s
5. Аппаратный секвенсор

Если в вашей звуковой карте имеется аппаратный MIDI-секвенсор, необходимо подгрузить модуль ядра snd-emu10k1-synth:
# modprobe snd-emu10k1-synth
Если в выводе lsmod появится подгруженный модуль, значит аппаратный MIDI-секвенсор в вашей звуковой карте есть и для его использования необходимо загрузить в звуковую карту сэмплы.

Для загрузки семплов в звуковую карту необходимо установить пакет awesfx:
# aptitude install awesfx
Загрузить сэмплы из пакетов fluid-soundfont-gm и fluid-soundfont-gs можно с помощью команд:
$ asfxload /usr/share/sounds/sf2/FluidR3_GM.sf2
$ asfxload -N /usr/share/sounds/sf2/FluidR3_GS.sf2
Первая команда загружает сэмплы вместо имеющихся, а вторая - добавляет сэмплы к имеющимся.

Для автоматической подгрузки модуля ядра при загрузке системы необходимо добавить модуль snd-emu10k1-synth в файл /etc/modules.

6. Выбор секвенсора по-умолчанию

Для настройка MIDI-секвенсора по умолчанию для определённого пользователя нужно прописать в его файл ~/.bashrc следующие строчки:
ALSA_OUTPUT_PORTS="17:0 17:1 17:2 17:3"
export ALSA_OUTPUT_PORTS
Предполагается, что оболочкой по умолчанию у пользователя назначен bash. Настройки вступают в силу при входе пользователя. Для временного применения настроек по умолчанию (до конца сеанса пользователя) можно выполнить эти команды прямо из командной строки.

7. Воспроизведение музыки

Воспроизвести музыку можно с помощью любого проигрывателя, поддерживающего воспроизведение MIDI, например pmidi:
# apt-get install pmidi
Воспроизведение музыки:
$ pmidi track.mid

четверг, 17 мая 2012 г.

Настройка rsync-сервера и использование rsync-клиента

Интересная заметка, которая по каким-то причинам до сих пор не попала в блог. В примере настройки rsync-сервера приводится реальный файл конфигурации зеркала репозиториев Debian, который я в прошлом на общественных началах держал для пользователей Уфанета. Потом Уфанет поднял собственное зеркало репозиториев, да и появились дешёвые безлимитные тарифы, поэтому моё зеркало потеряло смысл.

1. Настройка rsync-сервера

Для настройки rsync-сервера нужно установить пакет rsync:
# apt-get install rsync
Затем, прописать опции командной строки, с которыми будет запускаться rsync-сервер в файл /etc/default/rsync. В данном файле можно задать следующие опции:
  • RSYNC_ENABLE - настройка автозапуска сервера при загрузке операционной системы. Переменная принимает следующие значения:
    • false - запретить запуск сервера rsync,
    • true - запускать самостоятельный сервер rsync,
    • inetd - запускать сервер rsync при необходимости из супер-сервера inetd.
  • RSYNC_CONFIG_FILE - задаёт место расположения файла конфигурации. По умолчанию этим файлом является /etc/rsyncd.conf
  • RSYNC_OPTS - задаёт дополнительные опции командной строки для запуска rsync-сервера.
    Например, можно задать опцию "--address=123.45.67.89" (по умолчанию - все локальные адреса), чтобы указать на каком адресе следует принимать соединения и/или опцию "--port=8730" (по умолчанию - 873), чтобы указать на каком порту следует принимать соединения.
  • RSYNC_NICE - задаёт приоритет процесса в планировщике задач.
Создать файл конфигурации rsync-сервера /etc/rsync.conf:
uid = rsyncd
gid = mirror
max connections = 50
read only = yes
list = yes
syslog facility = local5
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.mp3
use chroot = yes
outgoing chmod = Fu=rw,g=rw,o=,Du=rwx,g=rx,o=

[debian]
        path = /home/mirror/debian/
        comment = Debian Lenny i386 and amd64 repository

[debian-cd]
        path = /home/mirror/debian-cd/
        comment = Debian Lenny i386 and amd64 DVD images
Описание указанных опций:
  • uid - идентификатор пользователя, от имени которого будет работать rsync-сервер,
  • gid - идентификатор группы, от имени которой будет работать rsync-сервер,
  • max connections - максимальное количество одновременных подключений к rsync-серверу. Все подключения сверх указанного лимита будут отброшены.
  • read only - разрешать клиентам только чтение,
  • list - разрешать клиентам получать список файлов. Если запретить просмотр списка файлов, то клиенты смогут получить файл только зная его точное имя,
  • syslog facility - уровень отладочных сообщений для демона syslog,
  • dont compress - указывает шаблоны имён файлов, содержимое которых не нужно сжимать при передаче. Здесь полезно указать уже сжатые файлы, повторное сжатие которых не даст никакой выгоды, а только потратит ресурсы системы - это большинство аудио-, видео-файлов, большинство графических файлов, архивы.
  • use chroot - указывает, должен ли rsync сервер в целях обеспечения большей безопасности, менять корневой каталог на указанный в path.
  • outgoing chmod - задаёт права доступа к отдаваемым файлам. Поскольку протокол rsync позволяет вместе с содержимым файлов передавать права доступа к ним и идентификаторы владельца и группы, можно задать особые права доступа, которые будут заменять реальные права доступа к данному файлу или каталогу при его передаче по сети.
В квадратных скобках задаётся имя секции. Каждая секция обязана иметь собственный параметр path. Дополнительно в ней могут быть переопределены значения глобальных опций.

После изменения опций, если ваш rsync-сервер будет работать в самостоятельном режиме, нужно перезапустить его:
# /etc/init.d/rsync restart
2. Использование rsync-клиента

Для установки rsync-клиента нужно установить пакет rsync:
# apt-get install rsync
Чтобы начать копирование с rsync-сервера, можно воспользоваться подобной командой:
$ rsync -avv rsync://anonymous@mirror.yandex.ru:873/debian/ debian/
Или проще:
$ rsync -avv rsync://mirror.yandex.ru/debian/ debian/
rsync-клиент может работать не только с rsync-сервером, он может работать и через ssh-подключение с теми машинами, где установлен rsync:
$ rsync -avv user@computer:/home/mirror/debian/ debian/
При этом он по сравнению с командой scp будет иметь следующие преимущества:
  • не будет копировать те файлы, временная отметка об изменении которых совпадает с временной меткой об изменении локальной копии файла,
  • умеет докачивать недокачанные фрагменты файла,
  • при всём при этом умеет проверять идентичность файлов с помощью хэш-функции, при необходимости докачивая отдельные блоки файла, результат вычисления хэш-функции для которых отличается.
Также rsync можно использовать для копирования локальных файлов:
$ rsync -avv /home/mirror/debian/ debian/
По сравнению с командой cp будет иметь следующие преимущества:
  • не будет копировать те файлы, временная отметка об изменении которых совпадает с временной меткой об изменении копии файла,
  • умеет копировать ссылки, устройства,
  • копирует права доступа к файлам,
  • при запуске от имени пользователя root будет копировать принадлежность файлов пользователям и группам.
При копировании можно задавать шаблоны включения и исключения файлов из процесса копирования, имеется масса других возможностей.

При синхронизации на Samba-ресурс или файловую систему FAT может случиться, что копируются не только изменённые файлы, а половина всех файлов плюс изменившиеся. Это связано с тем, что в файловой системе FAT исторически под хранение секунд отводилось лишь 5 бит. В 5 битах можно хранить не более 32 разных значений, поэтому секунды хранятся с округлением до чётного значения. Из-за этого rsync может решить, что файл изменился, хотя разница между отметками времени двух файлов составляет 1 секунду. Чтобы rsync не обращал внимание на разницу в одну секунду, следует указать ему дополнительную опцию --modify-window=1:
$ rsync -avv --modify-window=1 /home/fileserv1/ /home/fileserv2/
За более подробной информацией по программе rsync можно обратиться к системным страницам руководства rsync(1) и rsync.dconf(5) или к их переводам на русский язык rsync(1) и rsyncd.conf(5).

среда, 16 мая 2012 г.

Краткая справка по MySQL

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

1. Создать новую базу данных
> create database [db];
2. Добавить пользователя
> use mysql;
> insert into user(user,password,host) values('[user]',password('[password]'),'[host]');
3. Дать пользователю полные права на базу данных
> grant all on [db].* to [user];
4. Применить изменения прав доступа
> flush privileges;
5. Сброс пароля пользователя root в mysql

5.1. Останавливаем mysql.
# /etc/init.d/mysql stop
5.2. Запускаем mysql следующей командой:
# /usr/bin/mysqld_safe -skip-grant-tables -user=root &
5.3. Запускаем клиента mysql
# mysql -u root
5.4. Выполняем sql запрос
> update mysql.user set password=password('[password]') where user='root';
5.5. Применяем изменения
> flush privileges;
5.6. Выходим из mysql клиента выполнив в нем команду exit

5.7. Перегружаем mysql сервер.
# /etc/init.d/mysql restart
6. Снятие резервной копии

Чтобы снять резервную копию с определённой базы данных, воспользуемся следующей командой:
$ mysqldump -u [user] -p [password] [db] > db.sql
Чтобы снять резервную копию со всей базы данных, воспользуемся следующей командой:
$ mysqldump -u [user] -p [password] --all-databases > all.sql
Выполнять резервное копирование нужно под тем пользователем, который имеет доступ к базе данных. Если делаем резервную копию всех баз - пользователь должен иметь доступ ко всем базам данных.

7. Восстановление резервной копии

Чтобы восстановить резервную копию определённой базы данных, воспользуемся следующей командой:
$ mysql -u [user] -p [password] < db.sql
Выполнять восстановление резервной копии нужно под тем пользователем, который имеет полный доступ к соответствующей базе данных. Если восстанавливаем все базы данных, то восстанавливать нужно под пользователем, имеющим соответствующие права во всех базах данных.

Обозначения:
[db] - имя базы данных,
[host] - IP-адрес или доменное имя клиента MySQL,
[user] - имя пользователя,
[password] - пароль пользователя.

вторник, 15 мая 2012 г.

Настройки bash

1. Настройка автодополнения

Ставим пакет bash-completion:
# apt-get install bash-completion
Настраиваем свой ~/.bashrc, добавив в него следующие строчки:
if [ -f /etc/bash_completion ]
then
  . /etc/bash_completion
fi
  
complete -cf sudo
Теперь достаточно перелогиниться, и будет доступно умное автодополнение в командной строке. В том числе автодополняться будут опции многих команд и ожидаемые аргументы.

2. Убрать дубли из истории

При листании истории с помощью стрелок, часто бывает, что приходится проматывать довольно много одинаковых подряд идущих команд. Чтобы дубликаты не помещались в историю, нужно в файл ~/.bashrc прописать следующую переменную:
export HISTCONTROL=ignoredups
После перелогина дубли исчезнут из истории.

понедельник, 14 мая 2012 г.

Оптимизация баз данных Firefox/Iceweasel и Seamonkey/Iceape

Эти браузеры хранят часть информации в базах данных SQLite. В процессе работы эти базы данных фрагментируются, что замедляет работу браузера. Чтобы дефрагментировать базы данных, можно воспользоваться пакетом sqlite3. Установим его:
# apt-get install sqlite3
И запустим команду, которая дефрагментирует все базы данных этих браузеров в профиле пользователя:
$ find ~/.mozilla -type f -name \*.sqlite -exec sqlite3 \{\} "VACUUM;" \;
Современные версии этих браузеров, возможно, уже сами периодически выполняют подобную дефрагментацию.

воскресенье, 13 мая 2012 г.

Добавление публичного GPG-ключа репозитория Debian

Решил сдуть пыль с некоторых своих заметок сделанных когда-то на двух моих вики-страницах. Это - первая заметка попавшаяся под руку, далее последуют другие.

Бывает что при подключении нового неофициального репозитория apt-get update или aptitude update выдаёт сообщение об ошибке, содержащее фразу NO_PUBKEY 9AA38DCD55BE302B. Это означает, что репозиторий подписан GPG-ключом, публичной копии которого нет в системе. Если вы доверяете этому репозиторию, можете добавить его ключ в систему:
# gpg --recv-keys 9AA38DCD55BE302B
# gpg --armor --export 9AA38DCD55BE302B | apt-key add -
После этого можете повторить команду apt-get update или aptitude update. Теперь пакеты из этого репозитория будут устанавливаться без каких-либо дополнительных вопросов.

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