среда, 17 ноября 2010 г.

cygwin с нуля

Наверное в жизни каждого человека случается ситуация, когда обстоятельства сильнее. Так случилось и со мной. На рабочем ноутбуке у меня установлена Windows. И не то, чтобы были какие-то административные запреты со стороны компании на работу в других операционных системах. Просто есть ряд приложений, которые однозначно лучше работают в Windows, а есть ряд специализированных приложений, которые работают исключительно под Windows. Для предварительной обработки больших объемов данных удобно обрабатывать их из консоли, пропуская через различные парсеры, фильтры. Долгое время я старался прижиться со стандартной командной строкой Windows, но к сожалению работать с ней могут исключительно выносливые люди. Опущу все недостатки, просто скажу: есть альтернатива - cygwin.


В принципе на этом можно было бы и остановится, указав на инсталяционный файл setup.exe. Но кто ищет простые пути? У меня возникали ситуации, когда мне нужен был cygwin на компьютере на котором отсутствовали права на инсталляцию нового программного обеспечения. Что бы обойти эти ограничения, возник вопрос в проработке запуска cygwin среды без процесса инсталляции.

Опишу процесс инсталяции cygwin без исползования setup.exe. Сразу же отмечу, данная процедура установки все лишь мое видение и может содержать ошибки о которых я не знаю в настоящий момент. Сейчас в целом среда рабочая и используется мной в работе. Но никто не застрахован от ошибок, что что-то да появится. Буду очень признателен, если кто-то укажет на ошибки.

Исходные файлы для работы cygwin продублированы на различных зеркалах. Полный список зеркал доступен по ссылке http://www.cygwin.com/mirrors.lst. Для упрощения установки можно воспользоваться python скриптом cygwin-tool.py доступным на sources-ownport. Для корректной работы скрипта необходимо создать папку distfiles, где будут храниться загруженные файлы, необходим python и wget.

Для получения списка зеркал необходимо выполнить команду: python cygwin-tool.py -m

Выбрав из полученного списка зеркал distfiles\mirrors.lst предпочтительное зеркало cygwin, необходимо получить список доступных пакетов, содержащийся в файлах setup.ini и setup-legacy.ini. Загружаем их в distfiles\ с помощью: python cygwin-tool.py -s <url_адрес_зеркала>

Вывести список доступных для установки пакетов можно с помощью python cygwin-tool.py -l .Скрипт отображает название пакета, категорию к которой он относится, список зависимостей, а также файл инсталляции. Пример вывода для xconsole:

xconsole {'category': ['X11'], 'requires': ['libX11_6', 'libXaw7', 'libXmu6', 'libXt6', 'cygwin'], 'install': 'release/X.Org/xconsole/xconsole-1.0.3-2.tar.bz2'}

Найти пакет в файле setup.ini не составит труда, а вот сделать выборку требуемых для него пакетов потребует некоторой сноровки. Для упрощения этой задачи можно выполнить команду python cygwin-tool.py -f <название_пакета>

Для загрузки пакетов в директорию distfiles\ необходимо выполнить: python cygwin-tool.py -d <название_пакета> -u <url_адрес_зеркала>. По минимуму, для запуска коммандной строки можно загрузить только bash и все его зависимости. На примерах всегда проще объяснять, поэтому я расскажу об установке bash. Добавить еще приложений не составит труда, просто скачайте точно так же как и bash. А все остальное будет более менее общением.

Загруженные пакеты необходимо распаковать в директорию, где будет расположен cygwin. Подойдет любой архиватор поддерживающий форматы bz2 и tar. Можно воспользоваться бесплатным 7zip. В результате распаковки получаем 3 директории: bin, etc и usr. Если оставить все как есть, то при запуске bash корневая директория монтируется в usr/bin, а это не совсем корректно. Насколько я понимаю монтирование корневой директории происходит автоматически исходя из того, в какой директории находится файл bash.exe и управлять этим процессом особенно нельзя. Хотя с этим еще стоит разобраться. Сейчас же, для упрощения переносим все файлы из usr/bin в bin, а также файлы из usr/lib в директорию lib, которую необходимо создать. Cоздав и запустив файл cygwin.bat:
@echo off
set CYGWIN_DIR=<директория_cygwin>

chdir %CYGWIN_DIR%
set LANG=C.UTF-8
set PATH=%PATH%;%CYGWIN_DIR%\bin;%CYGWIN_DIR%\usr\bin

bash --login -i

получаем вполне рабочую систему.

Теперь нужно выполнить ряд post-install скриптов для настройки системы:
/bin/copy-user-registry-fstab
/etc/postinstall/000-cygwin-post-install.sh
/etc/postinstall/bash.sh
/etc/postinstall/coreutils.sh
/etc/postinstall/passwd-grp.sh
/etc/postinstall/terminfo.sh
/etc/postinstall/terminfo0.sh

Собственно это все. Для запуска командной строки достаточно запуска cygwin.bat. Как добавить дополнительные пакеты, думаю не составит труда. Настройка окружения - это уже дело вкуса каждого.


Ссылки по теме:
A Guide to Building a Portable Cygwin
Cygwin 1.7.x, mounts and /etc/fstab
Cygwin on portable storage devices
Hints for Setting up Cygwin
Getting Started with Cygwin
Cygwin Bash Shell in MS-DOS Prompt
mintty - Terminal window for Cygwin
Cygwin FAQ

0 комментариев:

Отправить комментарий