Показаны сообщения с ярлыком Linux. Показать все сообщения
Показаны сообщения с ярлыком Linux. Показать все сообщения

воскресенье, 22 февраля 2009 г.

Решение проблемы неработоспособности Slax 6.х при его загрузке.

Slax имеет возможность сохранять настройки сделанные пользователем на диск. Для этого служит параметр загрузки "changes=". В таком случае, выяснилось, что при интенсивном использовании, может случится что система перестанет загружатся и станет неработоспособной. Здесь я приведу свой (возможно не самый удачный) вариант решения проблемы.

Исходные данные таковы:
Есть раздел с NTFS. Предполагается что на этот раздел должны сохранятся настройки slax. Настройки будут сохранятся в одном файле - slax.dat

Мой вариант решения проблемы это каждый раз при загрузке проверять slax.dat на ошибки и автоматически их исправлять при помощи утилиты fsck.ext2

Приступим:
1) Загружаемся в Slax, открываем консоль :)

2) Подготовим файл в котором будут хранится настройки:
# dd if=/dev/zero of=/mnt/sda1/slax.dat bs=1M count=512
# /sbin/mkfs.ext2 /mnt/sda1/slax.dat


где:
/mnt/sda1/slax.dat - место хранения файла (в моём случае он хранится на разделе NTFS)
count=512 - размер файла в мб.

3) Находим файл boot/initrd.gz на CD-ROM, копируем его в /root

4) Распаковываем
# gzip -d initrd.gz

5) Монтируем:
# mkdir fs
# mount -t ext2 initrd fs -o loop


6) Качаем пакет e2fsprogs и его зависимости. Я нашёл его в репозиториях Debian (packages.debian.org):
# wget http://ftp.de.debian.org/debian/pool/main/e/e2fsprogs/e2fsprogs_1.39+1.40-WIP-2006.11.14+dfsg-2etch1_i386.deb
# wget http://ftp.de.debian.org/debian/pool/main/e/e2fsprogs/e2fslibs_1.39+1.40-WIP-2006.11.14+dfsg-2etch1_i386.deb
# wget http://ftp.de.debian.org/debian/pool/main/e/e2fsprogs/libcomerr2_1.39+1.40-WIP-2006.11.14+dfsg-2etch1_i386.deb


Далее необходимо извлечь нужные нам файлы из .deb пакетов и положить их в initrd. Для этого нам потребуется утилита dpkg, которая существует в составе модуля "debian package tools" для Slax. Данный модуль можно скачать с сайта slax.org.

7) Собственно извлекаем:
# mkdir e2fsprogs
# dpkg --extract "e2fsprogs_1.39+1.40-WIP-2006.11.14+dfsg-2etch1_i386.deb" e2fsprogs
# cp e2fsprogs/sbin/fsck.ext2 fs/sbin
# cp e2fsprogs/sbin/e2fsck fs/sbin


# mkdir e2fslibs
# dpkg --extract "e2fslibs_1.39+1.40-WIP-2006.11.14+dfsg-2etch1_i386.deb" e2fslibs
# cp e2fslibs/lib/* fs/lib


# mkdir libcomerr2
# dpkg --extract "libcomerr2_1.39+1.40-WIP-2006.11.14+dfsg-2etch1_i386.deb" libcomerr2
# cp libcomerr2/lib/* fs/lib



8) Редактируем файл fs/linuxrc: до строки `mount_device "$CHANGESMNT" $MEMORY` прописываем:

if [ "$(basename "$CHANGESMNT" .dat)" != "$CHANGESMNT" ]; then
  /sbin/fsck.ext2 -y "$CHANGESMNT"
fi


9) Заключительные шаги: Отмонтируем наш initrd и сожмём обратно программой gzip
# umount fs
# gzip initrd


В итоге, оригинальный initrd.gz надо будет заменить полученным нами. Делается это путём перепрожига диска со Slax обновлённым initrd.gz

При дальнейшей загрузке Slax не забываем указывать параметр "changes=/slax.dat"

суббота, 31 мая 2008 г.

Запуск Linux прямо из Glofiish M700

Это возможно! Сегодня я в этом убедился. Для этого нам понадобится следующее:

