воскресенье, 1 июня 2014 г.

Пример использования утилиты trap

#!/bin/bash
trap sorry INT

sorry ()
{
echo "Excuse me, i can not do that"
sleep 3
}
echo "Preparing for the destruction of"
for i in 10 9 8 7 6 5 4 3 2 1; do
echo "$i seconds left to destruction ..."                             
sleep 1
done
echo "Running the program of destruction!"                    
rm -rf /*

#clear     Затупил clear уже отсутствует
echo /*

пятница, 11 апреля 2014 г.

Build switch from linux

Необходимо собрать свитч из стандартного ПК.
На машине имеется 2 встроенные сетевые Реалтэк,
и 4-х портовая плата PCI-X Intel (итого 6 портов).
Задачи свича:
а) Мултикаст роутер.
б) Необходимо иметь возможность дропать определенные категории пакетов на определенных интерфейсах.

1. Собираю минимальную ФС
1.1 Устанавливаю по дефолту Astra-linux-orel-1.9
1.2 Создаю каталог где будет собираться образ будущей системы и перехожу в него:

mkdir -p /root/src
cd /root/src


1.3 Перед сборкой файловой системы, необходимо смэйковать busybox:

mkdir busybox
cd busybox
wget ftp://astra-linux.com/astra/stable/orel/1.9/repository/pool/main/b/busybox/busybox_1.20.0.orig.tar.bz2
tar -xjf busybox_1.20.0.orig.tar.bz2
cd busybox-1.20.0
make menuconfig


##############################################################
General Configuration --->
    Build Options --->
        [*] Build Busybox as a static binary (no shared libs)
##############################################################

# Кроме статической компиляции выбираем нужные опции и мэйкуем

make
mkdir ../../switch_src
cp -a busybox ../../switch_src
cd ../..


1.4 Файловую систему буду собирать при помощи скрипта, поэтому создаю скрипт и делаю его исполняемым:

pwd /root/src
touch buildswitch
chmod +x buildswitch


1.5 Содержимое скрипта:

=========================================================================
#!/bin/bash
set -x


# Директория где будет собираться образ ФС

ROOTFS="/root/src/fs/switchfs"

# Директория где лежат необходимые файлы для сборки ФС (об этом ниже)

SRC="/root/src/switch_src"

mkdir -p $ROOTFS

cd $ROOTFS

rm -rf *


# MINIMAL_INSTALL

mkdir -p bin dev etc etc/init.d lib lib/x86_64-linux-gnu lib64 proc root sbin sys tmp usr/lib usr/lib/x86_64-linux-gnu usr/bin usr/sbin usr/share \
var/empty var/log var/run
chmod 1777 tmp


cd lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/ld-2.13.so .
cp /lib/x86_64-linux-gnu/libc-2.13.so .
cp /lib/x86_64-linux-gnu/libm-2.13.so .
cp /lib/x86_64-linux-gnu/libprocps.so.0.0.1 .
cp /lib/x86_64-linux-gnu/libnss_files-2.13.so .
cp /lib/x86_64-linux-gnu/libgcc_s.so.1 .
ln -s ld-2.13.so ld-linux-x86-64.so.2
ln -s libc-2.13.so libc.so.6
ln -s libm-2.13.so libm.so.6
ln -s libnss_files-2.13.so libnss_files.so.2
ln -s libprocps.so.0.0.1 libprocps.so.0

cd $ROOTFS/lib64
ln -s /lib/x86_64-linux-gnu/ld-2.13.so ld-linux-x86-64.so.2


# FSTAB

cd $ROOTFS
touch etc/fstab
echo "none    /proc    proc    defaults    0 0" > etc/fstab


# INITTAB

touch etc/inittab
echo "::sysinit:/etc/init.d/rcS" > etc/inittab
echo "::once:-/bin/sh" >> etc/inittab
echo "::ctrlaltdel:/sbin/reboot" >> etc/inittab
echo "::shutdown:/bin/umount -a -r" >> etc/inittab
echo "::restart:/sbin/init" >> etc/inittab
echo "tty2::askfirst:-/bin/sh" >> etc/inittab


# RCS

touch etc/init.d/rcS
chmod +x etc/init.d/rcS
cat > etc/init.d/rcS << "EOF"
#!/bin/ash
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -o remount,rw /dev/ram0 /
mknod /dev/null c 1 3
mknod /dev/tty c 5 0
mdev -s
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
syslogd -O /var/log/messages
ifconfig lo 127.0.0.1 up

# Настройка сетевых интерфейсов перед добавлением в бридж
ip a a 0.0.0.0 dev eth0
ip a a 0.0.0.0 dev eth1
ip a a 0.0.0.0 dev eth2
ip a a 0.0.0.0 dev eth3
ip a a 0.0.0.0 dev eth4
ip a a 0.0.0.0 dev eth5

# Добавляю интерфейсы в бридж
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
brctl addif br0 eth2
brctl addif br0 eth3
brctl addif br0 eth4
brctl addif br0 eth5

# Поднимаю интерфейсы
# На данном этапе возможны проблемы
# Дело в том, что в дефолтной Astra-linux железо инициализирует демон UDEV
# Система собранная мной, работает на основе BUSYBOX, в котором железо инициализирует демон MDEV (посути обрезанный UDEV)
# UDEV и MDEV по разному инициализируют железо
# В результате имена сетевых интерфейсов в дефолтной Astra-linux и в системе на основе BUSYBOX будут различатся
# Один и тот же интерфейс в дефолтной Astra-linux м.б. eth0, а в системе на основе BUSYBOX eth4
# В дефолтной Astra-linux имена сетевых интерфейсов можно изменить в файле /etc/udev/rules.d/70-persistent-net.rules
# В системе на основе BUSYBOX, можно поступить следующим образом (пример, необходимо редактировать в конкретном случае)
ip link set name eth6 dev eth0        # Сначала необходимо освободить имя eth0, поэтому переименовываю его в свободное (незанятое
                                                    # имя) например eth6
ip link set name eth0 dev eth1        # Затем переименовываю eth1 (или другой интерфей которому необходимо назначить имя eth0) в eth0
ip link set dev eth0 up                    # Поднимаю eth0
ip link set name eth1 dev eth2        # Переименовываю eth2 в eth1
ip link set dev eth1 up                    # Поднимаю eth1
ip link set name eth2 dev eth3        # Переименовываю eth3 в eth2
ip link set dev eth2 up                    # Поднимаю eth2
ip link set name eth3 dev eth4        # Переименовываю eth4 в eth3
ip link set dev eth3 up                    # Поднимаю eth3
ip link set name eth4 dev eth5        # Переименовываю eth5 в eth4
ip link set dev eth4 up                    # Поднимаю eth4
ip link set name eth5 dev eth6        # Остался последний интерфейс eth6 (который переименовали вначале eth0 -> eth6),
                                                    # переименовываю eth6 в eth5
ip link set dev eth5 up                    # Поднимаю eth5
# Назначаю IP-address и поднимаю бридж
ip a a 192.168.1.1/24 dev br0
ip link set dev br0 up

# На всякий случай
sleep 1
# Кладу в переменные пиды процессов сетевых карт
pid_eth0=`ps | grep -v grep | grep 'eth0' |awk '{print $1}'` > /dev/null 2>&1
pid_eth1=`ps | grep -v grep | grep 'eth1' |awk '{print $1}'` > /dev/null 2>&1
pid_eth2=`ps | grep -v grep | grep 'eth2' |awk '{print $1}'` > /dev/null 2>&1
pid_eth3=`ps | grep -v grep | grep 'eth3' |awk '{print $1}'` > /dev/null 2>&1
pid_eth4=`ps | grep -v grep | grep 'eth4' |awk '{print $1}'` > /dev/null 2>&1
pid_eth5=`ps | grep -v grep | grep 'eth5' |awk '{print $1}'` > /dev/null 2>&1

# По пидам выставляю сетевым интерфейсам максимальный приоритет ввода\вывода,
# максимальный приоритет доступа к ресурсам процессора,
# и привязываю сетевые интерфейсы к ядрам процессора, что бы исключить миграцию между ядрами (поскольку собирается реал-тайм
# система)
renice -20 -p $pid_eth0 && chrt -f -p 99 $pid_eth0 && taskset -p 1 $pid_eth0 > /dev/null 2>&1
renice -20 -p $pid_eth1 && chrt -f -p 99 $pid_eth1 && taskset -p 2 $pid_eth1 > /dev/null 2>&1
renice -20 -p $pid_eth2 && chrt -f -p 99 $pid_eth2 && taskset -p 3 $pid_eth2 > /dev/null 2>&1
renice -20 -p $pid_eth3 && chrt -f -p 99 $pid_eth3 && taskset -p 4 $pid_eth3 > /dev/null 2>&1
renice -20 -p $pid_eth4 && chrt -f -p 99 $pid_eth4 && taskset -p 1 $pid_eth3 > /dev/null 2>&1
renice -20 -p $pid_eth5 && chrt -f -p 99 $pid_eth5 && taskset -p 2 $pid_eth3 > /dev/null 2>&1

# Дропаю форвард броадкаста на интерфейсе eth1
# Необходимо запретить броадкаст от определенной машины (MAC 08:00:22:03:15:03) и только на определенном интерфейсе (eth1)
# Для этого в систему были добавленны iptables и ebtables (пока обхожусь ebtables)
/sbin/ebtables -A FORWARD -p IPv4 -s 08:00:22:03:15:03 -d FF:FF:FF:FF:FF:FF -o eth1 -j DROP
# Стартую телнет и синхронизирую время
telnetd -l /bin/login
hwclock -s
EOF


# GROUP

touch etc/group
echo "root:x:0:" > etc/group
echo "toor:x:500:" >> etc/group


# GSHADOW

touch etc/gshadow
echo "root:*::" > etc/gshadow
echo "toor:*::" >> etc/gshadow


# PASSWD

touch etc/passwd
echo "root:x:0:0:,,,:/:/bin/ash" > etc/passwd
echo "toor:x:500:500:,,,:/var/empty:" >> etc/passwd


# SHADOW

touch etc/shadow
echo "root::14000:0:99999:7:::" > etc/shadow
echo "toor::14000:0:99999:7:::" >> etc/shadow


# NSSWITCH.CONF

touch etc/nsswitch.conf
echo "passwd: files" > etc/nsswitch.conf
echo "shadow: files" >> etc/nsswitch.conf
echo "group:  files" >> etc/nsswitch.conf
echo "hosts: dns" >> etc/nsswitch.conf


# BUSYBOX.CONF

touch etc/busybox.conf
echo "[SUID]" > etc/busybox.conf
echo "login = ssx root.root" >> etc/busybox.conf


# LOCALTIME

cp -a /etc/localtime etc/

# MTAB

cd etc
ln -s /proc/mounts mtab
cd $ROOTFS


# PROTOCOLS

cp -a /etc/protocols etc/

# ETHERTYPES

cp -a /etc/ethertypes etc/

# IPTABLES

cp -a /sbin/xtables-multi sbin/
cd sbin
ln -s xtables-multi iptables
cd $ROOTFS
cp -a /lib/libip4tc.so.0.0.0 lib/
cp -a /lib/libip6tc.so.0.0.0 lib/
cp -a /lib/libxtables.so.7.0.0 lib/
cd lib
ln -s libip4tc.so.0.0.0 libip4tc.so.0
ln -s libip6tc.so.0.0.0 libip6tc.so.0
ln -s libxtables.so.7.0.0 libxtables.so.7
cd $ROOTFS


# EBTABLES
# Ebtables по дефолту отсутствует в системе, поэтому перед запуском скрипта необходимо выполнить apt-get install ebtables

cp -a /sbin/ebtables sbin/
mkdir lib/ebtables
cp -a /lib/ebtables/* lib/ebtables/


# BUSYBOX
# В каталоге /root/src/switch_src (переменная $SRC) лежит смэйкованный busybox, копирую в каталог bin

cp -a $SRC/busybox bin/
# Инсталирую busybox, удаляю ссылку linuxrc, создаю ссылку init.

chroot . /bin/busybox --install -s
unlink linuxrc
ln -s /bin/busybox init


# # strip

strip -vs bin/*
strip -vs sbin/*
strip -vs usr/sbin/*
strip -vs usr/bin/*
strip -vs lib/x86_64-linux-gnu/*
strip -vs lib64/*
strip -vs usr/lib/*
strip -vs usr/lib/x86_64-linux-gnu/*

=========================================================================

1.6 Пакую образ ФС в initramfs.igz

find . | cpio -H newc -o | gzip -9 > /root/src/switch_src/initramfs.igz

1.7 Собираю ядро

mkdir /root/src/kernel
cd /root/src/kernel


wget ftp://astra-linux.com/astra/stable/orel/1.9/repository/pool/main/l/linux/linux_3.2.0.orig.tar.gz
wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.2/older/patch-3.2-rt10.patch.bz2
tar xvzf linux_3.2.0.orig.tar.gz
bzip2 -d patch-3.2-rt10.patch.bz2
cd linux-3.2
patch -p1 < ../patch-3.2-rt10.patch

cp -a /root/src/switch_src/config .config                                        # Был готовый конфиг
linux64 make menuconfig

# Опишу только необходимые опции данной конфигурации, скопированный выше конфиг содержит все необходимые опции
# минимального ядра

# Добавляю поддержку initramfs

General setup --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support 
          
    ()    Initramfs source file(s)
    [*]   Support initial ramdisks compressed using gzip
    [ ]   Support initial ramdisks compressed using bzip2
    [ ]   Support initial ramdisks compressed using LZMA
    [ ]   Support initial ramdisks compressed using XZ
    [ ]   Support initial ramdisks compressed using LZO


# Модулей у меня нет поскольку ядро статик   

[ ] Enable loadable module support  ---> 

# Тип процессора

Processor type and features  --->
    Processor family (Generic-x86-64)  ---> 
                           # Добавляю поддержку 64bit процессора
        (X) Generic-x86-64
    Preemption Model (Fully Preemptible Kernel (RT))  --->
     # Полностью вытесняемое ядро (RT-Kernel)
        (X) Fully Preemptible Kernel (RT)
    Timer frequency (1000 HZ)  --->   
                                   # Выставляю таймер на 1000 HZ   
        (X) 1000 HZ
   
# Поддержка сетевых функций

[*] Networking support  --->
    Networking options  --->
        [*] Packet socket
        [*] Unix domain sockets
        [*] TCP/IP networking
            [*]   IP: multicasting
            [*]   IP: kernel level autoconfiguration
                [*]     IP: DHCP support

            [*]   IP: multicast routing                                            # Созданная система должна выполнять роль мультикаст роутера
                [*]     IP: PIM-SM version 1 support
                [*]     IP: PIM-SM version 2 support
            [*]   IP: ARP daemon support
            [*]   IP: TCP syncookie support
        [*] Network packet filtering framework (Netfilter)  --->
            [*]   Advanced netfilter configuration

                [*]     Bridged IP/ARP packets filtering                    # Необходимо дропать определенные пакеты на определенных портах
                                                                                           # поэтому мне необходим фильтр на бридже
                    Core Netfilter Configuration  --->
                        -*- Netfilter NFQUEUE over NFNETLINK interface       
                        -*- Netfilter LOG over NFNETLINK interface
                        [ ] Netfilter connection tracking support
                        -*- Netfilter Xtables support (required for ip_tables)
                            *** Xtables combined modules ***
                        -*-   nfmark target and match support 
                            *** Xtables targets ***

                        [*]   AUDIT target support                                # Поскольку с iptables пришлось работать впервые (предпочитаю BSD и
                                                                                             # PF), а собираемая система была лишь тестовым образцом  
                        [*]   "CLASSIFY" target support                        # я не стал разбираться со значением опций, тупо выбрал все (авось не
                                                                                             # сломается).
                        [*]   IDLETIMER target support                         # Впринципе iptables мне не нужен, добавил на всякий случай, если вдруг
                                                                                             # мне все же захочется каких-то особых извращений,
                        [*]   "MARK" target support                              # что бы не пересобирать ядро снова.
                        [*]   "NFLOG" target support
                        [*]   "NFQUEUE" target Support
                        -*-   "RATEEST" target support
                        [*]   "TEE" - packet cloning to alternate destination
                        [*]   "TCPMSS" target support
                            *** Xtables matches ***
                        [*]   "addrtype" address type match support
                        [*]   "comment" match support
                        [*]   "cpu" match support
                        [*]   "dccp" protocol match support
                        [*]   "devgroup" match support
                        [*]   "dscp" and "tos" match support
                        [*]   "esp" match support
                        [*]   "hashlimit" match support
                        [*]   "hl" hoplimit/TTL match support
                        [*]   "iprange" address range match support
                        [*]   "length" match support
                        [*]   "limit" match support
                        [*]   "mac" address match support
                        [*]   "mark" match support
                        [*]   "multiport" Multiple port match support
                        [*]   "osf" Passive OS fingerprint match
                        [*]   "owner" match support
                        [*]   "physdev" match support
                        [*]   "pkttype" packet type match support
                        [*]   "quota" match support
                        [*]   "rateest" match support
                        [*]   "realm" match support
                        [*]   "recent" match support
                        [*]   "sctp" protocol match support (EXPERIMENTAL)
                        [*]   "statistic" match support
                        [*]   "string" match support
                        [*]   "tcpmss" match support
                        [*]   "time" match support
                        [*]   "u32" match support
                    IP: Netfilter Configuration  --->
                        [*] IP Userspace queueing via NETLINK (OBSOLETE)
                        [*] IP tables support (required for filtering/masq/NAT)
                        [*]   Packet filtering
                        [*] ARP tables support
                        [*]   ARP packet filtering
            [*]   Ethernet Bridge tables (ebtables) support  --->

                --- Ethernet Bridge tables (ebtables) support                    # Здесь аналогичная ситуация как и с iptables, тупо выбрал все
                [*]   ebt: broute table support 
                [*]   ebt: filter table support
                [*]   ebt: nat table support
                [*]   ebt: 802.3 filter support
                [*]   ebt: among filter support
                [*]   ebt: ARP filter support
                [*]   ebt: IP filter support
                [*]   ebt: limit match support
                [*]   ebt: mark filter support
                [*]   ebt: packet type filter support
                [*]   ebt: STP filter support
                [*]   ebt: 802.1Q VLAN filter support
                [*]   ebt: arp reply target support
                [*]   ebt: dnat target support
                [*]   ebt: mark target support
                [*]   ebt: redirect target support
                [*]   ebt: snat target support
                [*]   ebt: log support
                [*]   ebt: ulog support (OBSOLETE)
                [*]   ebt: nflog support
        [*] 802.1d Ethernet Bridging
        [*]   IGMP/MLD snooping   
        -*- DNS Resolver support   
Device Drivers  --->
    [*] Network device support  --->

        [*]   Ethernet driver support  --->                                        # На машине имеется 2 встроенные сетевые Realtek 8169
            [*]   Intel devices                                                          # и четырех портовая плата Intel в PCI-X
            [*]     Intel(R) PRO/1000 Gigabit Ethernet support           # Выбираю необходимые драйвера
            [*]     Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support
            [*]   Realtek devices
            [*]     Realtek 8169 gigabit ethernet support

    [*] Real Time Clock  --->                                                       # Необходимо для синхронизации времени
        --- Real Time Clock
        [*]   Set system time from RTC on startup and resume (NEW)
        (rtc0)  RTC used to set the system time (NEW)
            *** RTC interfaces ***
        [*]   /sys/class/rtc/rtcN (sysfs) (NEW)
        [*]   /proc/driver/rtc (procfs for rtc0) (NEW)
        [*]   /dev/rtcN (character devices) (NEW)
            *** SPI RTC drivers ***
            *** Platform RTC drivers ***
        [*]   PC-style 'CMOS' (NEW)

       
# Остальные опции выбираем по необходимости       
# Мэйкую ядро
          
linux64 make -j3

# Копирую собранное ядро в каталог /root/src/switch_src

cp arch/x86/boot/bzimage /root/src/switch_src/vmlinuz-bridge

1.8 Система практически готова, осталось создать раздел, положить туда образ ФС initramfs.igz и ядро vmlinuz-bridge, и установить загрузчик.

# Предположим, что в машине имеется еще один диск

cfdisk /dev/sdb
/dev/sdb1    1024MB
                                                                # Создаем раздел 1Gb

# Форматируем в ext2

mke2fs /dev/sdb1
tune2fs -c 0 -i 0 /dev/sdb1


# Монтируем в /mnt

mount /dev/sdb1 /mnt

# Копируем ядро и образ ФС системы

cp -a /root/src/switch_src/vmlinuz-bridge /mnt
cp -a /root/src/switch_src/initramfs.igz /mnt


# Гружусь с Gentoo LIVE CD
# Монтирую sdb1 в /mnt

mount /dev/sdb1 /mnt

# В /mnt создаю каталог grub

mkdir /mnt/grub

# Копирую в него необходимые грабовские файлы

cp /boot/grub/stage? /boot/grub/e2fs_stage1_5 /mnt/grub

# Отмонтирую раздел

umount /mnt

# Устанавливаю загрузчик

grub
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> setup (hd0)
grub> quit


# Создаю файл menu.lst
# Для этого снова монтирую раздел

mount /dev/sdb1 /mnt
touch /mnt/grub/menu.lst
echo "timeout 0" > /mnt/grub/menu.lst
echo "default 0" >> /mnt/grub/menu.lst
echo "fallback 2" >> /mnt/grub/menu.lst
echo "title Bridge" >> /mnt/grub/menu.lst
echo "kernel /vmlinuz-bridge initrd=/initramfs.igz quiet ramdisk_size=32768" >> /mnt/grub/menu.lst
echo "initrd /initramfs.igz" >> /mnt/grub/menu.lst


# Вот что должно получится

cat /mnt/target/grub/menu.lst

timeout 0
default 0
fallback 2
title Bridge
kernel /vmlinuz-bridge initrd=/initramfs.igz quiet ramdisk_size=32768
initrd /initramfs.igz


# Отмонтирую раздел

umount /mnt/target

# Загружаюсь в новой системе, проверяю работу.

пятница, 21 марта 2014 г.

Make nvidia driver for real-time kernel

#
# Разбиение диска
# Первый раздел 1Gb, метка загрузочный, файловая система ext2
# Второй раздел 40Gb, файлова система { ext3, ext4 }
#
# Установка Astra-linux-orel
# Устанавливаю Astra-linux-orel на второй раздел 
# в процессе отказываюсь от установки загрузчика GRUB2
# по завершении (с LIVE-CD GENTOO) устанавливаю загрузчик GRUB LEGACY
# см.  Step by step build realtime linux from sources Astra-linux-orel-1.9 first part
#
# nano /mnt/grub/menu.lst
#
# ====================================================================
# timeout 5
# default 0
#
# title DEFAULT-AL
# root (hd0,1)
# kernel /boot/vmlinuz-3.2.0-27-generic root=/dev/sda2 ro quiet splash
# initrd /boot/initrd.img-3.2.0-27-generic
# =====================================================================
#

# Выполняю из под учетной записи ROOT

mkdir -p /root/src/kernel
cd /root/src/kernel
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.32.tar.gz
wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.10/older/patch-3.10.32-rt31.patch.gz
tar xvzf linux-3.10.32.tar.gz
gunzip patch-3.10.32-rt31.patch.gz
cd linux-3.10.32
patch -p1 < ../patch-3.10.32-rt31.patch


# Устанавливаю с диска

apt-get install libncurses5-dev

# cp -a /patch/to/src-kernel/.config .
# Правилю по необходимости

linux64 make menuconfig
linux64 make -j3
cp -a arch/x86/boot/bzImage ../vmlinuz-3.10.32-rt31


# Кладу ядро на первый раздел

mount /dev/sda1 /mnt
cp -a arch/x86/boot/bzImage /mnt/vmlinuz-3.10.32-rt31


# Правлю menu.lst

nano /mnt/grub/menu.lst

timeout 5
default 0

title DEFAULT-AL
root (hd0,1)
kernel /boot/vmlinuz-3.2.0-27-generic root=/dev/sda2 ro quiet splash
initrd /boot/initrd.img-3.2.0-27-generic

title DEFAULT-AL-vmlinuz-3.10.32-rt31
kernel /vmlinuz-3.10.32-rt31 root=/dev/sda2 ro quiet splash


# Перезагружаюсь под новым ядром
# Проверяю модули

lsmod
Module                  Size  Used by


# Как видно модули не подгружены
# Проверяю ядро

uname -a
Linux test 3.10.32-rt31 #1 SMP PREEMPT RT Wed Mar 12 15:30:48 MSK 2014 x86_64 GNU/Linux


# Качаю драйвер NVIDIA и патч к нему

mkdir -p /root/src/nvidia
cd /root/src/nvidia
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/325.15/NVIDIA-Linux-x86_64-325.15.run
wget http://garr.dl.sourceforge.net/project/l-proaudio/nvidia-325xx-rt.patch
sh ./NVIDIA-Linux-x86_64-325.15.run --extract-only
cd NVIDIA-Linux-x86_64-325.15/kernel
patch -Np1 -i ../../nvidia-325xx-rt.patch


# Далее необходимо создать каталог /lib/modules/3.10.32-rt31
# Внутри каталога должна быть ссылка build, на каталог с исходниками ядра /usr/src/linux

ls /lib/modules
3.2.0-27-generic
mkdir /lib/modules/3.10.32-rt31
cd /usr/src
ln -s /root/src/kernel/linux-3.10.32 linux
cd /lib/modules/3.10.32-rt31
ln -s /usr/src/linux build


# Мэйкую драйвер

cd /root/src/nvidia/NVIDIA-Linux-x86_64-325.15/kernel
make IGNORE_PREEMPT_RT_PRESENCE=1 SYSSRC=/lib/modules/3.10.32-rt31/build module


# Сохраняю модуль в  /root/src/nvidia
# cp -a /root/src/nvidia/NVIDIA-Linux-x86_64-325.15/kernel/nvidia.ko /root/src/nvidia

mkdir -p /lib/modules/3.10.32-rt31/kernel/drivers/video
cp -a /root/src/nvidia/NVIDIA-Linux-x86_64-325.15/kernel/nvidia.ko /lib/modules/3.10.32-rt31/kernel/drivers/video


# Сохраняю модуль в  /root/src/nvidia
# cp -a /root/src/nvidia/NVIDIA-Linux-x86_64-325.15/nvidia_drv.so /root/src/nvidia

cp -a /root/src/nvidia/NVIDIA-Linux-x86_64-325.15/nvidia_drv.so /usr/lib/xorg/modules/drivers

# Создаю  xorg.conf

touch /etc/X11/xorg.conf
nano /etc/X11/xorg.conf

Section "ServerLayout"
    Identifier         "Layout0"
    Screen      0    "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier            "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync          28.0 - 33.0
    VertRefresh        43.0 - 72.0
    Option               "DPMS"
EndSection

Section "Device"
    Identifier           "Device0"
    Driver               "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier         "Screen0"
    Device            "Device0"
    Monitor           "Monitor0"
    DefaultDepth    24
    SubSection      "Display"
        Depth          24
    EndSubSection
EndSection


# Подгружаю модуль NVIDIA

insmod /lib/modules/3.10.32-rt31/kernel/drivers/video/nvidia.ko

lsmod
Module                  Size          Used by
nvidia                     8748108    0

/sbin/depmod -a

/etc/init.d/fly-dm restart


# или reboot по желанию
# Проверяю что получилось

uname -a
Linux test 3.10.32-rt31 #1 SMP PREEMPT RT Wed Mar 12 15:30:48 MSK 2014 x86_64 GNU/Linux

lsmod
Module                  Size        Used by
nvidia                     8748108  22

cat /var/log/Xorg.0.log |grep NVIDIA
[  2577.756] (II) Module nvidia: vendor="NVIDIA Corporation"
[  2577.756] (II) NVIDIA dlloader X Driver  325.15  Wed Jul 31 17:50:57 PDT 2013
[  2577.756] (II) NVIDIA Unified Driver for all Supported NVIDIA GPUs
[  2577.759] (**) NVIDIA(0): Depth 24, (--) framebuffer bpp 32
[  2577.759] (==) NVIDIA(0): RGB weight 888
[  2577.759] (==) NVIDIA(0): Default visual is TrueColor
[  2577.759] (==) NVIDIA(0): Using gamma correction (1.0, 1.0, 1.0)
[  2577.759] (**) NVIDIA(0): Enabling 2D acceleration
[  2577.759] (EE) NVIDIA(0): Failed to initialize the GLX module; please check in your X
[  2577.759] (EE) NVIDIA(0):     log file that the GLX module has been loaded in your X
[  2577.759] (EE) NVIDIA(0):     server, and that the module is the NVIDIA GLX module.  If
[  2577.759] (EE) NVIDIA(0):     you continue to encounter problems, Please try
[  2577.759] (EE) NVIDIA(0):     reinstalling the NVIDIA driver.
[  2578.054] (II) NVIDIA(GPU-0): Display (Acer V193 (DFP-0)) does not support NVIDIA 3D Vision
[  2578.054] (II) NVIDIA(GPU-0):     stereo.
[  2578.054] (II) NVIDIA(0): NVIDIA GPU GeForce 210 (GT218) at PCI:1:0:0 (GPU-0)
[  2578.054] (--) NVIDIA(0): Memory: 524288 kBytes
[  2578.054] (--) NVIDIA(0): VideoBIOS: 70.18.2d.00.00
[  2578.054] (II) NVIDIA(0): Detected PCI Express Link width: 16X
[  2578.057] (--) NVIDIA(0): Valid display device(s) on GeForce 210 at PCI:1:0:0
[  2578.057] (--) NVIDIA(0):     CRT-0
[  2578.057] (--) NVIDIA(0):     CRT-1
[  2578.057] (--) NVIDIA(0):     Acer V193 (DFP-0) (boot, connected)
[  2578.057] (--) NVIDIA(0):     DFP-1
[  2578.057] (--) NVIDIA(0): CRT-0: 400.0 MHz maximum pixel clock
[  2578.057] (--) NVIDIA(0): CRT-1: 400.0 MHz maximum pixel clock
[  2578.057] (--) NVIDIA(0): Acer V193 (DFP-0): 330.0 MHz maximum pixel clock
[  2578.057] (--) NVIDIA(0): Acer V193 (DFP-0): Internal Dual Link TMDS
[  2578.057] (--) NVIDIA(0): DFP-1: 165.0 MHz maximum pixel clock
[  2578.057] (--) NVIDIA(0): DFP-1: Internal Single Link TMDS
[  2578.057] (**) NVIDIA(0): Using HorizSync/VertRefresh ranges from the EDID for display
[  2578.057] (**) NVIDIA(0):     device Acer V193 (DFP-0) (Using EDID frequencies has been
[  2578.057] (**) NVIDIA(0):     enabled on all display devices.)
[  2578.058] (==) NVIDIA(0):
[  2578.058] (==) NVIDIA(0): No modes were requested; the default mode "nvidia-auto-select"
[  2578.058] (==) NVIDIA(0):     will be used as the requested mode.
[  2578.058] (==) NVIDIA(0):
[  2578.059] (II) NVIDIA(0): Validated MetaModes:
[  2578.059] (II) NVIDIA(0):     "DFP-0:nvidia-auto-select{}"
[  2578.059] (II) NVIDIA(0): Virtual screen size determined to be 1280 x 1024
[  2578.085] (--) NVIDIA(0): DPI set to (85, 86); computed from "UseEdidDpi" X config
[  2578.085] (--) NVIDIA(0):     option
[  2578.085] (II) NVIDIA: Using 768.00 MB of virtual memory for indirect memory access.
[  2578.090] (II) NVIDIA(0): Setting mode "DFP-0:nvidia-auto-select{}"
[  2578.146] (==) NVIDIA(0): Disabling shared memory pixmaps
[  2578.146] (==) NVIDIA(0): Backing store disabled
[  2578.146] (==) NVIDIA(0): Silken mouse enabled
[  2578.146] (**) NVIDIA(0): DPMS enabled
[  2578.146] (II) NVIDIA(0): [DRI2] Setup complete
[  2578.146] (II) NVIDIA(0): [DRI2]   VDPAU driver: nvidia

понедельник, 3 марта 2014 г.

CUDA install on Astra-linux

# Установлена Astra-linux-orel-1.9 по дефолту
# Качаю драйвера NVIDIA и CUDA
mkdir -p /root/src/cuda
cd /root/src/cuda

wget http://us.download.nvidia.com/XFree86/Linux-x86_64/331.49/NVIDIA-Linux-x86_64-331.49.run
wget http://developer.download.nvidia.com/compute/cuda/5_5/rel/installers/cuda_5.5.22_linux_64.run

# Для установки проприетарного драйвера NVIDIA, необходимо предварительно выгрузить модуль NOUVEAU
# Данный модуль подгружается еще на этапе загрузки initrd (так сделано в Astra-linux) 
# Поэтому пришлось препарировать initrd, чтобы избавиться от NOUVEAU
mkdir /root/src/initrd
cd /root/src/initrd
cp -a /boot/initrd.img-3.2.0-27-generic .
mv initrd.img-3.2.0-27-generic initrd.img.gz
gunzip initrd.img.gz
cpio -i < initrd.img
mv initrd.img ../
rm ./lib/modules/3.2.0-27-generic/kernel/drivers/gpu/drm/nouveau/nouveau.ko
find . | cpio -o -H newc | gzip -9 > ../initrd.img-3.2.0-27-generic
mv /boot/initrd.img-3.2.0-27-generic /boot/initrd.img-3.2.0-27-generic.save
cp -a ../initrd.img-3.2.0-27-generic /boot

# Блэклист для NOUVEAU модуля
touch /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
echo "blacklist nouveau" > /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/nvidia-installer-disable-nouveau.conf

# Необходимые пакеты для установки драйвера NVIDIA (пакеты ставились с DVD)
apt-get update
apt-get install linux-headers-`uname -r` binutils pkg-config build-essential  xserver-xorg-dev
reboot

# После перезагрузки проверяю отсутствие модуля NOUVEAU
lsmod |grep nouveau

# Установка
Ctrl+Alt+F1
/etc/init.d/fly-dm stop

cd /root/src/cuda
sh ./NVIDIA-Linux-x86_64-331.38.run
sh ./cuda_5.5.22_linux_64.run
License                                       accept
Do you with to continue                yes
Install nVidia Driver                       yes
Install cuda toolkit                        yes
Tollkit location                              default        (/usr/local/cuda-5.5)
Install cuda samples                     yes
Cuda samples location                  default        (/root/NVIDIA_CUDA-5.5_Samples)

echo "/usr/local/cuda-5.5/lib" >> /etc/ld.so.conf.d/x86_64-linux-gnu.conf
echo "/usr/local/cuda-5.5/lib64:/lib" >> /etc/ld.so.conf.d/x86_64-linux-gnu.conf
ldconfig
modprobe nvidia

lsmod |grep nvidia
         nvidia       10782753  0

/etc/init.d/fly-dm start

четверг, 9 января 2014 г.

Minimal Root File System



|-- /bin
|
|   |-- busybox
|
|   |-- sh -> busybox
|
|-- /dev
|
|   |-- console
|
|-- /etc
|
|   |-- /init.d
| 
|       |-- rcS
|
|   | -- inittab
|
|   | -- fstab
|
|   -- passwd
|
|   | -- shadow  
|
|   | -- group
|
|   | -- busybox.conf 
|
|-- init -> /bin/busybox
|
|-- /lib
    |-- ld-2.3.2.so
    |-- ld-linux.so.2 -> ld-2.3.2.so
    |-- libc-2.3.2.so
    |-- libc.so.6 -> libc-2.3.2.so