Sunday, November 10, 2013

Шпаргалка по работе с портами FreeBSD

За несколько лет работы с FreeBSD 8/9 собрал множество заметок по работе с софтом в FreeBSD. Собрав их все в месте выкладываю в одном посте.

Содержание:
  1. Поиск портов;
  2. Установка и конфигурирование  порта;
  3. Аудит установленных портов и зависимостей между ними;
  4. Удаление портов;
  5. Обновление портов.
Поиск портов

Поиск порта можно осуществить четырьмя способами:
Поиск портов 1-й способ:
#: cd /usr/ports
#: make search name=<имя_порта>
Поиск портов 2-й способ:
#: cd /usr/ports
#: make search key= 
Поиск портов 3-й способ:
#: cd /usr/ports
#: locate <название_порта>
Поиск портов 4-й способ:
#: whereis <название_порта> 

Установка и конфигурирование  портов
Процедура установки
Рассмотрим процедуру инсталляции порта по этапам.
1. Конфигурирование порта:
#: make config
2. Конфигурирование и установка необходимых зависимостей порта
#: make configure
3. Сборка 
#: make
4. Установка
#: make install
5. Очистка созданных во время компиляции и конфигурирования файлов
#: make clean

Операции можно сократить:
#: make configure && make && make install && make clean

Полезные опции утилиты make
Просмотреть получившуюся конфигурацию (созданную командой make config) порта можно командой:
#: make showconfig
Загрузка всех зависимых портов:
#: make fetch-recursive
У каждого порта можно узнать список его  зависимостей:
#: make all-depends-list
#: make run-depends-list
#: make build-depends-list
Удаление файлов созданных во время сборки зависимых портов:
#: make clean-depends
Переустановка пакета:
#: make reinstall

Обновление установленного порта
Для поддержания системы в актуальном состоянии необходимо периодически производить обновление установленных пакетов. Это можно сделать с помощью утилиты portupgrade (/usr/ports/sysutils/portupgrade/)
Обновление порта:
#: portupgrade название_программы
Если вы хотите обновить только определенное приложение, но не полностью базу данных, используйте portupgrade pkgname, с флагом -r, если portupgrade должен отработать все пакеты, которые зависят от указанного, и использовать флаг -R для отработки всех пакетов, которые требуют указанные пакеты.
Так же можно обновить пакет перейдя в его директорию в папке /usr/ports/ и выполнив:
#: portupgrade 

Обновление дерева портов через portsnap 
Для первого запуска:
#: portsnap fetch
#: portsnap extract
Для всех последующих запусков:
#: portsnap fetch
#: portsnap update
Или
#: portsnap fetch update

Обновление портов с помощью portupgrade
#: portsnap fetch update
#: portupgrade -arR
Второй командой будут скачаны исходники всех портов, нуждающихся в обновлении, распакованы, скомпилированы и инсталлированы в порядке, определяемом зависимостями.
Ключи portupgrade:
-a - обновление всех портов, для которых portversion выявила "старение" по сравнению с текущим деревом;
-r - рекурсивное обновление всех портов, которые зависят от установленных и обновляемых;
-R - рекурсивное обновление всех портов, от которых зависят пакеты, установленные в системе.
Две последние опции могут показаться тавтологичными, но это не так: только их сочетание позволяет корректно обновить все установленные ранее пакеты (да и то не всегда - в некоторых случаях может потребоваться ручное вмешательство). 

Устранение возможных неполадок и пере конфигурирование собранного порта.
Варианты развития событий:
Вариант 1 — необходимо пере конфигурировать пакет.
Необходимо удалить собственную заданную с помощью make config конфигурацию:
#: make rmconfig
Затем можно начинать с начало всю процедуру инсталляции
Вариант2 — необходимо пересобрать порт с другим набором зависимостей или конфигурациями этих зависимостей.
Есть такой момент, что опции заданные через make configure задаются один раз. При последующих попытках пересбора порта могут появится сообщения вида:
… Found saved configuration for <имя пакета> …
Один раз заданные опции порта хранятся в /var/db/ports//options .
Для того чтобы иметь возможность заново переконфигурировать все зависимости пакета следует файл options удалить
Подробнее можно прочитать п. 5.11.2: http://www.freebsd.org/doc/ru_RU.KOI8-R/books/porters-handbook/makefile-options.html