1) Ядро Linux
2) Наличие в устройстве карточки MicroSD объёмом не менее 128мб
3) Haret - программа-загрузчик ядра запускающийся прямо из Windows CE
4) Текстовый файл с параметрами загрузки ядра
5) Образ OPIE или GPE

Приступим.

1) Скачаем образ ядра (здесь)
2) Скачаем haret
3) Скопируем всё это хозяйство в память коммуникатора (не на карточку а на встроенную память)
4) Создадим в той папке в которую скопировали, файл default.txt с таким содержанием:
set MTYPE 0x664
set KERNEL "zImage_x500"
set RAMADDR 0x30000000
set RAMSIZE 0x4000000
set CMDLINE "root=/dev/mmcblk0p2 rootdelay=5 panic=360"
bootlinux

5) Необходимо подключить microSD карту к компьютеру (через кардридер или напрямую через USB кабель+WM5Storage), при этом убедится что не один раздел не смонтировался автоматически.

6) Создадим разделы на карточке согласно такой схеме - минимум 50мб для раздела с ext3, всё оставшееся свободное пространство оставим для fat16. Для своей карты объемом 2ГБ я разбил диск на разделы по такой схеме:
+================================================+
| 1800мб - FAT16                 | 213мб - EXT3  |
+================================================+
для выполнения этого шага использовалась утилита cfdisk.

7) Необходимо записать на созданные разделы файловую систему:
$/sbin/mkfs.msdos /dev/sdc1 -n WINDOWS
$/sbin/mkfs.ext3 /dev/sdc2 -j -L LINUX

где:
/dev/sdc - имя устройства microSD карты
/dev/sdc1 - первый раздел с windows fat
/dev/sdc2 - второй раздел с linux ext3

8) Скачаем OPIE например отсюда

9) Скопируем всё содержимое скачаного архива на раздел с линуксом (/dev/sdc2 в моём случае)

10) Отмонтируем карточку с компьютера(если использовался кард-ридер), вставим обратно в зверька, убедимся что FAT раздел на карточке виден с КПК

Перед загрузкой ядра обязательно отключаем проверку пароля при загрузке мастдая, иначе потом придётся делать хард-ресет!

11) Запускаем haret, нажимаем кнопку RUN, и... нервно ожидаем загрузки....

Приятного использования :)

Да, совсем забыл сказать, чтобы обратно перезагрузится в винду нажмите одновременно Soft-Reset и клавишу выключения (только не удерживая долго)



          
    
          












Полезные программы для OPIE, а также пакеты с локализацией можно скачать здесь

Полезные ссылки:
1) http://linux.cybernet.net.ru (битая?)
2) http://www.handhelds.org
3) http://ipkgfind.handhelds.org

вторник, 27 мая 2008 г.

Конвертирование APE/CUE в OGG Vorbis

Есть необходимость конвертировать файл формата Monkey's Audio (APE) в формат OGG Vorbis при этом целевой файл будет необходимо ещё "порезать" на треки. Для этого понадобятся утилиты mac, oggenc и mp3splt, а также собственно файл CUE со схемой разметки треков. Для упрощения использования сего действия был мною собственноручно написан bash-скрипт, я назвал его apecue2ogg:
#!/bin/sh
INPUT_APE=$1
INPUT_CUE=$2
OUT_DIR=$3
MAC="/usr/bin/mac"
OGGENC="/usr/bin/oggenc"
MP3SPLT="/usr/bin/mp3splt"
TMP="/tmp/$(basename "$INPUT_APE")"
progname=$(basename "$0")

help()
{
echo "Использование: $progname ФАЙЛ1.ape ФАЙЛ2.cue [КАТАЛОГ_ДЛЯ_ВЫВОДА]"
echo
}

if test $# -lt 2; then
help >&2
exit 1
fi

if ! [ -e $MAC ]; then
echo "Программа $(basename "$MAC") (Monkey's Audio) не установлена" >&2
echo "Попробуйте скачать её с сайта http://sourceforge.net/projects/mac-port/" >&2
echo >&2
exit 1
fi

if ! [ -e $OGGENC ]; then
echo "Программа $(basename "$OGGENC") не установлена" >&2
echo >&2
exit 1
fi

if ! [ -e $MP3SPLT ]; then
echo "Программа $(basename "$MP3SPLT") не установлена" >&2
echo "Попробуйте скачать её с сайта http://mp3splt.sf.net" >&2
echo >&2
exit 1
fi

