30 июля, 2007

Восстановление загрузчика GRUB

Последнее время часто экспериментирую с операционными системами, и при установке некоторых из них, таких как Linux, Mac OS X или Windows, затирается главная загрузочная запись (MBR). Для восстановления ее можно использовать LiveCD дистрибутив Линукс (Ubuntu, Knoppix), также можно восстановить с помощью Debian "Etch".

Этот пример показывает как восстановить загрузчик GRUB Loader при помощи LiveCD Ubuntu Linux

Прежде всего ставим в BIOS загрузку с CD. [First Boot]
Далее запускаемся с LiveCD дистрибутива...

..и работаем в консоли (терминале):

~$ sudo grub
> _
утилита будет ожидать ваших действий

ищем загрузчик:
> find /boot/grub/stage2
(hd0,2)

подменили рута
> root (hd0,2)

устанавливаем GRUB на hd0:
> setup (hd0)

На этом всё ;)

22 июля, 2007

KLone: каркас для web-программирования на языке C.

KLone - это фреймворк для программирования веб-приложений, который расширяет простой HTML языком С, и помещает весь код на сервере в один бинарный файл.

.deb пакет
KLone доступен в Debian GNU/Linux 4.0 "Etch" и Ubuntu Linux "Edgy", "Feisty Fawn", "Gutsy Gibbon".
~$ apt-get install klone-package


PHP очень популярен своим стилем программирования, смешиванием HTML с исходным кодом, заключенным в теги <?php ... ?>. Существует множество инструментов и каркасов для веб-программирования на других языках, таких как Perl и Python, совершенно удивительный выбор языка программирования, который вы можете использовать взамен вышеперечисленных, называется C.

Посмотрим на пример как создать простое веб-приложение.

Создадим директорию, в которой будем работать.
~$ make-klone-project create -p myhello
~$ cd myhello-0.1

В директории проекта будет храниться несколько файлов и директорий . Одна из важнейших папок будет Debian/, в которой будут храниться файлы для генерации .deb пакета, содержащего веб-аппликацию. К этому вернемся чуть позже. Сейчас же давайте сосредоточимся на другой интересной директории userdata/.
~$ cd userdata
~$ mkdir etc
~$ cd etc

Создаем файл kloned.conf и редактируем его.
~$ nano kloned.conf



server_list my_http
allow_root yes

my_http
{
type http
addr.type IPv4
addr.port 8880
dir_root /www
}


Теперь мы готовы приступить к созданию непосредственно нашего приложения.

$ cd ..
$ mkdir www
$ cd www


Создаем и редактируем файл index.kl1. Любой файл с расширением .kl1 будет относиться к HTML/C приложениям.

~$ nano index.kl1


<%!
#include
time_t now;
%>
<html>
<head><title>Hello World</title></head>
<body>
<h1>Hello World</h1>
<br>
<%
now = time(0);
io_printf(out, "Time is now %sn", ctime(&now));
%>
</body>
</html>

Теперь вернемся к корневой директории проекта и создадим kloned сервер:

~$ kloned-build -o myapp userdata
~$ ./myapp -F

Сервер не запускается как демон, поэтому пользуем параметр -F. Теперь Вы можете посмотреть веб-аппликацию с помощью браузера @ http://localhost:8880/. Вы увидите текущую дату :) Это еще не все. Остановите аппликацию, которую Вы только то запустили, запустите ~$ apt-get install dpkg-dev, далее:


~$ dpkg-buildpackage -rfakeroot
~$ sudo dpkg -i ../myhello_0.1*deb

Вы только что установили .deb пакет, который содержит веб-аппликацию =)

Еще примеры

Если Вы хотитет увидеть больше примеров использования KLone'а, посетите сайт KoanLogic'а.

mmv - мульти (множественное) перемещение и переименование файлов

mmv - это программа командной строки, которая позволяет пользователю перемещать, переименовывать, копировать, конкатенировать и связывать большое количество файлов одной коммандой. Тулза особенно полезна, если Вам необходимо переименовать множество файлов, которые имеют схожие названия, но все еще с изощренными различиями.