Удаление портов
Удаление портов с помощью утилиты pkg_deinstall
Ключ -r
#: pkg_deinstall -r
Удалить все пакеты, которые от него не зависят без учета зависимостей от него других пакетов. Т. е. удаляет порт и все, что от него зависит — рекурсия к листьям.
Ключ -R
#: pkg_deinstall -R
Удалить пакеты и пакеты, которые от него зависят — рекурсия к корню. При этом пакеты используемые в других портах будут пропущены (если pkg_deinstall без ключа -f).

Аудит установленных портов и зависимостей между ними
Утилита pkg_tree
Утилита pkg_tree строит визуальное дерево пакетов и их зависимостей.
#: cd /usr/ports/ports-mgmt/pkg_tree ; make install clean
Используемые ключи:
  1. -v - зависимости зависимостей.
  2. -t - чтобы показывать только верхнего уровня пакетов.
  3. -b - чтобы показать только нижний уровень пакеты.
  4. -t -q - даст список верхнего уровня пакетов без их зависимостей, установка только этих пакетов должны установить всех установленных пакетов.
Список установленных пакетов и портов:
#: pkg_info
Поиск установленных пакетов по части названия
Для поиска пакета с помощью утилиты pkg_info необходимо ввести не только полное название, но и версию пакета, что иногда может вызвать трудность.
C ключом -x можно указать только первую часть названия пакета:
#: pkg_ingp -xc lynk

Как узнать какие файлы относятся к данному пакету:
#: pkg_info -xL имя_пакета

Как узнать какому пакету необходимо обновление:
#: pkg_version -v | grep «need»

Saturday, August 17, 2013

Консольные утилиты на 3QMMP-AB492HW

Продолжении серии статей о повседневном использовании медиаплеера  3QMMP-AB492HW.

Работа с консольным утилитами может пригодится в том случае, если предполагается реализация удаленной работы с медиаплеером. Поднятие веб сервера, торент качалки или просто выключить медиаплеер. К примеру, единственным способом  получить скриншот устройства (который я нашел) – это дамп фреймбуфера из консоли.

SSH подключение к Медиаплееру
Самым удобным способом удаленного подключения к медиаплееру - это подключение по ssh (security shell)
Для доступа по ssh надо установить DropBear SSH  server II из Android Маркета.
После установки можно будет узнать/поменять параметры подключения.
Так с Ubuntu можно подключиться к устройству:
#: sudo ssh root@192.168.1.103
Пока что подключаемся через root пользователя.

Выключение устройства из консоли
На практике проверил, что медиаплеер 3Q 3QMMP-AB492HW можно выключить через консоль командами:
#: su
#: reboot -p
О возможных неполадках пока не известно

Как сделать скриншот экрана на медиаплеере
Поискав по play-маркету, я так и не нашел пристойных приложений позволяющих сделать скриншот (главный недостаток найденных приложений  было использование для снятия скриншота недоступных на медиа плеере действий — мультитач, потрясти девайс или  наклонить).
Пришлось снимать дамп с фреймбуфера.
#: cat /dev/graphics/fb0 > /home/$USER/screenshot.raw
Конвертация дампа
#: ffmpeg -vframes 1 -f rawvideo -pix_fmt rgb32 -s 1280x720 -i fb0.raw fb0.png
Как видно, чтобы с конвертировать дамп в обычное изображение надо знать текущее разрешение экрана. Это можно сделать с помощью Antutu Banchmark или System Tuner.
Боже, у вас нет ffmpeg?
Как обстоят дела в Windows я не в курсе, но в Ubuntu ffmpeg ставиться из пакетов.