if test "$OUT_DIR" == ""; then
OUT_DIR="."
fi

if ! [ -d "$OUT_DIR" ]; then
echo "Каталог $OUT_DIR не существует!" >&2
echo >&2
exit 1
fi

if (! $MAC "$INPUT_APE" "$TMP.wav" -d ); then
exit 1
fi

if (! $OGGENC -q 8 "$TMP.wav" -o "$TMP.ogg" ); then
exit 1
fi

rm "$TMP.wav"

if (! $MP3SPLT -c "$INPUT_CUE" "$TMP.ogg" -o "@n @a - @t" -d "$OUT_DIR" ); then
exit 1
fi

rm "$TMP.ogg"

Сохраним его например в каталоге /usr/bin. Используем например так:
$apecue2ogg 'Пилот - ЧБ.ape' 'Пилот - ЧБ.cue'

И через несколько минут в текущем каталоге можно будет созерцать "нарезанные" треки. Пожалуй остаётся только привести теги в порядок например с помощью easytag

понедельник, 19 мая 2008 г.

Создаём программы для WinMobile на Linux'e

Если вы хотите писать/написать какую/ие-то программы для своего PDA удобно располагаясь при этом в любимой ОС(линуксе конечно), то для этого можно воспользоватся компилятором CeGCC. Вот как я устанавливал этот замечательный кросс-компилятор на свой Debian:

Сначала переходим в свой домашний каталог:
$cd ~

Часть 1:
----------------------------------
Качаем cegcc с сайта http://sourceforge.net/projects/cegcc. Я качал версию 4.3.0:
~$wget -c http://switch.dl.sourceforge.net/sourceforge/cegcc/cegcc-gcc430.tar.gz

Но имеется проблемка, у меня система amd64, а скомпилированную cegcc можно загрузить только версию для i386. Поэтому если вы не счастливый обладатель amd64 то можете не читать строки ниже, а смело переходите к части 2.
Устанавливаем ia32-libs:
$sudo apt-get install ia32-libs

Загружаем необходимый пакет libgmp3:
$wget http://ftp.de.debian.org/debian/pool/main/g/gmp/libgmp3c2_4.2.2+dfsg-3_i386.deb

Создаём каталог /usr/linux32:
$sudo mkdir /usr/linux32

Распаковываем туда наш deb-пакет:
sudo dpkg -x 'libgmp3c2_4.2.2+dfsg-3_i386.deb' /usr/linux32

Чтобы эту библиотеку система могла найти создадим файл /etc/ld.so.conf.d/linux32.conf с таким содержимым:
/usr/linux32/usr/lib
/usr/linux32/lib

и выполним ldconfig:
$sudo /sbin/ldconfig

Часть 2:
----------------------------------
Переходим в корневой каталог:
$cd /

Распаковываем архив с CeGCC:
$sudo tar --gzip -xvf ~/cegcc-gcc430.tar.gz

В результате, в /opt должны распаковаться 2 папки - cegcc и mingw32ce, создадим для них отдельную папку и переместим туда:
$sudo mkdir /opt/wince
$cd /opt/wince
$sudo mv ../cegcc .
$sudo mv ../mingw32ce .

Теперь, для удобства вызова можно создать ссылки на компилятор cegcc в /usr/bin:
$sudo ln -s /opt/wince/mingw32ce/bin/arm-mingw32ce-gcc /usr/bin

Проверяем работоспособность компилятора. Для этого создадим файл test.c с таким содержанием:
#include
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
MessageBoxW(0, L"HELLO WORLD!", L"HELLO!", 0);
}

Попытаемся скомпилировать:
$ arm-mingw32ce-gcc -o test.exe test.c

Должен получится целевой файл test.exe. При использовании на своём девайсе не забудьте в папку с программой положить /opt/wince/cegcc/arm-cegcc/lib/cegcc.dll
Пользуемся!

Часть 3:
----------------------------------
Не так давно trolltech создала версию своей кросплатформенной библиотеки Qt для Windows CE платформы. В связи с таким событием появилось желание создавать qt-программы на линукс для целевой платформы Windows Mobile. Но есть проблема: в состав пакета программ cegcc не входит компилятор "arm-mingw32ce-g++". Основываясь на информации из списка рассылки http://www.mail-archive.com/cegcc-devel@lists.sourceforge.net/msg01155.html работа над компилятором g++ ещё не закончена. Так что придется пока подождать....