.deb пакет
Mmv доступна в Debian начиная с версии 3.1 ('Sarge') и в Ubuntu начиная с версии 'Warty'.
~# apt-get install mmv #установить mmv


Хотя mmv выполняет больше функций, чем просто переименовывание файлов, в этой статье внимание будет сосредоточено только на переименовывании, что чаще всего используется мной. Объясню на примере.

Предположим в директории вы имеете следующие файлы:
foo1.png
foo2.png
bar3.png

Вы хотите, чтобы все файлы, начинающиеся с 'foo' имели начало 'bar'. В этом случае Вы могли бы просто переименовать файлы вручную, но представьте себе, что таких файлов тысяча! Вы скорее всего будете вынуждены запустить шел-сценарий. Mmv наилучшим образом подходит для этой работы:
~$ mmv "foo*.png" "bar#1.png"

Получим такие результаты:
bar1.png
bar2.png
bar3.png

Кухня


Шаблон 'Откуда'

Mmv сопоставляет файлы используя выбранный Вами символ (шаблон 'Откуда'). Файлы переименовываются в соответствии со вторым аргументом (шаблоном 'Куда'). В шаблоне 'Откуда' могут встречаться любые символы, используемые в коммандной строке, такие как '*', '?' и '[]'. Запомните, что шаблоны нужно заключать в ковычки, иначе они будут расширены шелом и mmv их не поймет!

Шаблон 'Куда'

'#1' в шаблоне 'Куда' является индексом символа. Он сопоставляется с первым символом найденном в шаблоне 'Откуда'. '#2' будет соосветственно сопоставляться со вторым символом, и так далее. Mmv заменяет любые экземпляры индексов символов текстов, подобным в шаблоне 'Откуда'. В примере выше, '#1' подгоняет числа после 'foo' и следующие за ним. '??'

Еще примеры

Шаблоны 'Откуда' и 'Куда' могут также использоваться для изменения символов вокруг в именах файлов:
abc_123.txt
def_456.txt
ghi_789.txt

~$ mmv "*_*.txt" "#2_#1.txt"

Получим:
123_abc.txt
456_def.txt
789_ghi.txt
Другой трюк может изменять регистр(верхний/нижний) согласованный символом. Чтобы это проделать нужно поместить 'l' или 'u' между '#' и номер в шаблоне 'Куда':
john.txt
pete.txt

~$ mmv "?*.txt" "#u1#2.txt"

Получим:
John.txt
Pete.txt

Заметки

Переименовывание директорий может быть выполнено только с параметром -r.
Не забывайте заключать в ковычки параметры 'Куда' и 'Откуда'!
Article submitted by Ferry Boender.
Перевод: va1e.

16 июля, 2007

IBM ThinkPad ACPI, Linux

thinkpad-acpi - это Linux драйвер для ноутбуков IBM и Lenovo ThinkPad, который позволяет управлять различными возможностями, доступными через ACPI каркас:

  • комбинации Fn (функциональных) клавиш
  • включение/выключение bluetooth
  • переключатель видеовыхода и его расширенный контроль
  • включение/выключение лампочки на LCD-дисплее (ThinkLight)
  • управление доком (docking, undocking)
  • извлечение UltraBay
  • CMOS контроль
  • управление светодиодами (LED)
  • ACPI звуковые сигналы
  • температурные сенсоры
  • вывод состояния встроенного контроллера регистров
  • контроль яркости LCD дисплея
  • управление громкостью
  • конрроль и мониторинг кулера: скорость вентилятора, включение/выключение
  • включение/выключение WAN

procfs интерфейс создает директорию /proc/acpi/ibm. Для каждой поддерживаемой возможности создается файл.

Bluetooth