BusyBox
BusyBox — это набор стандартных Unix утилит  в одном исполняемом файле.
У меня установлен stericson.busybox из Play Market-а.
Перечислю интересные вещи.
Как узнать версию ядра Linux на медиаплеере:
#: busybox uname -a // версия ядра
Как вывести файл на экран;
#: busybox cat file.txt
Как создать директорию:
#: busybox mkdir dimonvideo
Как удалить файл (rm) или директорию (rm-r):
#: busybox rm -r 4da
Как скопировать файл (cp) или папку (cp -r):
#: busybox cp -r 4da ../test
Как переименование файл (mv)
#: busybox mv dimonvodeo DimonVideo
Как вывести полного пути к текущему каталогу
#: busybox pwd
Как вывести состояния оперативной памяти в мегабайтах
#: busybox free -m
Как вывести информации об использовании дисков
#: busybox df
Как вывести информации о объеме данных
#: busybox du

Вместе с busybox становится возможным писать скрипты awk и на bash:
#: busybox awk -f script.awk
Про awk:
http://www.ibm.com/developerworks/ru/library/l-awk1/
http://rus-linux.net/MyLDP/consol/awk.html
http://www.opennet.ru/docs/RUS/awk/

После того как мной был установлен пакет busybox на устройстве появился единственный консольный текстовый редактор vi. Так как все мои попытки запустить nano на устройстве провалились, то мне пришлось свыкнуться с мыслью что все же придется запомнить команды vi (http://ru.wikipedia.org/wiki/Vi).

Компиляторы gcc и g++ на android.
Главное ограничение кодинга под Android связано с тем, что большинство интерпретаторов и компиляторов идущих на Android идут без поддержки работы в консольном режиме. То есть возможность запуска из под ssh отсутствует. А перспектива  кочеряжится с исходниками перед телевизором немного пугает.
Ковыряя форумы 4pda нашел описание среды разработки C/C++/Lua для Android Cctools (http://cctools.info/index.php?title=Main_Page)
который после установки тянет на устройство скомпилированную под armv7 сборку gcc 4.7. Которую для меня представляет наибольший интерес.

Компиляторы gcc, g++ будут находится по следующему пути
/data/data/com.pdaxrom.cctools/root/cctools/bin
Поэтому их надо добавить в переменную PATH
export PATH=$PATH:/data/data/com.pdaxrom.cctools/root/cctools/bin
Напомню, чтобы скомпилированную программу можно было запустить, ее надо переместить в раздел /data/local . SD карта при монтирована в режиме noexecute.
Поэтому потребуется немного такой магии;
#: busybox cp tst /data/local/tst
#: chmod 777 tst
#: ./tst

Saturday, June 29, 2013

Миниобзор 3Q AB492HW


Медиаплеер AB492HW я приобрел менее двух месяцев назад и с того момента за два месяца эксплуатации у меня сложилась свое видение данного девайса, которое я представляю в этом посте.
Сам плеер достался мне примерно за 2300 (не слишком дорого для устройства с Android), но потом пришлось докупить HDMI кабель и беспроводную клавиатуру/мышь общей стоимостью 1300 руб (похоже must have для подобного вида устройств). Итого 3600 за рабочий комплект.

Внешний вид
Что можно найти при внешнем осмотре:
  • Разъем HDMI;
  • Разъем RCA (про него можно забыть);
  • 2 USB и карт ридер;
  • упоминание о Wi-Fi 802.11 b/g/n;
  • Кнопка включения/выключения отсутствует;
  • Отдельный пульт.
Кнопке включения можно посвятить отдельный абзац. Ее нет. Но есть на пульте и работает она через телевизор. Так же плеер включается каждый раз когда втыкается вилка в розетку. Как я посмотрел у других более поздних моделей плееров 3Q кнопка включения все же есть.

Интерфейс оболочки
Характеристики полученные в AnTuTu Benchmark
Как видно со свободной памятью плохо

Замеченные недостатки
Устройство обладает рядом свойств, доставляющие не удобства.
Пульт. На пульте много кнопок которые ни как не используются. Набирание таким пультом какого-либо текста через визуальную клавиатуру — долгий и утомительный процесс. Для этого я приобрел себе беспроводную клавиатуру с тач панелью.

Android софт.
Большая часть софта под Android так или иначе использует мультитач, свайп и прочие прелести жестового управления. С помощью мышки вы можете максимум получить One touch - хватает разве что в AngryBirds поиграть. Понятно, что наклонять и трясти медиаплеер чтобы сделать скриншот бессмысленно.
Хороший (т.е с продуманной юзабилити для десктопов) софт найти трудно. Метод работы с плеером можно к свести к алгоритму. Идете на google play, вводите что нужно, выбираете несколько приложений и устанавливаете их. Запускаете. Смотрите. Удаляете.

Видео плееры.
На устройстве уже предустановлены два видео плеера (TvdVideo и ES Медиаплеер). Один даже частично откликается на нажатие клавиш с пульта. Воспроизводить видео с место последней остановки если носитель извлекался не способен не один из них. А это важно, так как на них и будут хранится записи.
Сейчас мой рейтинг лучших видео плееров для устройства возглавляет MX Player:
  • Работают кнопки перемотки на пульте;
  • Чтобы остановить на паузу надо на клавиатуре нажать пробел;
  • Запоминает предыдущий фрагмент на котором был остановлен просмотр.

Внешний вид файлового менеджера и список доступных плееров

Что погрузило в полное уныние.
Глядя на данные на скриншотах, в первый момент я подумал что что то с памятью и flash ROM диском не то. Служба поддержки 3Q не особо комментируя технические детали, заявило что все в порядке, 506 Mb на приложения хватает большинству юзеров.
Покопав поглубже (#: busybox df -h)  получил следующие данные - полный и в скобках занятый объем:
/system 344.5M (270.1M)
/data 503.9M (474.7M)
/cache 126M (4.1M)
/mnt/private 15.9M(4K)
/mnt/sdcard 2.3G (175.5M)
Раздел /data - под приложения, /mnt/sdcard - под данные пользователя.
С оперативной памятью тоже не понятно на что используется 200 MB.
Не все нужные мне приложения могут переносятся на карту и раздел /data в итоге быстро забился.

Вторая иллюстрация печальной картины

Что может порадовать:
  • рутованный «из коробки» android девайс;
  • процессор с архитектурой arm v7.
Забегу вперед и напишу, что мне удалось завести на устройстве полноценный консольный компилятор C/C++ (GCC), интерпретатор lua, php/mysql/lighttpd, ssh. В общем не так все безнадежно.

Сухой вывод:
  1. Устройство «слабенькое», отпущенный производителем объем памяти очень мал; 
  2. Raspberry pi может  быть более выгодным приобретением за туже цену.

Tuesday, May 14, 2013

Запись скринкаста в Linux при помощи ffmpeg


Чтобы ffmpeg мог записывать происходящее на экране он должен быть собран с опцией `--enable-x11grab`. Как оказалось в моем случае, идущая из репозитария Ubuntu версия пакета ffmpeg было собрана с этой опцией.

Пример захвата потока
#: ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1280x1024 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv
Или такой же вариант но без записи аудио сигнала, только видео:
#: ffmpeg -f x11grab -r 30 -s 1280x1024 -i :0.0 -vcodec libx264 -vpre lossless_ultrafast -threads 0 output3.mkv
После запуска команды (если не появятся сообщения об ошибках) в консоль будет выводится информация о текущем состоянии записи. Остановить процесс записи скринкаста можно с помощью комбинации [Ctrl+C].

Аудио-поток поступает с сервера pulseaudio и кодируется его в PCM (стерео).
Видео-поток в примере захватывается с частотой 30 кадров в секунду и разрешением 1280x1024 с дисплея :0.0 и кодируем его без потерь в h264 используя libx264. Если использовать, как в примере, "-threads 0", FFmpeg сам определяет количество потоков. Результат помещается в контейнер Matroska (.mkv). FFmpeg определяет тип контейнера автоматически по расширению. Результирующий файл "output.mkv" будет сохранен в текущем каталоге.

 Чтобы в скринкаст попал не весь экран а только его фрагмент можно указать желаемую область и геометрию. Для этого необходимо добавить +X,Y после :0.0, то есть чтобы получилось что-то вроде:
-s 800x600 -i :0.0+200,100
Это значит, что мы будем захватывать прямоугольник размером 800x600 пикселей со смешением по X в 200 и по Y 100 пикселей соответственно.

Примечание: Если вы получите сообщение вида `Unrecognized option ‘preset’` то вам необходимо до установить пакеты связанные с кодеком x264:
  • libavcodec-extra-53
  • libx264-123
  • libx264-dev
как на скриншоте.

Кодирование
Полученный файл скринкаста необходимо сжать.

Высокое качество видео| кодек H.264 Видео среднего качества| кодек Theora
#: ffmpeg -i output.mkv -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 our-final-product.mp4 Аудио кодируется с помощью кодека AAC с битрейтом 128k на канал.
Видео-поток кодируется с помощью кодека H.264 используя параметр "slow" и CRF равен 22 -м (Чем меньше CRF, тем выше качество, но больше результирующий файл и время кодирования. Разумный диапазон значений от 18 до 28).
#: ffmpeg -i output.mkv -acodec libvorbis -ab 128k -ac 2 -vcodec libtheora -b 1000k our-final-product.ogg Аудио-поток кодируется используя vorbis, а видео - theora. Для видео указан битрейт 1000k и контейнер .ogg.

Удаление из скринкаста не нужных фрагментов
#: ffmpeg -ss 00:00:10 -t 00:07:22 -i output.mkv -acodec libvorbis -ab 128k -ac 2 -vcodec libx264
-vpre slow -crf 22 -threads 0 our-final-product.mkv
С помощью опций -ss и -t можно указать отрезок времени который необходимо оставить в видео файле. В примере кодирование начинается спустя 10 секунд и кодируются последующие 7 минут 22 секунды потока.

Кодирование скринкаста в Avi c XVID и mp3
#: ffmpeg -i output.mkv -acodec libmp3lame -ab 128k -ac 2 -vcodec libxvid -qscale 8 -me_method full -mbd rd -flags +gmc+qpel+mv4 -trellis 1 -threads 0 our-final-product.avi
Параметр -qscale подобен описанному ранее CRF. То есть, точно так же, чем он ниже, тем выше качество, дольше кодирование, больше файл.  

Tuesday, March 26, 2013

Как настроить русскую раскладку клавиатуры в Lubuntu

Введение
Я очень долго сидел на оригинальной Ubuntu  и тот факт, что переключение раскладки с латиницы на русский в Lubuntu 12.10 не работает был для меня шоком. (До того, что были идеи завязать с opensource-ными осями). В итоге, когда гнев остыл, я провел целые выходные за настройкой Lubuntu. Мои изыскания легли в основу этого поста.

Описание проблемы
Как я понял, переключение раскладок клавиатур не работает не только для русского, для других языков тоже. И это не фича, а самый настоящий баг. Поставляемая с дистрибутивом Lubuntu утилита  Lxkeymap позволяет настроить раскладку, но она будет работать до первой перезагрузки.
Вариант запуск по шагового мастера настройки приведет к такому же варианту:
#: sudo dpkg-reconfigure console-data
Если выдаст что не может найти программу, то надо установить
#: sudo apt-get install console-data

Как можно настроить переключение клавиатуры на русскую раскладку
Имеются два одинаково работающих варианта с переключением раскладок с русского на английский при помощи сочетания [Ctrl]+[Schift]:
#: setxkbmap -option grp:switch,grp:ctrl_shift_toggle,grp_led:num us,ru
#: setxkbmap -layout "us,ru" -variant "," -option "grp:ctrl_shift_toggle"

Вы можете установить другие настройки

grp:toggleпереключение правым Alt
grp:shifts_toggleдвумя клавишами shift
grp:ctrl_shift_togglectrl+shift
grp:alt_shift_togglealt+shift
grp:ctrl_alt_togglectrl+alt
grp:caps_toggleпереключение по CapsLock
grp:lwin_toggleпереключение по левой "Win" клавише на Windows клавиатуре (для X Window старше 4.2);
grp:rwin_toggleпереключение по правой "Win" клавише на Windows клавиатуре (для X Window старше 4.2)
grp:menu_toggleпереключение по клавише "Контекстное меню" на Windows клавиатуре (для X Window старше 4.2)
grp:lctrl_toggleпереключение по левой клавише Control
grp:rctrl_toggleпереключение по правой клавише Control
grp:switchпереключение по правому Alt только на момент нажатия
grp:lwin_switchпереключение по левой клавише Windows только на момент нажатия
grp:rwin_switchпереключение по правой клавише Windows только на момент нажатия
grp:win_switchпереключение по любой клавише Windows только на момент нажатия

Теперь чтобы не выполнять эти команды в ручную каждый раз после загрузки необходимо их добавить в скрипт который будет автоматически выполняться при загрузки LXDE.
Для этого я создал файл /home/nick/.rukeyboard.sh
Скопировал в него одну из команд и сделал его исполняемым:
#: chmod +x /home/nick/.rukeyboard.sh

После этого в папке /home/nick/.config создал папку autostart и в ней создал файл auto.desktop со следующим содержанием:
[Desktop Entry]
Encoding=UTF-8
Name= CustomKBfix
Comment=Fix russion keyboard
Exec=lxterminal --command "/home/nick/.rukeyboard.sh"
Terminal=true
Теперь после перезагрузки переключение раскладок клавиатуры работает.
Файлы с расширением .desktop  в папке autostart можно использовать для любых других задач требующих выполнения после загрузки LXDE.

Ссылки:
http://ru.gentoo-wiki.com/wiki/XkbOptions
http://linux.koolsolutions.com/2009/09/01/howto-auto-launch-programsscripts-on-lxde-startup/

Update:
Опытным путем было установлено, что переключение кодировок можно задать через аплет Keyboard layout handler (который предварительно нужно добавить на панель рабочего стола).

Sunday, March 24, 2013

Готовим Lubuntu к работе

Lubuntu - вариант дистрибутива ubuntu с lxde по умолчанию, быстрый  и мало требовательный к ресурсам.

Ставим сторонний софт
Необходимо установить полезный, но в тоже время трудно доступный в ubuntu, софт из сторонних источников.
Установим flash, java, аудио- и видео-кодеки:
#: sudo apt-get install ubuntu-restricted-extras

Ставим софт который пригодится вебразработчику node.js + sublime text2:
#: sudo add-apt-repository ppa:chris-lea/node.js 
#: sudo add-apt-repository ppa:webupd8team/sublime-text-2

#: sudo apt-get update

#: sudo apt-get install nodejs
#: sudo apt-get install sublime-text

Теперь установим Skype
#: sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner"
#: sudo apt-get update
#: sudo apt-get install skype

Установка Opera
#: wget -O - http://deb.opera.com/archive.key | sudo apt-key add -
Запустив эту команду необходимо вести пароль! (просьбы вы не увидите, надо жать)
Терминал выполнит скачивание archive.key (wget …) и передаст его программе apt-key, которая по требует root доступа (sudo). Значит нужно ввести ваш пароль. Несмотря на то, что вы нажимаете клавиши на клавиатуре, символы не появляются в терминале (даже звёздочки) — это нормально.  В конце должно появится сообщение содержащее "Ok".
#: sudo sh -c 'echo "deb http://deb.opera.com/opera/ stable non-free" >> /etc/apt/sources.list.d/opera.list'
#: sudo apt-get update
#: sudo apt-get install opera

Пока это все, расширю пост если найду еще что можно допилить. 

Saturday, March 23, 2013

Откат ubuntu на предыдущую версию ядра

Краткое введение
Так получилось, что после более чем полутора лет благополучной эксплуатации ubuntu, система перестала функционировать в один момент. Я получил и установил новое обновление ядра. Система начала сыпать сообщения о системных ошибках, просто зависать на каждый чих, и т. п.
Проблема была 100% с обновленным ядром. Это я понял потому что, провел ряд экспериментов:

  • Установил Ubuntu 12.10 (До этого была 12.04). После установки пачки обновлений с ядром система снова продолжила падать; 
  • Установил Lubuntu 12.10 (Те же действия с моей стороны и тот же результат). 

Устав перебирать дистрибутивы, я полез в google искать как избавится от нового ядра. Так как с проблемой восстановления предыдущего ядра ubuntu я никогда не сталкивался, то решил оставить заметки на будущее.

Как узнать текущую версию ядра?
#: uname -a
(Окно терминала можно вызвать сочетанием клавиш [Ctrl]+[Alt]+[T])

Как при загрузке Ubuntu выбрать другое ядро для загрузки?
При загрузке системы зажать клавишу [Schift]. Откроется диалог выбора варианта загрузки в котором можно выбрать необходимое ядро.
Подробнее о настройке grub в ubuntu

Как удалить лишнее ядро в ubuntu?
Если удаляемое ядро дефолтное в системе, то предыдущее ядро linux занимает его место.
#: sudo apt-get purge purge linux-image-3.5.0-26-generic
Версию ядра надо поменять на то которое надо удалить

Какие версии ядер имеются?
Смотрите в папке /boot/



Friday, January 4, 2013

Заметка об удаленной сборке ядра FreeBSD

Предыстория

FreeBSD у меня установлена на pentium 2 с частотой 350 MHz, где компиляция ядра занимает около 2-х суток. Поэтому я решил сэкономить время (попутно и электричество) и собрать новое ядро из под виртуальной машины. Машина для сборки ПК с процессором Intel Core i3 3.1 GHz, 2 ядра + HyperThreading. Система FreeBSD 8.3 на виртуальной машине VirtualBox.
К радости, надо сказать, сборка нового ядра заняла около 15 минут времени.
Замечания:
  • Все операции следует выполнять под рутом;
  • Описание компиляции и настройки ядра приводится мною не будут.
Подготовка основной системы
Если устанавливаемые в конфигах опции  нового ядра будут отличаться от конфигов старого, то необходимо отключить все настройки системы использующие отключаемые опции.
Достаточно комментировать все опции в настройках использующие возможности старого самосборного ядра. Такие настройки могут быть в /etc/rc.conf.
Самое первое что нужно, до начала каких-либо манипуляций с ядром системы, скопировать заведомо рабочую версию ядра ( в идеале GENERIC ) в отдельную папку, например:
#: cp -Rp /boot/kernel /boot/kernel.good

Трансплантация скомпилированных ядер
После того, как на виртуальной машине было скомпилировано новое ядро, установлено и по возможности протестировано, необходимо перенести ядро на основную систему. Для этого можно воспользоваться архиватором tar.
Делаем архив рабочего ядра системы на виртуальной машине:
#: tar -cf krn2m.tar /boot/kernel/*
Переносим архив krn2m.tar на основную систему и распаковываем
#: tar -xf krn2m.tar -C /tmp/
Таким образом в директорию /tmp/boot/kernel/ будут перемещены все необходимые файлы ядра. Эту директорию переименуем в kernel.krn2m и перенесем в папку /boot:
#: mv /tmp/boot/kernel/ /boot/kernel.krn2m
Далее воспользуемся командой nextboot, которая одноразово задает ядро для следующей загрузки. Обратите внимание на путь к ядру, он читается относительно директории /boot :
#: nextboot -k kernel.krn2m
Если nextboot ни на что не ругнулась, все ок, при этом был создан файл /boot/nextboot.conf. Можно перезагружаться.
После загрузки смотрим на каком мы ядре:
#: uname -a
Если все работает, то фиксируем изменения — устанавливаем новое ядро по дефолту. А старое переименовываем в kernel.old2
#: mv /boot/kernel /boot/kernel.old2
#: mv /boot/kernel.krn2m /boot/kernel

Дело сделано.