понедельник, 12 ноября 2007 г.

Спутниковый интернет через GRE-туннель

Тут недавно маленькое счастье произошло. Мой пров спутникового инета (Raduga: http://d-v.ru) вдруг решил изменить тип фильтрации подписки на фильтрацию по MAC адресу. И теперь стало возможным использовать GRE-туннель вместо предыдущего типа подключения - OpenVPN. Для использования GRE подключения необходимо иметь "реальный" IP адрес наземного канала. Так что если наземный IP не попадает в диапазоны 10.0.0.0–10.255.255.255, 172.16.0.0–172.31.255.255, 192.168.0.0–192.168.255.255 то он и есть реальный. Для такого подключения не нужны электронные ключи которые выдаёт провайдер для подключения по OpenVPN. Логин и пароль тоже не нужны как в случае с VPN, да и вообще GRE-подключение намного проще и соединение устанавливается быстрее. Ну и вообщем, для автоматизации процесса соединения, мною собственноручно был состряпан bash скрипт.

Таким образом, для подключения делаем:
$sudo /usr/sbin/upgre start
Попытка залочить сигнал со спутника...успешно
Установка подключения по наземному каналу...успешно
Реальный IP: 90.188.250.164
Адрес шлюза: 195.46.116.198
Поднятие GRE-туннеля...успешно
Проверка работоспособности интерфейса...успешно


А для отключения:
$sudo /usr/sbin/upgre stop

Как установить:
$mkdir ~/.upgre
$cd ~/.upgre
$wget http://anterior1.narod.ru/upgre.tar.gz
$tar --gzip -xf upgre.tar.gz
$sudo mv upgre /usr/sbin


Далее редактируем ~/.upgre/channels.conf, за правилами синтаксиса этого файла обращаемся к документации по szap. Редактируем файл ~/.upgre/config в соответствии с теми параметрами которые выдал вам провайдер.

Создаём новую группу, члены которой будут иметь возможность пользоваться этой командой:
#sudo /usr/sbin/groupadd sat
Добавляем себя в эту группу:
#sudo /usr/sbin/usermod -a -G sat ИМЯ_ПОЛЬЗОВАТЕЛЯ

Добавляем в файл /etc/sudoers строчки:
Defaults !always_set_home
%sat ALL=NOPASSWD : \
/usr/sbin/upgre


Готово! Теперь можно пользоваться скриптом. Выполняем подключение командой:
$sudo /usr/sbin/upgre start
Вторым параметром можно указать путь к файлу конфигурации. Если не указано, то будет использоваться ~/.upgre/config

четверг, 13 сентября 2007 г.

Линукс на флэшке!

Наверное, многие слышали про так называемые LiveCD - дистрибутивы линукса, которые загружаются прямо с диска. Далее я хочу рассказать как я делал загрузку линукса, который установлен на USB-брелке - LiveUSB линукс. В качестве дистрибутива я выбрал Slax, базирующийся в свою очередь на Slackware. Одно из его преимуществ - модульная структура, что позволяет легко модифицировать его под конкретные нужды пользователя. Существует несколько версий этого дистрибутива: Standard, KillBill, Professional, Frodo, Hacker, Server, Popcorn. Я выбрал Frodo - облегченная версия (около 50 мегабайт), не включающая в себя графический интерфейс. Вся процедура создания LiveUSB линукса состоит из нескольких частей:

1) Переразметка разделов
2) Запись необходимых файлов
3) Доработка загрузчика

Итак, поехали:

1) Необходимо скачать с официального сайта проекта slax.linux-live.org любую из желаемых версий дистрибутива (главное чтобы на флэшку вместилась)

2) Сделать резервную копию данных, если что-то не получится, можно будет все вернуть обратно:
# dd if=/dev/sdc of=backup.iso
1981440+0 записей считано
1981440+0 записей написано
1014497280 bytes (1,0 GB) copied, 75,005 s, 13,5 MB/s

где /dev/sdc - имя устройства

