Настройка ИБП Ippon Back Comfo Pro

21 апреля 2010

С выходом Ubuntu 10.04 настройка бесперебойного источника питания Ippon Back Comfo Pro стала проходить почти без всяких танцев с бубнами.

Ставим пакет nut и добавляем в /lib/udev/rules.d/52-nut-usbips.rules строчки (для вашего ИБП возможно надо будет поменять значения idVendor и idProduct, посмотрите через lsusb):

# Ippon
#  Ippon Back Comfo Pro 800
ATTR{idVendor}=="06da", ATTR{idProduct}=="0003", MODE="664", GROUP="nut"

Вытыкаем-втыкаем USB-кабель, чтобы пересоздать файл устройства.

Пишем в /etc/nut/ups.conf:

[ippon]
        driver = blazer_usb
        port = auto
        desc = "Ippon Back Comfo Pro 800"

sudo invoke-rc.d nut restart и проверим что выдаст команда upsc ippon:

$ upsc ippon
battery.voltage: 13.60
battery.voltage.nominal: 12.0
beeper.status: enabled
device.type: ups
driver.name: blazer_usb
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.4.3
driver.version.internal: 0.03
input.current.nominal: 3.0
input.frequency: 50.1
input.frequency.nominal: 50
input.voltage: 222.3
input.voltage.fault: 222.3
input.voltage.nominal: 220
output.voltage: 222.3
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 18
ups.productid: 0003
ups.status: OL
ups.temperature: 25.0
ups.type: offline / line interactive
ups.vendorid: 06da

Profit! Остальное настраиваем по собственному вкусу и желанию.

DeliciousFacebookDiggRSS FeedStumbleUponTwitter

Debian/Ubuntu , , , , , , ,

SFTP: Chroot в домашнюю папку

8 марта 2010

В новых версиях openssh (хотя не таких уж и новых, >= 4.9 если не ошибаюсь) есть возможность ограничить доступ пользователя в подсистеме sftp. Т.е. задать ему ChrootDirectory, как в proftpd. Например в домашнюю папку (ибо нефиг лазить за её пределами). Рассмотрим, как это можно реализовать.

Для начала, создадим группу sftpusers. Ограничения будут действовать только на пользователей из этой группы (мы ведь не хотим ограничивать пользователя root?):

addgroup --system sftpusers

Далее заменим подсистему sftp в /etc/ssh/sshd_config:

-Subsystem sftp /usr/lib/openssh/sftp-server
+Subsystem sftp internal-sftp

Ну и наконец запишем ограничения в тот же файл:

Match Group sftpusers
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTcpForwarding no

Не забываем перечитать конфиг:

invoke-rc.d ssh reload

Теперь разберемся с пользователями. При создании пользователя не надо указывать ему шелл, так как он все равно не сможет им воспользоваться (см. ForceCommand internal-sftp). Поэтому указываем в качестве шелла /bin/false. Домашняя папка (точнее папка, которую мы указали в ChrootDirectory) обязательно должна иметь владельцем пользователя root. Иначе будем получать ошибку:

fatal: bad ownership or modes for chroot directory "/home/%username%"

А вот группу-владельца chroot-папки можно задать любую. Но главное условие – chroot-директория должна быть доступна на запись только для пользователя root и никого больше. В противном случае получим вышеприведенную ошибку.

Рассмотрим пример создания пользователя:

useradd -G sftpusers -s /bin/false -d /home/user1 user1
mkdir /home/user1
chown root:user1 /home/user1
chmod 750 /home/user1

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

ChrootDirectory /home

А внутри /home разруливать доступ к папкам, используя обычные права доступа.

DeliciousFacebookDiggRSS FeedStumbleUponTwitter

Debian/Ubuntu , , , , , ,

Печатаем по 2 страницы на лист

7 ноября 2009

В связи с покупкой принтера, озаботился проблемой распечатки книжек. Так как книги обычно верстают под размер бумаги letter, а печатаю я на А4, то встает проблема, как уместить 4 страницы книжки на одном листе бумаге (по 2 страницы с каждой стороны) и как наименее безгеморно распечатать это.

Для нашей нелегкой задачи нам нужен пакет psutils.

Делаем раз — разбиваем нашу книжку по 2 страницы на лист:

psnup -2 book.ps book-2.ps

Делаем два — разбиваем файл на два. В первом будут нечетные страницы в обратном порядке, во втором – четные в прямом:

psselect -o -r book-2.ps book-2-odd-reverse.ps
psselect -e book-2.ps book-2-even.ps

Делаем три — вставляем в принтер побольше бумаги и запускаем на печать файл book-2-odd-reverse.ps. Между постановкой файла на печать и началом печати может пройти много времени, если postscript-файл большой и сложный. Например, у меня сейчас 80 страниц рендерятся уже больше часа (потому что в них растр отсканированной книги).

Делаем четыре — распечатанные листы снова закладываем в принтер и пускаем на печать файл book-2-even.ps, чтобы распечатать четные страницы с обратной стороны листов.

Если вы хотите распечатать книжку по всем канонам, сшивая листы в тетрадки, посмотрите на утилиту psbook.

Если оригинальный файл в pdf, то можно поставить пакет pdfjam с аналогичными утилитами для pdf, а можно сконвертировать pdf в ps.

DeliciousFacebookDiggRSS FeedStumbleUponTwitter

Debian/Ubuntu , , , , , ,

Firefox 3.5 и Ubuntu 9.10

26 октября 2009

Граждане, будьте бдительны! В Ubuntu 9.10, Firefox 3.5 работает под профайлом apparmor. Что в свою очередь может приводить к разным малообъяснимым глюкам. Например, у меня он напрочь отказывался сохранять файлы в папку /data/ (причём молча).

Если вы столкнулись с подобным поведением, откорректируйте файл /etc/apparmor.d/usr.bin.firefox-3.5 и перезагрузите конфигурацию командой invoke-rc.d apparmor reload.

DeliciousFacebookDiggRSS FeedStumbleUponTwitter

Debian/Ubuntu , , , ,

Foreign keys для ActiveRecord

21 октября 2009

Делаю очередной проект на Ruby on Rails. Как обычно, в миграциях понадобились foreign keys на уровне БД. Окинул взглядом все плагины, которые смог найти в google и на github.com. Ни один из них не умеет делать FK, используя ActiveRecord::ConnectionAdapters::Table#references и ActiveRecord::ConnectionAdapters::TableDefinition#references.

Поэтому сел и написал свой плагин: active_record_foreign_keys.

Установка:

Rails::Initializer.run do |config|
  ...
  config.gem "active_record_foreign_keys", :source => "http://gemcutter.org"
  ...
end
$ rake gems:install

Использование:

def self.up
  # create reference table
  create_table :users do |t|
  end

  # create referencing table
  create_table :a_examples do |t|
    t.references :user, :foreign_key => true
  end
  # or
  create_table :b_examples do |t|
    t.references :user, :foreign_key => { :on_update => :cascade, :on_delete => :restrict }
  end
  # or
  create_table :c_examples do |t|
  end
  add_foreign_key :c_examples, :user_id, :users, :id, :on_update => :no_action, :on_delete => :set_null
  # or change existing table
  change_table :d_examples do |t|
    t.references :user, :foreign_key => true
  end
end
def self.down
  # remove constraint
  remove_foreign_key :examples, :user_id, :users, :id
end

Плагин тестировался только под PostgreSQL, но по идее должен работать и под MySQL, и под Sqlite.

DeliciousFacebookDiggRSS FeedStumbleUponTwitter

Программирование , , ,