Как в записать образ диска на USB-носитель в OS X (dd в OS X)

USB disk

В OS X диски монтируются автоматически, а при попытке отмонитровать, что стандартной unix-командой umount, что из UI устройство пропадает из /dev, а сделать dd на примонитрованное устройство не разрешает. Как это всё обойти — ниже.

Шаг 1: смотрим командой diskutil диски до того, как вставить usb-хранилище в порт:

diskutil list                                                                                       
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage Macintosh HD            499.4 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.1 MB   disk0s3
/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           +499.0 GB   disk1
                                 Logical Volume on disk0s2
                                 5CE61117-8117-4CE4-97F1-CBA5B943E5C5
                                 Unlocked Encrypted

Шаг 2: вставляем флешку или usb-диск и снова смотрим список дисков.

diskutil list


/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage Macintosh HD            499.4 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.1 MB   disk0s3
/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           +499.0 GB   disk1
                                 Logical Volume on disk0s2
                                 5CE61117-8117-4CE4-97F1-CBA5B943E5C5
                                 Unlocked Encrypted
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *4.0 GB     disk2
   1:                 DOS_FAT_32                         4.0 GB     disk2s1

Видим, что появился /dev/disk2, 1 — размеченный слайс, теперь с этим можно работать.

Волшебная команда для отмонтирования, которая позволит не удалить устройство из /dev, отмонтируем слайс 1 диска 2:

sudo diskutil unmount /dev/disk2s1

Теперь заливаем образ обычной юниксовой командой:

sudo dd if=image.iso of=/dev/disk2 bs=1m

Ruby on Rails + PostgreSQL: типы данных

Ruby on Rails with PostgreSQL

Доступные типы данных в Rails можно посмотреть через rails-консоль командой ActiveRecord::Base.connection.native_database_types.keys. В случае использования PostgreSQL:

$ rails c
Running via Spring preloader in process 1392
Loading development environment (Rails 4.2.7)
2.3.1 :001 > ActiveRecord::Base.connection.native_database_types.keys
 => [:primary_key, :bigserial, :string, :text, :integer, :float, :decimal, :datetime, :time, :date, :daterange, :numrange, :tsrange, :tstzrange, :int4range, :int8range, :binary, :boolean, :bigint, :xml, :tsvector, :hstore, :inet, :cidr, :macaddr, :uuid, :json, :jsonb, :ltree, :citext, :point, :bit, :bit_varying, :money]

P.S.

Пара полезных ссылок по теме:

Ruby on Rails + Zurb Foundation - как убрать неиспользуемые части Foundation из ассетов

Zurb Foundation Yeti

Удалить ненужные модули CSS при использовании гема Foundation Rails просто — достаточно в файле app/assets/stylesheets/foundation_and_overrides.scss закомментировать то, что не используется:

@include foundation-global-styles;
@include foundation-grid;
@include foundation-typography;
@include foundation-button;
@include foundation-forms;
// @include foundation-visibility-classes;
// @include foundation-float-classes;
// @include foundation-accordion;
// @include foundation-accordion-menu;
// @include foundation-badge;
// @include foundation-breadcrumbs;

С удалением JS-кода всё немножко сложнее — в app/assets/javascripts/application.js есть только одна строка для подключения Foundation:

//= require foundation

Эту строку надо заменить на список JS-модулей Foundation, взяв его из файла гема foundation-rails/vendor/assets/js/foundation.js.es6, и закомментировав/убрав ненужные модули. Пример:


//= require jquery
//= require jquery_ujs
//= require jquery-ui/autocomplete
// require foundation
//= require foundation.core.js
//= require foundation.abide.js
// require foundation.accordion.js
// require foundation.accordionMenu.js
// require foundation.drilldown.js
// require foundation.dropdown.js
// require foundation.dropdownMenu.js
// require foundation.equalizer.js
// require foundation.interchange.js
// require foundation.magellan.js
// require foundation.offcanvas.js
// require foundation.orbit.js
// require foundation.responsiveMenu.js
// require foundation.responsiveToggle.js
// require foundation.reveal.js
// require foundation.slider.js
// require foundation.sticky.js
// require foundation.tabs.js
// require foundation.toggler.js
// require foundation.tooltip.js
// require foundation.util.box.js
//= require foundation.util.keyboard.js
//= require foundation.util.mediaQuery.js
// require foundation.util.motion.js
// require foundation.util.nest.js
// require foundation.util.timerAndImageLoader.js
//= require foundation.util.touch.js
//= require foundation.util.triggers.js
// require turbolinks
//= require_tree .

