запуск приложений mac os на freebsd
FreeBSD на Mac
Публикуется от имени и по просьбе товарища mrTuborg
Год назад поднял я сервер на Mac mini под управлением Leopard’a (Mac OS X 10.5), как и все порядочные люди, обнаружив внутри — зачатки/огрызки от FreeBSD, скачал и поставил порты fink (finkproject.org). Год поигрался… выставил WiFi адаптер в режим Infrastructure… теперь он и Internet стал на ноутбук отдавать… Качает торренты в режиме 24/7, переправляет поток VNC из локалки во внешний инет (для доступа с того же ноутбука при нахождении далеко от своего дома)… предоставляет опять же для меня любимого дискетку по SFTP размером в 500Г, держит транспорт для джаббера…
И стало скучно…
А что вот если взять и поставить на него настоящий FreeBSD? Пацан сказал — пацан сделал. ан нет… вот тут и начинается самое интересное.
Итак, проблемы с которыми я столкнулся:
1) FreeBSD Installation DVD не имеет fdisk. Только LabelEditor который впринципе ничем помочь с разделами не может.
И нигде не найдёте портированную версию fdisk под Mac (по крайней мере работающую версию). Проблема кроется в «особом» железе и особом
Open-Firmware(об этом чуть ниже) фирмы Apple.
2) «Особенный» Open-Firmware
Всё прогрессивное человечество уже отказалось от системы BIOS заменив их постепенно (я так понимаю пока в теории, а на маках уже и в практике) на Open Firmware. Аппаратный предзагрузчик с функциями самотестирования. В маках хоть и указано что это Open Firmware, но исходя из набора команд это всё таки свой Open Firmware. И этот Open Firmware понимает загрузку лишь с Маковских разделов HFS+. Собственно все дальнейшие танцы с бубном и происходят вокруг этого Open Firmware.
Что это такое написано здесь — en.wikipedia.org/wiki/Open_Firmware. Новомодная технология пришедшая на смену морально умершему BIOS. Набор команд для управления можно почитать здесь — www.firmworks.com/QuickRef.html. Но особенность Apple’вского OpenFirmware и заключается в том, что оно практически ни как не пересекается с описанными вещами. Здесь немного изменённый набор команд (большинство команд из указанного Reference — не работают) и поведение этих команд немного не предсказуемое. Очень часто одни и те же команды перестают работать или работать как то по другому. Выход один — перезагрузка.
Итак, вход в Mac’овский OpenFirmware — Alt + Cmd + O + F. После недолгой тренировки эта комбинация легко нажимается одной правой (левой не получится — пробовал =)).
Самые полезные, из обнаруженных команд:
devalias — вывод списка всех назначенных символьных сокращений для устройств
(запишите алиас для hd и сd)
Вывод всего дерева устройств:
1) dev / — подмонтировать дерево устройств в корень
2) ls
printenv — вывод переменных окружения.
(самая для нас интересная переменная — boot-device)
setenv — Назначить переменную окружения
Чтобы сбросить все настройки в заводские — необходимо в выключенном состоянии подержать кнопку включения до появления характерного звука и реакции домашних а-ля «у тебя всё в порядке? 0_o» Вобщем сигнал узнаваемый.
Вроде всё кристально чисто понятно. Но! OpenFirmware не может загружаться ни с чего иного, кроме как HFS+, и при этом…
3) FreeBSD не видит маковские HFS+ разделы.
Впринципе этого и нетребуется. Всё что требуется — создать при помощи инструментов Mac OS подготовить раздел HFS+ и не трогать его уже из
FreeBSD, чтобы не испортить.
4) Mac OS при первой возможности «бросается улучшать» разделы на жёстком диске.
Проблема обратная описанной в п.3 Когда уже установим FreeBSD ни в коем случае не допустите загрузки Mac OS X (с установочного диска). Всю процедуру установки BSD придётся начинать заново.
Итак. Это была теоретическая часть. Теперь собственно приступим к практике — к препарированию пациента.
Инструменты:
1) Установочный диск FreeBSD.
2) Установочный диск Mac OS X (Тигр или Леопард).
3) Флэшка.
0. Определение оборудования.
Далее мы будем везде указывать символические имена устройств, но на всякий случай если они не сработают, надо выпытать полное название необходимых нам устройств на данном этапе.
Входим в Open Firmware(путём зажима клавиш Cmd+Alt+O+F)…
пишем следующие команды:
начнётся постраничный вывод дерева устройств построенного на начальном этапе загрузки Open Firmware. Здесь требуется внимательность.
Для имени нужна вся ветка… которая собственно там не указывается… а лишь обозначается отступами.
мой контроллер ATA (куда подключены жёсткий диск и cd-rom) выглядит так:
(через слэш разделены ветви дерева).
как узнать правильно ли определили ветку дерева?
Загружаемся дальше — в boot2/EFI (при условии что вставлен диск установки Free BSD). Там имеем более расширенный (но такой же глючный) набор команд от FreeBSD где можно проверить все наши догадки:
Как загрузить boot2/EFI. Находясь в OpenFirmware вводим команду (второй параметр опущен — ядро загружаться не будет)
boot cd:,\boot\loader
Итак мы в boot2/EFI.
все догадки вбиваем в переменную окружения «currdev»:
после имени контроллера ata-дисков(pci@f4000000/ata-6@d/disk) надо указать номер диска и номер раздела
set currdev=/pci@f4000000/ata-6@d/disk@1:0
в моём случае это cdrom. поскольку там всего один раздел, то номер раздела можно опустить, оставив так:
set currdev=/pci@f4000000/ata-6@d/disk@1
дальше проверяем нашу догадку коммандой ls.
Если получили листинг файлов и директорий диска — догадка оказалась верна.
Жёсткий диск в моём случае вышлядит как: /pci@f4000000/ata-6@d/disk@0
Если мы ошиблись то нахождение требуемых разделов решается путём простого перебора =).
1. Подготовка загрузчика (на соседнем компьютере)
Берём флэшку и копируем на неё loader и boot.tbxi (в любую папку, флэшка — как инструмент для переноски, не более)
Что за файлы… и где их взять? loader — находится на установочном диске FreeBSD (\boot\loader), boot.tbxi там же, но его надо поправить или создать заново если его не найдёте.
Это загрузочный скрипт на языке Forth для Open Firmware, выглядит следующим образом:
» screen» output
boot hd. \boot\loader hd.
Нас интересует команда boot. Разберёмся с её синтаксисом:
1й параметр — место расположения загрузчика (в данном случае boot2/EFI-загрузчик от FreeBSD). В данном примере укзана символическая подстановка, hd — hard disk (cd — compact disk), через двоеточие номер раздела (о номере раздела чуть ниже) и через забятую путь на этом разделе к файлу загрузчика. Файловая система HFS+.
2й параметр — место расположения ядра загружаемой системы. Здесь проще — просто номер раздела. Параметр передаётся на вход файла-загрузчика, поэтому требования к формату файловой системы не предъявляются.
Как выяснить нужные номера разделов мы выясним соответственно в момент когда эти разделы создадим. Поэтому редактирование скрипта на соседнем компьютере этим не заканчивается…
2. Подготовка жёсткого диска.
Установочный диск MAC OS X потрбуется один раз (см. проблему №4) поэтому с него и начнём.
После загрузки установочного диска MAC OS X вам доступны следующие необходимые нам инструменты: Disk Utilities и Terminal
2.1 Разбиваем диск при помощи Disk Utilities.
Почему бы не сделать один раздел и не поделить его на слайсы при помощи Label Editor’a? Не получится. Label Editor может только использовать созданные для него разделы, но никак не вмешиваться в таблицу разделов — не получится. Вот поэтому под каждый слайс лучше всё-таки сделать свой раздел…
Перед разбиением диска на разделы нужно выбрать тип таблицы разделов. GUID, Apple Partition Map или MBR. Выбрать нужно для PowerPC mac — APM, для Intel mac — GUID.
Я сделал следующие разделы:
под root — 4 Gb
под swap — 2 Gb
под var — 2 Gb
под usr — 8 Gb
под home — всё что осталось, а именно 22 Gb.
чтобы их было проще на следующем шаге идентифицировать в терминале зададим этим разделам метки типа root, swap… и пр.
Вообще на всяческих буржуйских форумах не советуют долго играться с Disk Utilities так как подозревается он в глючности. Не отрицаю сей факт, было такое, но я это списывал на свои кривые руки.
Пару слов о совместимости файловых систем Mac OS и BSD. В Disk Utilities есть 4 типа файловых систем для выбора — они все называются длинно и заумно Extended File System (Расширенная файловая система) с поддержкой (или без) журналирования и с поддержкой (или нет) различия заглавных и строчных букв в названиях файлов. На самом деле это ничто иное как Journaled или Non-Journaled Ext3 с опциями. Так что проблем с прочтением как в теории так и в практике этих разделов из под BSD не возникает (он их переконвертирует в UFS). Но закавыка всё таки есть. Надо загрузчик загрузить c HFS+, а ядро уже с партиции понимаемой в BSD.
Для дальнейшей успешной загрузки устанавливаемой BSD надо разделить загрузчик и собственно само ядро. Для этого на диске к уже описанным выше разделать создать раздел для bootloader’a. Я указал размер как 0.2Гб, Леопард тут же поправил до 1 Гб, но после процесса разбиения раздел оказался размером 0.86Гб. Ну не будем с ним спорить =). Далее BSD при установке сделает нечитаемыми для мака свои разделы, поэтому диск установки Leopard’a используем лишь один раз и только до установки BSD на жёсткий диск. Иначе, при следующей загрузке установочного диска Leopard’a, Mac OS все подготовленный разделы «улучшит» до степени непригодности так что процесс установки придётся начинать сначала.
Итак имеем следуюшую таблицу разделов:
bootloader (1G)
root (4G)
swap (2G)
var (2G)
usr (8G)
home (22G)
Закончив подготовку разделов, закрывем Disk Utilities и запускаем terminal (Всё с того же установочного диска Leopard или Tiger).
находяcь в терминале, необходимо разместить в разделе bootloader 2 файла c ранее подготовленной флешки- loader и boot.tbxi. Требований по размещению нет. Я, к примеру создал там директорию boot, и скопировал всё туда… а да нам надо закончить приготовление загрузочного скрипта.
2.2 Идентификация номера раздела
Способ 1: Находясь в терминале установочного диска leopard, выведите список подмонтированных разделов (всё подмонтировалось уже до нас)
пример работы команды mount, у меня:
/dev/disk0s3 on /bootloader
/dev/disk0s5 on /root
……
цифра стоящая после s и есть требуемые нам циферьки (см выше пример моего загрузочного скрипта)
Способ 2: Находясь в LabelEditor’е установочного диска FreeBSD.
пример моего случая:
Здесь уже приходится ориентироваться по порядку расположения и размерам разделов для выяснения — кто есть кто, так как заданных меток не видно. Немного неудобно.
Теперь добиваем загрузочный скрипт:
» screen» output
boot hd:3,\boot\loader hd:5
2.3 Подготовка bootloader
3. Установка FreeBSD.
4. Загрузка установленного FreeBSD.
Пока всё хорошо. Заходим снова в OpenFirmware. Тестим установку ручной загрузкой:
0> eject cd — вытаскиваем загрузочный диск инсталлятора FreeBSD
ok
0> boot hd:3,\boot\loader hd:5 — загружаем подготовленный нами loader на 3ьей партиции и передаём ему на вход ядро с 5й партиции.
ok
…
Успешно? Если да переходим к пункту 4.2. Нет — читаем дальше.
4.1 Непосредственные имена устройств.
Если загрузка не пошла, значит не верно определены символические ссылки (devalias)
Значит будем использовать непосредственные имена устройств. Вспоминаем пункт 0. Загружаемся опять в EFI
Проверяем там ли у нас загрузчик и ядро:
set currdev=/pci@f4000000/ata-6@d/disk@0:3
ls — листинг файлов с раздела bootloader. Должны увидеть loader и boot.tbxi
…
set currdev=/pci@f4000000/ata-6@d/disk@0:5
ls — листинг файлов с раздела root.
…
Если неудачно, то меняем цифры a и b — disk@a:b путём перебора, пока не найдём.
Допустим нашли нужные цифры, тогда тестируем загрузку (предварительно перегрузившись в OpenFirmware)
0> boot /pci@f4000000/ata-6@d/disk@0:3,\boot\loader /pci@f4000000/ata-6@d/disk@0:5
соответственно придётся поправить загрузочный скрипт boot.tbxi на найденные параметры
4.2 Установленная FreeBSD загрузилась.
Можно работать… Вуаля!
Прошла не одна бессонная неделя и я натолкнулся в другом месте и совсем по другому поводу на команду setenv. Вот он выход, финальный аккорд, так сказать…
setenv boot-device hd:3,\boot\boot.tbxi
На моём маке сработал. Сработает ли у вас — гарантии никаких… поскольку всё это недокументированные возможности маковского Open Firmware.
В любом случае, как вернуть всё взад? Сбросить параметры nvram — при выключенном маке зажмите на 20 секунд кнопку питания.
Послесловие.
На моём маке загрузилась FreeBSD. Кулеры работают теперь постоянно… WiFi модуля не видно… Есть что продолжить. Если конечно это всё кому-нибудь надо.
Is Apple’s OSX based on a standard FBSD?
Konan
New Member
I have been a Linux user for the last decade or so, but cranked up a FBSD (6) machine about 4 months ago to give it a try. I can move around in it pretty good by now, but I am a long way from FBSD gurudom. Since this machine is learning only, I have always had plenty of time to figure out how it works, either from the books or googling.
Our school district has switched over to Macs after a disasterous trial of Vista and they like them very well. I knew that Apple’s OSX was some kind of ‘nix based OS but never thought on it before. After a little googling, it appears that Apple used FBSD as the basis for their OSX platform.
Obviously the best place to ask this question would seem to be on a Mac forum, but I have found that while there are many Mac experts who can detail every corner of OSX, very few know anything once they drop out of the GUI. Some even argue that I am in the wrong forum, that OSX has nothing to do with «Unix».
vivek
Aspiring Daemon
Reaction score: 197
Messages: 805
Personally, I own a mac book and I find it command line quite like UNIX with perl, python, shell and friends. YMMV.
SirDice
Administrator
Reaction score: 12,587
Messages: 39,144
Возможно ли запустить скомпилированную программу с Xcode на Mac OS X во FreeBSD? (Objective-C / какао)
Как я знаю, существует бесплатная реализация некоторых классов NextStep, GNUStep. Сайт практически построен только из строк. Я читаю документы GNUStep, классов достаточно. Соединение с БД будет осуществляться с помощью интерфейсов C.
Это не рабочий сервер. Просто испытание. Пожалуйста, не стесняйтесь говорить что-нибудь.
Я перепутал основы и основы Какао. То, что я сказал, было Фондом. Базовые классы которых достаточно просто для манипулирования строками.
Ответов: 5
Да, вы можете сделать это, и я делаю это прямо сейчас, успешно используя FreeBSD 8.2 и Xcode 4.0, запуская класс Foundation из The Cocotron. Вот ссылка: точно описывает, что я сделал, чтобы построить кросс-компилятор и все настроить. Я также подробно опишу в этом посте, как я пытался заставить AppKit (GUI) работать. Я потерпел неудачу, это может работать в будущем, это еще не полностью работает.
Пока это здорово. Я использую общую кодовую базу для написания iPhone App (игровой клиент) и FreeBSD Game Server; после того, как мой сервер скомпилируется, у меня даже есть цель rsync файлы к моему устройству разработки.
Еще одно замечание, вы упомянули DB, я успешно использую библиотеки mysqlclient в своем приложении, и в моем посте подробно описано, как это сделать. Поскольку вы создаете кросс-компилятор с The Cocotron, вы можете использовать любую библиотеку. Просто установите библиотеку во FreeBSD, а затем создайте платформу, как описано.
Примечание: не устанавливайте в «/» при установке FreeBSD по умолчанию, так как в разделе «/» мало места. Вместо этого я использовал / usr / local / gnustep и сделал несколько ссылок в соответствии с инструкциями.
Примечание II: источники GNUstep из хранилища subversion для меня не компилировались, поэтому я использовал последние стабильные источники GNUstep.
Похоже, вы пытаетесь прижать инструменты к ОС и аппаратному обеспечению, для которого они не предназначены. Есть взломы, чтобы заставить что-либо работать поверх чего-то еще, но зачем спрашивать обо всем этом горе?
Весь смысл всего Apple API в том, что у вас есть интеграция от оборудования до ОС и средств разработки. Вы должны заплатить больше авансом в обмен на большую надежность и меньшую стоимость в течение всего жизненного цикла. (Это не всегда работает так же, как Linux не всегда экономит деньги, а Windows не всегда предоставляет программный выбор, который вам нужен, но это является целью разработки.) Когда вы нарушаете аппаратную троицу Apple, OS-Dev, вы должны начать бороться с API и оборудованием вместо того, чтобы позволить ему работать на вас.
Я не думаю, что то, что вы делаете, сработает, и даже если это произойдет, это будет стоить много времени, а в конечном итоге это деньги. Если вы не будете вынуждены использовать эту конфигурацию под влиянием внешних обстоятельств вне вашего контроля, я настоятельно рекомендую вам сделать все возможное, чтобы найти другой способ выполнить то, что вы хотите.
Вы не получите бинарную совместимость. Mac OS X использует формат объектов Mach-O, а FreeBSD использует ELF, как linux. Какао не будет работать на платформах, отличных от Mac OS, но если вы будете придерживаться POSIX и библиотек с открытым исходным кодом, у вас не должно быть особых проблем при создании CGI (и любых зависимостей) на вашем компьютере с FreeBSD.
Кроме того, Какао для веб-сайта? Это стандартная библиотека Mac OS для графического интерфейса пользователя, связанных структур данных и различных помощников. Apple раньше продвигала что-то, называемое WebObjects, которое было похоже на Cocoa для Интернета, но я ничего не слышал об этом целую вечность. Я не думаю, что Какао будет работать для веб-сайта, если вы просто хотите написать собственный веб-сервер с графическим интерфейсом в Какао.
unixforum.org
Форум для пользователей UNIX-подобных систем
Превращение Mac OSX в полноценную BSD систему (загрузка в консоли и прикручивание KDE)
Превращение Mac OSX в полноценную BSD систему
#console «/usr/libexec/getty std.9600» vt100 on secure
console «/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow»
Здесь у меня два вопроса. а) почему консоль только одна и нельзя как в любой Unix системе простым нажатием ctrl-alt F1 f2 F3 переходить из консоли в консоль, если можно, то как? или это шлепок однозадачностью по разработчикам? просто окошки терминала мне не подходят, графика только впустую нагружает систему.
привожу полностью /etc/ttys может быть там что то можно выправить, чтобы была возможность ходить по консолям и «висеть» в разных задачах и приложениях.
#
# @(#)ttys 5.2 (Berkeley) 6/10/93
#
# name getty type status comments
#
# To secure single-user mode, enable Open Firmware password protection.
# http://www.apple.com/downloads/macosx/appl. repassword.html
# http://docs.info.apple.com/article.html?artnum=120095
#
#console «/usr/libexec/getty std.57600» vt100 on secure
console «/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow» vt100 on secure onoption=»/usr/libexec/getty std.9600″
#tahoe’s only
#remote «/usr/libexec/getty std.1200» pt on # diagnostics
# The tty.serial entry initializes the serial port (if any) for use as a
# terminal (enabling logons over serial). If marked secure, the serial
# port will allow root logons.
# To make the serial port available for outbound
# communications, the tty.serial entry should be turned off
# (set the 4th field to off).
tty.serial «/usr/libexec/getty serial.57600» vt100 off secure
# Fax reception is off by default, use the
# System Preferences panel to enable it.
fax «/usr/bin/fax answer» unknown off
# Hardwired lines are marked off, by default, so getty(8)
# is quiet when they don’t exist.
tty00 «/usr/libexec/getty std.9600» unknown off secure
tty01 «/usr/libexec/getty std.9600» unknown off secure
tty02 «/usr/libexec/getty std.9600» unknown off secure
tty03 «/usr/libexec/getty std.9600» unknown off secure
tty04 «/usr/libexec/getty std.9600» unknown off secure
tty05 «/usr/libexec/getty std.9600» unknown off secure
tty06 «/usr/libexec/getty std.9600» unknown off secure
tty07 «/usr/libexec/getty std.9600» unknown off secure
ttyp0 none network
ttyp1 none network
ttyp2 none network
ttyp3 none network
ttyp4 none network
ttyp5 none network
ttyp6 none network
ttyp7 none network
ttyp8 none network
ttyp9 none network
ttypa none network
Спасибо огромное за внимание, очень надеюсь что кто то интересовался этими вопросами и окажет содействие на пути к альтернативизации Mac OS X в сторону народных пожеланий:-)
Консоль для маководов: Beyond the GUI
Доброго дня, уважаемые хабравчане-маководы!
Сегодня я расскажу как увеличить эффективность работы в Mac OS X за счёт использования консоли.
Лирическое отступление
Если Вы пришли из мира M$, то для начала неплохо бы поучить общие команды shell’а, например, по вот этому учебному пособию. Как минимум, нужно усвоить команды перехода по каталогам и способы запуска программ и скриптов.
Если Вы пришли в мир Mac OS из мира Linux’а и FreeBSD, то, скорее всего, знаете как минимум основы shell-скриптинга. Но и для вас в статье может оказаться кое-что интересное, ведь в маке есть уникальные консольные команды, которые так же полезно знать.
Вот о некоторых особенностях маковской консоли далее и пойдёт речь.
Начнём работу
Для начала избавимся от стандартного терминала. Ну, точнее, поставим другой — получше. Я лично предпочитаю iTerm2, который подходит для работы куда лучше системного. Хотя, и у него бывают интересные моменты (см. картинку вверху).
Далее нам могут понадобиться дополнительные инструменты, поэтому устанавливаем MacPorts (хотя, конечно, можно и другой менеджер пакетов). Теперь мы можем ставить нужные консольные утилиты с помощью простых команд. Например, ставим Midnight Commander (он в любом случае может пригодиться), набираем в iTerm2:
Ещё одно важное замечание: кури мануалы если что-то не понятно, набираем в консоли man команда — и получаем подробное описание команды. (Кстати, для выхода из просмотра мануала надо просто нажать Q).
Продолжаем знакомство с консолью. Команда open
И — опа! — скрытый файл открылся в TextEdit! Всё предельно просто.
Пара слов о бандлах
Способ первый, простейший:
Программа будет запущена и консоль будет свободна для дальнейших действий.
Способ второй, интересный:
Программа будет запущена, но консоль не освобидится — она будет ждать завершения программы и выводить всё, что программа захочет вывести в неё. То есть, таким образом можно посмотреть рабочий лог некоторых программ.
Ещё одно очень важное различие между этими двумя методами: второй позволяет запустить два экземпляра программы, в то время как первый активирует уже запущенную, буде такая имеется. Так что через консоль можно решить и эту проблему (хотя, скорее фичу) макоси: через Finder, док и лаунчер запустить два экземпляра программы нельзя, а вот из консоли — пожалуйста, хоть двадцать два.
Скрипт?
Пример простейший, но он демонстрирует главное: в скриптах сокрыта великая сила.
Скрипты AppleScript
Не буду углубляться в AppleScript, он заслуживает отдельной статьи, и даже не одной. Так что рекомендую почитать справку или гугл по нему.
Главное: Вы можете комбинировать shell-скрипты со скриптами AppleScript, чтобы добиться максимальной гибкости в работе! К примеру, я использую такие вот смешанные скрипты для автоматической стилизации образа диска: сам диск создаётся с помощью shell (см. ниже), а фон и расположение элементов в образе задаётся с помощью AppleScript.
Есть ещё Automator, но он совсем уж GUI-шный, так что в данной статье его рассматривать бессмысленно. Он, конечно, полезный, но до мощи консоли не дотягивает.
Кратко о других полезных командах Mac OS X
Полный (ну, почти) список уникальных для макоси команд можно найти в одной хорошей статье (хотя сведения там немного устарели), я же вкратце расскажу о наиболее интересных.
Одна беда — по-умолчанию говорит эта штука только по-английски.
Теперь снимем скриншот командой из консоли.
Так же textutil умеет преобразовывать кодировки.
Файндер автоматически перезапустится и теперь будет отображать скрытые файлы и папки! Но опять таки, это не всем нравится, так давайте это выключим, пока родителикто-нибудь не испугался или не удалил нужных файликов. Для сокрытия в уже указанной команде поставьте 0 вместо 1. Ну и для примера, ссылка на статью, где описано много твиков с помощью этой команды.
Что-то типа заключения
Ну что ж, мы разобрали некоторые интересные возможности консоли в Mac OS X. Статья, разумеется, не претендует на полноту и является, скорее, «заманухой» для вовлечения маководов в shell-скриптинг да и вообще в консоль.