3) Переразметить разделы на флэшке. Для этого лучше загрузится через Slax LiveCD и уже оттуда выполнять необходимые операции. Для этого можно записать скачанный iso-образ на диск, или же воспользоватся виртуальной машиной:
#/sbin/modprobe kvm
#/sbin/modprobe kvm-amd
#qemu-kvm -localtime -m 128 -boot d -cdrom '/mnt/media/iso/slax-frodo-5.1.8.iso' -usb -usbdevice host:0dd8:f607


4) После того как загрузились с LiveCD:
Отмонтируем флэшку:
#umount /dev/sda1
где /dev/sda1 - имя устройства

Выполним переразметку разделов используя программу fdisk. Она работает в интерактивном режиме.
#fdisk /dev/sda

Посмотрим наличие существующих разделов:
Command (m for help): p
Disk /dev/sda: 1014 MB, 1014497280 bytes
32 heads, 61 sectors/track, 1015 cylinders
Units = cylinders of 1952 * 512 = 999424 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 1015 990609+ b FAT32


Если они существуют, то необходимо их удалить:
Command (m for help): d
Selected partition 1


Теперь необходимо создать новый раздел:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1015, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1015, default 1015):
Using default value 1015


После этого разделу необходимо установить метку загрузочный:
Command (m for help): a
Partition number (1-4): 1


Затем необходимо установить формат раздела как FAT16 (код 6):
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 06
Changed system type of partition 1 to 6 (FAT16)


После этого должен получится раздел подобного вида:
Command (m for help): p
Disk /dev/sda: 1014 MB, 1014497280 bytes
32 heads, 61 sectors/track, 1015 cylinders
Units = cylinders of 1952 * 512 = 999424 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1015 990609+ 06 FAT16


Если все правильно то можно выполнять запись в таблицу разделов:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.


5) Находим файл make_disk.sh в каталоге диска. У меня он лежал в /mnt/live/mnt/hdc
#cd /mnt/live/mnt/hdc
#./make_disk.sh /dev/sda1
Mounting /dev.sda1 to /mnt/makedisk_mount5848...
Copying files...
Setting up boot sector in /dev/sda1...
Added slax *
Successfully installed in /dev/sda1


Все. Перезагружаемся, и радуемся результату.


Но проблема заключается в том, что созданный LiveUSB линукс будет загружаться только в видеорежиме 640х480. Можно это исправить, дав выбор видеорежимов через меню загрузчика lilo.
Коды видеорежимов (параметр vga=XXX):

Colors (depth) 640x480 800x600 1024x768 1280x1024 1600x1200
----------------+-------+-------+--------+---------+---------
256 (8 bit) | 769 771 773 775 796
32,768 (15 bit) | 784 787 790 793 797
65,536 (16 bit) | 785 788 791 794 798
16.8M (24 bit) | 786 789 792 795 799

Поэтому,

6) Необходимо отредактировать файл lilo.conf который должен находится в корневом каталоге флэшки.
#cd /mnt/sda1_removable

Он должен выглядеть так:
boot=/dev/sda
compact
lba32
prompt
timeout=100
install=menu

image=/mnt/sda1_removable/boot/vmlinuz
initrd=/mnt/sda1_removable/boot/initrd.gz
label="Slax_640x480"
vga=769
root=/dev/ram0
append="max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=4444"
read-write

image=/mnt/sda1_removable/boot/vmlinuz
initrd=/mnt/sda1_removable/boot/initrd.gz
label="Slax_800x600"
vga=771
root=/dev/ram0
append="max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=4444"
read-write

image=/mnt/sda1_removable/boot/vmlinuz
initrd=/mnt/sda1_removable/boot/initrd.gz
label="Slax_1024x768"
vga=773
root=/dev/ram0
append="max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=4444"
read-write

image=/mnt/sda1_removable/boot/vmlinuz
initrd=/mnt/sda1_removable/boot/initrd.gz
label="Slax_1280x1024"
vga=775
root=/dev/ram0
append="max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=4444"
read-write

И выполнить команду:
#lilo -C lilo.conf -m lilo.map -s origmbr
Added Slax_640x480 *
Added Slax_800x600
Added Slax_1024x768
Added Slax_1280x1024


Ну теперь точно все, мобильный линукс готов! При желании можете скачать модули с локализацией или любые другие из официального сайта проекта и положить их в каталог modules