$(function(){ $(document).foundation(); });

Обновление PostgreSQL до версии 9.5 на OS X (Homebrew)

PostgreSQL vs Homebrew

Действия, которые надо сделать:

  1. обновляем PostgreSQL из Brew;
  2. бекапим базы;
  3. выключаем старый сервер PostgreSQL;
  4. инициализируем новый сервер;
  5. запускаем новый сервер;
  6. загружаем базы в новый сервер.

1. Обновление PostgreSQL из Brew

brew up
brew upgrade postgresql

2. Создание бекапа

pg_dumpall > dumpall.sql
mv /usr/local/var/postgres /usr/local/var/postgres-9.4

3. Отключение старого сервера

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

4. Инициализация нового сервера

initdb -D /usr/local/var/postgres

Команда initdb создаст в /usr/local/var новый каталог postgres с данными и настройками, соотвественно старые настройки надо перенести из файлов pg_hba.conf, postgresql.conf и pg_ident.conf. Не все параметры из старой версии могут подходить к новой, из-за этого новый сервер может не захотеть стартовать.

5. Запуск сервера

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Если сервер не запустился, то обо всех ошибках можно узнать из файла /usr/local/var/postgres/server.log

6. Загрузка старых баз данных

psql -d postgres -f dumpall.sql

P.S.

Страничка с postgresql.org, посвященная обновлению до 9.5 — http://www.postgresql.org/docs/9.5/static/upgrading.html

Монтирование Windows-шары (CIFS) в линуксе

//192.168.1.1/win_share /mnt/mounpoint cifs rw,user,username=win_user,workgroup=win_workgroup_or_domain,password=win_password,uid=9000,gid=9000 0 0

uid & gid — user id и group id пользователя с правами которого монтируется директория, если не указывать - смонтируется как root:root.

Git: игнорирование изменений файла

git logo

Иногда возникает ситуация, когда файл должен отслеживаться системой контроля версий, но его локальную копию надо изменять — частый случай с конфигурационными файлами. В git эта проблема решается простой командой:

git update-index --assume-unchanged FILENAME

ВАЖНО: если в удаленном репозитории файл изменится, то при пулле ('git pull') локальный файл обновится.

Команда, обратная сабжу — снова отслеживать изменения в файле:

git update-index --no-assume-unchanged FILENAME

Установка последней версии Redmine из git на Debian и OS X c Ruby 2.0.0 и RVM

Redmine logo

Забираем Redmine c гитхаба

git clone https://github.com/redmine/redmine

Ставим Ruby, создаём gemset

rvm install ruby-2.0.0
rvm use 2.0.0@redmine --create

Настраиваем БД

Копируем database.yml.example в database.yml, выбираем базу данных (MySQL, PostgeSQL, SQLite, SQL Server) и указываем параметры подключения:

cd redmine/config && cp database.yml.example database.yml && vi database.yml

Устанавливаем необходимые пакеты и гемы

Debian

apt-get install libmagickcore-dev libmagickwand-dev 

OS X

brew install imagemagick

Gem's

bundle install

Подготавливаем Redmine к запуску

Генерация secret token для верификации сессий пользователей:

rake generate_secret_token

Создаём структуру таблиц в базе данных и заливаем в неё умолчальные данные:

RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data

Запуск ;)

rails s -e production

Дефолтный логин и пароль администратора Redmine: admin/admin.

Sublime Text 2: редактирование файлов на удаленных компьютерах через SSH-туннель

Sublime Text 2 + SSH via rsub

Этот способ удаленного редактирования файлов основывается на использовании скрипта rmate, изначально разработанного для редактора TextMate, и пакета rsub rsub для Sublime Text 2.

Устанавливаем пакет rsub в Sublime Text 2

Жмём Cmd + Shift + P в Mac OS X или Ctrl + Shift + P в Linux, начинаем набирать install и выбираем "Install Package". Вводим "rsub" и выбираем его.

 Настраиваем SSH

В ~/.ssh/config можно указать конкретный хост, с которого будем открывать файлы, или можно указать "*":

echo "Host *\n    RemoteForward 52698 127.0.0.1:52698" >> ~/.ssh/config