эта фича позволяет нам управлять состоянием устройства bluetooth во внутреннем CDC слоте ноутбука:
echo enable > /proc/acpi/ibm/bluetooth
echo disable > /proc/acpi/ibm/bluetooth
включаем/выключаем bluetooth устройство соответственно

Контроль видео выхода

Video output control:
echo lcd_enable > /proc/acpi/ibm/video
echo lcd_disable > /proc/acpi/ibm/video
echo crt_enable > /proc/acpi/ibm/video
echo crt_disable > /proc/acpi/ibm/video
echo dvi_enable > /proc/acpi/ibm/video
echo dvi_disable > /proc/acpi/ibm/video
я думаю тут все понятно
echo auto_enable > /proc/acpi/ibm/video
echo auto_disable > /proc/acpi/ibm/video
echo expand_toggle > /proc/acpi/ibm/video
echo video_switch > /proc/acpi/ibm/video #имитирует Fn-F7
cat /proc/acpi/ibm/video #чтение текущего состояния каждого устройства
ThinkLight

чтобы включить/выключить лампочку LCD монитора пользуем:
echo on > /proc/acpi/ibm/light
echo off > /proc/acpi/ibm/light
Docking / undocking
echo dock > /proc/acpi/ibm/dock
echo undock > /proc/acpi/ibm/dock
Извлечение UltraBay

Извлечение устройства UltraBay
echo eject > /proc/acpi/ibm/dock

если необходимо горячее извленчение UlrtaBay (CD/DVD-ROM) переводим ноутбук в спящий режим и просто извлекаем устройство

Управление светодиодами (LED control)
echo '<индекс> on' >/proc/acpi/ibm/led
echo '<индекс> off' >/proc/acpi/ibm/led
echo '<индекс> blink' >/proc/acpi/ibm/led
Индексы:
0 - питание
1 - аккумулятор (оранжевый)
2 - аккумулятор (зеленый)
3 - UltraBase
4 - UltraBay
7 - ожидание

ACPI звуки
echo <индекс> >/proc/acpi/ibm/beep
0 - остановить все звуки (но испольховать 17 для остановки 16)
2 - два сигнала, пауза, тройной сигнал ("низкий заряд аккумулятора")
3 - одиночный звуковой сигнал
4 - высокий, переходящий в низкий-сжатый ("недоступно")
5 - один сигнал
6 - очень высокий, переходящий в высокий-сжатый сигнал ("подключение/отключение зарядного устройства")
7 - высокий-сжатый сигнал
9 - три коротких сигнала
10 - очень длинный звуковой сигнал
12 - низкий-сжатый
15 - три высоких сжатых сигнала, повторяющиеся постоянно, останавливается 0 "нулем"
16 - один средний сигнала, повторяющиеся постоянно, останавливается 17
17 - остановить 16

Температурные сенсоры

Экспериментальная ACPI возможность /proc/acpi/ibm/thermal
Описание читать здесь

Контролируем яркость LCD-дисплея
echo up >/proc/acpi/ibm/brightness
echo down >/proc/acpi/ibm/brightness
echo 'level <уровень>' >/proc/acpi/ibm/brightness
Уровень может меняться от 0 до 7

Управление громкостью звука
echo up >/proc/acpi/ibm/volume
echo down >/proc/acpi/ibm/volume
echo mute >/proc/acpi/ibm/volume #приглушить звук
echo 'level < уровень>' >/proc/acpi/ibm/volume
Диапозон level меняется от 0 до 15

Управление и мониторинг кулера (вентилятора)
echo enable >/proc/acpi/ibm/fan
echo disable >/proc/acpi/ibm/fan
echo 'level ' > /proc/acpi/ibm/fan
где level число от 0 (выключение) до 7 (максимальная скорость) или одно из слов auto и full-speed
также можно задать точную скорость вращения вентилятора
echo 'speed <скорость>' > /proc/acpi/ibm/fan
скорость speed может изменяться в пределах ~3700-7350 об/сек
P.S. Lenovo (IBM) будет выпускать ноутбуки с Linux от Novell