Устанавливаем rsub на удаленной машине

"Устанавливаем" скрипт rsub (на самом деле — скачиваем с названием rsub скрипт rmate):

sudo wget -O /usr/local/bin/rsub https://raw.github.com/aurora/rmate/master/rmate

Устанавливаем права для исполнения скрипта:

sudo chmod +x /usr/local/bin/rsub

Пользуемся rsub & Sublime Text

На локальной машине должен быть запущен Sublime Text, а на удаленной открываем файл следующей командой:

rsub path_to_file/file.name

Файл откроется на редактирование в локальном Sublime.

Установка Nginx + PHP-FPM + PostgreSQL на Mac OS X (Mavericks) при помощи Homebrew

Шаг 1: установка Homebrew

Homebrew — это менеджер пакетов для OS X, как apt-get для Debian или yum для Red Hat.

Перед установкой Homebrew необходимо установить Apple Developer command line tools, для этого надо установить Xcode из Mac App Store, запустить его и выбрать пункт меню XcodePreferencesDownloads и кликнуть кнопку Install на пункт command line tools.

После установки Xcode и command line tools можно установить Homebrew:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

В процессе установки надо только ввести свой пароль. После установки надо выполнить команду

brew doctor

и, возможно, исправить ошибки/конфликты, связанные с символическими ссылками.

Шаг 2: установка и запуск Nginx

С помощью Homebrew установить Nginx предельно просто:

brew install nginx

Docroot свежеустановленного Nginx будет находиться в /usr/local/var/www.

Порт по умолчанию в настройках /usr/local/etc/nginx/nginx.conf выставлен 8080, так что веб-сервер можно запускать не имя прав root.

Чтобы Nginx запускался при логине необходимо выполнить команду:

ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents

Чтобы запустить Nginx:

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

Или, не используя launchctl, просто выполнить команду:

nginx

Хост по умолчанию: localhost:8080

Настройки nginx находятся в /usr/local/etc/nginx.

Шаг 3: установка и запуск PHP-FPM и APC

Добавляем репозиторий с PHP-FPM:

brew tap homebrew/dupes
brew tap josegonzalez/homebrew-php

Устанавливаем PHP 5.4 + FPM + поддержку PostgreSQL:

brew install php54 --with-pgsql --with-fpm

Настройки PHPphp.ini находятся здесь:

/usr/local/etc/php/5.4/php.ini

Для автоматического запука PHP-FPM при логине выполняем команду:

ln -sfv /usr/local/opt/php54/*.plist ~/Library/LaunchAgents

Загрузить PHP-FPM:

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php54.plist

Скрипт для управлния PHP-FPM находится в /usr/local/Cellar/php54/5.4.21/sbin/php54-fpm (цифры версии изменяются со временем ;) ).

Шаг 4: установка и запуск PostgreSQL

Установка проста:

brew install postgresql

Установка указанной версии — чуть больше команд:

cd /usr/local/Library/Formula/
brew versions postgresql
# 9.3.1 git checkout 89b2d08 /usr/local/Library/Formula/postgresql.rb
# 9.3.0 git checkout ae59e09 /usr/local/Library/Formula/postgresql.rb
# 9.2.4 git checkout e3ac215 /usr/local/Library/Formula/postgresql.rb
git checkout e3ac215 /usr/local/Library/Formula/postgresql.rb
brew install postgres

Создаём database cluster:

initdb /usr/local/var/postgres -E utf8

Запускаем Postgres:

postgres -D /usr/local/var/postgres

Для автоматического запуска при логине:

ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents

Теперь можно создавать пользователей Postgres и базы данных:

createuser -d -P postgres
createdb some_db

Использование SSH-ключа от Putty в Mac OS X

putty and os x

В Mac OS X SSH можно использовать прямо в терминале, но Putty создает ключ в своём формате .PPK, а для OpenSSH (установленного в ОS X, Linux и др. системах) необходим .PEM.

Из сложившейся ситуации есть два выхода: в Windows-версии Putty конвертировать .PPK в .PEM, либо поставить в Mac OS X консольную версию и конвертировать ей (что удобнее).

Итак, ставим puttygen (конвертер и генератор ключей) при помощи ключей и конвертируем что надо:

brew install putty
puttygen privatekey.ppk -O private-openssh -o privatekey.pem

Чтобы зайти по SSH на удаленный сервер с ключем выполняем команду:

ssh -i privatekey.pem user@server.com

Добавляем немного секьюрности — разрешаем читать файл ключа только текущему пользователю:

chmod go-rw privatekey.pem

Базовое использование/настройка git на машине разработчика & production-сервере

Keep calm and git rebase

Глобальные настройки git

git config --global user.name "Your Name Here"
git config --global user.email "your_email@example.com"

Добавляем имеющийся проект в git

cd /path/to/Project
git init
git add .
git commit -a -m "Initial commit"

Работа с удаленным (production) сервером

На production-сервере создаем пустой репозиторий, куда зальём содержимое репозитория с машины для разработки (dev-):

mkdir /path/to/Project && cd /path/to/Project
git init
git config receive.denyCurrentBranch warn

Последней командой разрешаем заливать в репозиторий текущую ветку (чтобы иметь возможность залить ветку master из dev-).

Загружаем содержимое dev-репозитория на production-сервер, команду выполняем на dev-машине:

git push ssh://production.server/path/to/Project master

Чтобы в будущем, делая push, не писать длинный URL, присваиваем ему название production:

git remote add production ssh://production.server/path/to/Project

Впоследствие, достаточно команды:

git push production

Создаём ветку production на production-сервере, все изменения из всех веток должны сливаться (merge) с ней:

cd /path/to/Project
git checkout -b production

Разработка и деплой

На dev-машине:

git checkout -b new_feature
…working hard
git commit
git push production

на production:

git merge new_feature

Изменить все буквы в названиях файлов в директории в нижний регистр (Linux, FreeBSD, OS X, *nix)

Вариант 1: find + awk + xargs

find ./ -type f | awk '{ print $1 " " tolower($1) }' | xargs -L 1 mv

Вариант 2: shell + tr

for i in `ls`; do mv "$i" `echo "$i" | tr "[:upper:]" "[:lower:]"`; done

Быстрый запуск майнинга биткоинов при помощи poclbm на Debian (или Ubuntu)

sudo apt-get install python-pyopencl python-serial subversion git-core  
git clone https://github.com/bmjames/python-jsonrpc.git    
cd python-jsonrpc  
sudo python setup.py install  
cd ~  
git clone https://github.com/m0mchil/poclbm.git  
cd poclbm  
python ./poclbm.py http://USER:PASS@POOL:PORT  

phpPgAdmin: Error Loading all_db.php?subject=server&action...

phpPgAdmin screenshot

Бывают ситуации, когда на машине, на которой ведётся разработка на PHP стоит phpPgAdmin, с development-версией php.ini в него можно только залогиниться, но список баз данных он отображать не будет, ругаясь словами Error Loading all_db.php?subject=server&action... Самое простое лечение — использовать php.ini-production, но такой конфиг не подходит для разработки на PHP (не будет никаких ошибок показывать и писать в логи), выход из ситуации — добавить в config.inc.php phpPgAdmin'а следующую строку:

error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Mac OS X: как очистить меню "Открыть с помощью" от дубликатов

Дубликаты программ в меню "Открыть с помощью" на Mac OS X

При длительном и беспощадном использовании различных программ на OS X в меню "Открыть с помощью" ("Open with") в Finder накапливаются дубликаты названий одних и тех же программ. Для того, чтобы избавиться от них необходимо выполнить в терминале (Terminal.app) следующую команду:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain user;killall Finder;echo "Open With has been rebuilt, Finder will relaunch"

Также, полезно сделать alias для этой длинной комманды, для периодической чистки:

alias fixow='/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain user;killall Finder;echo "Open With has been rebuilt, Finder will relaunch"'

После установки алиаса убрать дубликаты можно простой командой fixow в терминале.

Тормоза при вводе текста в программах на Mac OS X

Отчего такое бывает — хз, у меня тормоза появились после миграции с одного мака на другой, в Adium & Twitter & Skype.

Как лечить? Вот так:

sudo rm /Library/Preferences/com.skype.skype.plist
rm ~/Library/Preferences/com.skype.skype.plist
rm -rf ~/Library/Caches/com.skype.skype/

Меняем скайп на название тормозящей программы и всё ОК!

rdesktop + неработающие клавиши со стрелочками

Всё просто:

rdesktop -k en-us -z -g WIDTHxHEGIHT -N -a 16 HOSTNAME
  • -k — раскладка по-умолчанию;
  • -z — компрессия передаваемых данных;
  • -g — геометрия окна/экрана, вместо неё можно использовать -ffullscreen;
  • -N синхронизация Numlock;
  • -a — глубина цвета в битах.

Автозапуск RoR-приложения в thin при загрузке операционной системы (Debian)

Задача

Необходимо настроить автозапуск RoR-приложения с веб-сервером thin при старте системы [Debian], осложняющими задачу факторами является: запуск из-под определённого пользователя, у которого Ruby & RoR установлены из-под юзерской инсталляции RVM, а само RoR-приложение установленно в определённом gemset.

Решение

Переходим в каталог приложения и выполняем следующие команды:

rvmsudo thin install
rvmsudo update-rc.d -f thin defaults
sudo thin config -C /etc/thin/APPNAME.yml -c /PATH/TO/ROR/APP --servers N -e production
rvm wrapper RUBYVERSION@GEMSET bootup thin

Вышеприведённые команды выполняют следующее:

  • создаёт /etc/thin и /etc/init.d/thin;
  • устанавливает дефолтные ссылки сценариев инициализации;
  • устанавливает настройки thin для приложения (в данном случае — production, N серверов) в файл /etc/thin/APPNAME.yml;
  • создаёт враппер для запуска thin с определённым для приложения гемсетом.

Правим файл /etc/init.d/thin, чтобы thin запускался с соответсвующим враппером, меняем строку

DAEMON=/usr/local/rvm/gems/ruby-VERSION-VERSION@GEMSET/bin/thin

на

DAEMON=/home/USER/.rvm/bin/bootup_thin

После выполненных действий приложение уже автоматически запускается, но с правами root, чтобы сменить рута на пользователя RVM опять правим /etc/init.d/thin, модифицируя строки запуска/останова/рестарта в таком духе

$DAEMON start --all $CONFIG_PATH

на

su RVMUSER -c "$DAEMON start --all $CONFIG_PATH"

Готовый файл /etc/init.d/thin выглядит так:

DAEMON=/home/rubyworker/.rvm/bin/bootup_thin
SCRIPT_NAME=/etc/init.d/thin
CONFIG_PATH=/etc/thin

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

case "$1" in
  start)
        su rubyworker -c "$DAEMON start --all $CONFIG_PATH"
        ;;
  stop)
        su rubyworker -c "$DAEMON stop --all $CONFIG_PATH"
        ;;
  restart)
        su rubyworker -c "$DAEMON restart --all $CONFIG_PATH"
        ;;
  *)
        echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
        exit 3
        ;;
esac

:

Всё, теперь можно запускать/останавливать/перезапускать thin командой:

service thin start|stop|restart

Установка Munin на FreeBSD

Что такое Munin?

На это вопрос есть два ответа, первый, в контексте FreeBSD, Linux и прочей компьютерной ботвы англоязычная педивикия сообщает: Munin is a network/system monitoring application that presents output in graphs through a web interface.

А чисто-исторически Мунин — это один из двух воронов бога Одина (тут уже даже отечественной педивикии есть что сказать), тот который всё помнит, что символизирует.

Что из себя представляет Munin

Munin состоит из двух частей: часть, которая производит мониторинг всякого на компьютере (munin-node) и часть, которая собирает информацию, хранит её и рисует красивые графики с веб-интерфейсом (munin-master). В портах FreeBSD, однако, есть три порта со словом munin: munin-node, munin-master и munin-common, соответсвенно первый ставить надо на обследуемом компьютере, второй — там, где будем смотреть картинки (можно ставить туда же, куда и первый), ну а третий сам встанет в любом случае.

Установка Munin на FreeBSD

munin-node

cd /usr/ports/sysutils/munin-node
sudo make install clean
munin-node-configure --shell | sudo sh -x
echo "munin_node_enable=\"YES\"" >> /etc/rc.conf

В случае, если нода стоит на одном компьютере, а мастер на другом, надо подправить конфиг /usr/local/etc/munin/munin-node.conf: найти место где написано allow ^127\.0\.0\.1$ и вписать рядом похожу строку с IP-адресом мастера (пытливый читатель может тут заметить, что адрес тут пишется в виде регулярного выражения), также, если на обследуемом компьютере несколько сетевых интерфейсов, полезно будет указать на каком интерфейсе необходимо висеть демону мунина — ищем строку host * и вместо * пишем нужный адрес.

Также, необходимо отметить, что команда

munin-node-configure --shell | sudo sh -x

имеет самый важный смысл — всё остальное весьма непримечательно, а она создаёт в /usr/local/etc/munin/plugins символические ссылки на плагины, отражающие графики, без её выполнения директория пуста, и мунин при попытке старта ругнётся и не поедет. Почему то про эту волшебную команду не написано в pkg-message непонятно. (Тут замечание для линкусов — в том же Debian ссылочки сами собой появляются в /etc/munin/plugins при установке пакета.)

Всё готово, выводим ноду на орбиту:

sudo /usr/local/etc/rc.d/munin-node start

munin-master

cd /usr/ports/sysutils/munin-master
sudo make install clean

После установки надо настроить две вещи — какие ноды отрисовывать, это редактируется в /usr/local/etc/munin/munin.conf, посредством добавления записи следующего вида:

[node.example.com] address 127.0.0.1 use_node_name yes

Добавляем нужные ноды и всё OK. Munin-master генерирует по крону веб-странички и картинки и кладёт их в /usr/local/www/munin, по-умолчанию скрипт генерации запускается каждые 5 минут (соотв. запись в кроне для пользователя munin создаётся при установке порта). Чтобы подправить крон надо выполнить следующую команду:

sudo -u munin crontab -e

Ну и напоследок — надо папочку /usr/local/www/munin подключить в виде папки или виртуалхосту к любимому веб-серверу.

FreeBSD + Zeroconf

Установка и запуск

Ставим из портов необходимое ПО:

cd /usr/ports/net/avahi && make install clean
cd /usr/ports/dns/nss_mdns && make install clean

Включаем в rc.conf нужные демоны:

dbus_enable="YES"
avahi_daemon_enable="YES"

Запускаем демонов на орбиту:

/usr/local/etc/rc.d/dbus start
/usr/local/etc/rc.d/avahi-daemon start

Правим /etc/nsswitch.conf для поиска ДНС-адресов через Zeroconf:

строку

hosts: files dns

меняем на

hosts: files dns mdns

Плюшки — анонсирование сервисов в Zeroconf

Создаём файлы под каждый анонсируемый сервис:

SSH

/usr/local/etc/avahi/services/ssh.service:


  %h
  
    _ssh._tcp
    22
  

NFS

/usr/local/etc/avahi/services/nfs.service:


  %h NFS
  
    _nfs._tcp
    2049
    path=/path/to/nfs/shared/folder
  

HTTP

В моём случае — веб-морда к торрент-клиенту transmission, висящая на порту 9091.

/usr/local/etc/avahi/services/transmission.service:


  %h transmission
  
    _http._tcp
    9091
  

FreeBSD + русская локаль UTF-8

Добавляем в конфиг ядра строки:

options TEKEN_UTF8
options TEKEN_XTERM

Правим /etc/login.conf:

russian|Russian Users Accounts:\
:charset=UTF-8:\
:lang=ru_RU.UTF-8:\
:tc=default:

Создаём хэш для login.conf:

cap_mkdb /etc/login.conf

Правим /etc/csh.cshrc — устанавливаем переменные окружения:

setenv LANG ru_RU.UTF-8
setenv LC_CTYPE ru_RU.UTF-8
setenv LC_COLLATE POSIX
setenv LC_ALL ru_RU.UTF-8

Аналогично для bash-подобных шеллов правим /etc/profile:

LANG="ru_RU.UTF-8"; export LANG
LC_CTYPE="ru_RU.UTF-8"; export LC_CTYPE
LC_COLLATE="POSIX"; export LC_COLLATE
LC_ALL="ru_RU.UTF-8"; export LC_ALL

root должен быть англоязычным — правим /root/.cshrc:

setenv LANG C
setenv LC_CTYPE C
setenv LC_COLLATE POSIX
setenv LC_ALL C

Меняем драйвер консоли 'cons25' на 'xterm' в /etc/ttys

Ставим порт /usr/ports/converters/convmw и с его помощью конвертируем имена файлов в UTF-8 (если было что-то названо по-русски в koi8-r):

convmw -f koi8-r -t utf-8 /file/path/* --notest -r

P.S.

А физическая консоль всё равно будет кракозябры показывать. Но кому нужна физическая консоль с русским?

Страницы