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

8 окт. 2014 г.

Падение контейнеров Docker в Gentoo

Проблема


При использовании пакета app-emulation/docker из официального дерева portage я наблюдаю рандомные падения контейнеров при большом IO.

В логах присутствуют записи вида "mount.go: .... Segmentation Fault". Способа стабильно воспроизвести баг я не знаю.

Баг наблюдается на всех версиях с 1.0.0 по 1.2.0 включительно и на любых комбинациях USE-флагов: lxc, device-mapper, aufs (на ядре sys-kernel/aufs-sources), а так же на обоих версиях dev-lang/go: 1.2 и 1.3.


Возможно причина в том, что в этом пакете docker собирается не официально рекоммендованным способом.

Проблемы не наблюдается в Debian wheezy.

Решение


Проблемы так же не наблюдается при использовании пакета app-emulation/docker-bin из оверлея docker.

Этот пакет использует deb-пакет с официального сайта.

24 мая 2014 г.

Баг с аппаратной переключалкой WiFi

У меня баг проявился на Debian Jessie с карточкой Ralink RT3090 (HP ProBook 4720s).

Симптомы

1. Индикатор wifi не светится, аппаратная кнопка включения wifi не работает.

2. wicd (или network-manager) не отображает список доступных сетей.

3. Команда:

# iwlist wlan0 scan

Выдает ошибку:

wlan0   Interface doesn't support scanning : Network is down

4. Команда:

# ifconfig wlan0 up

Выдает ошибку:

SIOCSIFFLAGS: Operation not possible due to RF-kill

5. Команда:

# rfkill list all

Выводит:

0: some-wifi: Wireless LAN
        Soft blocked: no
        Hard blocked: yes


Решение

Нужно перезагрузить компьютер и до того, как загрузится Linux, включить аппаратную кнопку wifi.

Решение описано на stackoverflow и в баг-репорте.

11 февр. 2014 г.

Gentoo: Кросскомпиляция и отладка ядра другой архитектуры

Ссылки


ARM Versatile PB


Пути


Создаем каталог, в котором будет проходить вся работа.

# mkdir /some/dir
# export VM=/some/dir

Виртуальная машина (Debian Squeeze)


Устанавливаем QEMU с включенной опцией arm в переменных QEMU_SOFTMMU_TARGETS и QEMU_USER_TARGETS.


Создаем диск.

# cd $VM
# qemu-img create -f qcow2 vm.qcow2 20G

Скачиваем образ установщика.

# cd $VM
# wget http://caesar.acc.umu.se/cdimage/archive/6.0.8/armel/iso-cd/debian-6.0.8-armel-netinst.iso

Скачиваем ядро и initrd установщика (QEMU не поддерживает загрузчик для ARM).

# cd $VM
# wget ftp://ftp.us.debian.org/debian/dists/wheezy/main/installer-armel/20130613+deb7u1+b1/images/versatile/netboot/vmlinuz-3.2.0-4-versatile
# wget ftp://ftp.us.debian.org/debian/dists/wheezy/main/installer-armel/20130613+deb7u1+b1/images/versatile/netboot/initrd.gz

Устанавливаем Debian.

# brctl show br0
bridge name        bridge id                STP enabled       interfaces
br0                8000.3085a997443e        no                eth0

# cat $VM/vm-ifup.sh
#! /bin/bash
set -x
ifconfig $1 up && brctl addif br0 $1

# qemu-system-arm \
  -m 2047 -M versatilepb -hda $VM/vm.qcow2 \
  -net nic,vlan=1,macaddr=de:ad:be:af:11:22 \
  -net tap,vlan=1,ifname=myvm,script=$VM/vm-ifup.sh \
  -kernel $VM/vmlinuz-3.2.0-4-versatile \
  -initrd $VM/initrd.gz \
  -cdrom $VM/debian-6.0.8-armel-netinst.iso \
  -boot d

Вытаскиваем initrd из установленного Debian.

# qemu-nbd --connect=/dev/nbd0 $VM/vm.qcow2
# mkdir $VM/vm-disk
# fdisk -l /dev/nbd0
# mount /dev/nbd0p1 $VM/vm-disk
# cp $VM/vm-disk/boot/initrd.img-2.6.32-5-versatile $VM/
# umount $VM/vm-disk
# rmdir $VM/vm-disk
# qemu-nbd --disconnect $VM/vm.qcow2

Загружаем дефолтный Debian.

# qemu-system-arm \
  -m 2047 -M versatilepb -hda $VM/vm.qcow2 \
  -net nic,vlan=1,macaddr=de:ad:be:af:11:22 \
  -net tap,vlan=1,ifname=myvm,script=$VM/vm-ifup.sh \
  -kernel $VM/vmlinuz-3.2.0-4-versatile \
  -initrd $VM/initrd.img-2.6.32-5-versatile \
  -append "root=/dev/sda1"

Тулчейн


Устанавливаем crossdev.

# emerge -av sys-devel/crossdev

Устанавливаем тулчейн.

# crossdev --binutils 2.20.1 --gcc 4.6.4 --kernel 3.1 --libc 2.11.3 --target arm-linux-gnueabi

Устанавливаем GDB (флаг expat нужен для парсинга XML, который раздает gdbserver QEMU).

# USE=expat emerge -av cross-arm-linux-gnueabi/gdb

Ядро


У меня работали ядра 2.6.x версий от 2.6.29 до 2.6.35.9.


Скачиваем и распаковываем ядро.

# cd $VM
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.5.tar.bz2
# tar xvf linux-2.6.32.5.tar.bz2

Конфигурируем.

# cd $VM/linux-2.6.32.5
# make versatile_defconfig
# make menuconfig

Нужно включить эти опции:

General Setup --->
  [*] Kernel .config support
  [*] Enable access to .config through /proc/config.gz

Kernel Features --->
  [*] Use VM EABI to compile the kernel
  [*] Allow old ABI binaries to run with this kernel

Bus Support --->
  [*] PCI Support

Device Drivers --->
  SCSI Device Support --->
    [*] SCSI Device Support
    [*] SCSI Disk Support
    [*] SCSI CDROM support
    [*] SCSI low-lever drivers --->
      [*] SYM53C8XX  Version 2 SCSI support

  Generic Driver Options--->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [*] Automount devtmpfs at /dev, after the kernel mounted the root

  Input device support--->
    [*] Event interface

File systems --->
  <*> Ext3 journalling file system support
  <*> The Extended 4 (ext4) filesystem
  Pseudo filesystems--->
    [*] Virtual memory file system support (former shm fs)

Kernel hacking --->
  [*] Compile the kernel with debug info

Собираем ядро и модули.

# mkdir -p $VM/arm-modules
# cd $VM/linux-2.6.32.5
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules_install INSTALL_MOD_PATH=$VM/arm-modules

Копируем ядро.

# cp $VM/linux-2.6.32.5/arch/arm/boot/zImage $VM/debug-kernel

Initrd


Распаковываем оригинальный initrd.

# mkdir -p $VM/initrd
# cd $VM/initrd
# gunzip - < $VM/initrd.img-2.6.32-5-versatile | cpio -id

Заменяем модули на собранные нами.

# cd $VM/initrd/lib/modules
# rm -rf *
# cp -a $VM/arm-modules/lib/modules/* .

Запаковываем новый initrd.

# cd $VM/initrd/
# find . | cpio --create --format='newc' | gzip > $VM/debug-initrd

Запуск


Проверяем, что новое ядро успешно загружается.

# qemu-system-arm \
  -m 2047 -M versatilepb -hda $VM/vm.qcow2 \
  -net nic,vlan=1,macaddr=de:ad:be:af:11:22 \
  -net tap,vlan=1,ifname=myvm,script=$VM/vm-ifup.sh \
  -kernel $VM/debug-kernel \
  -initrd $VM/debug-initrd \
  -append "root=/dev/sda1"

Отладка ядра


Запускаем QEMU с gdbserver (опции -s и -S).

# qemu-system-arm -s -S \
  -m 2047 -M versatilepb -hda $VM/vm.qcow2 \
  -net nic,vlan=1,macaddr=de:ad:be:af:11:22 \
  -net tap,vlan=1,ifname=myvm,script=$VM/vm-ifup.sh \
  -kernel $VM/debug-kernel \
  -initrd $VM/debug-initrd \
  -append "root=/dev/sda1"

Запускаем отладчик.

# cd $VM/linux-2.6.32.5
# arm-none-linux-gnueabi-gdb
(gdb) file vmlinux
(gdb) target remote :1234
(gdb) continue
.....
^C
(gdb) backtrace
(gdb) list

Можно также поставить breakpoint на функцию icmp_reply() и попинговать виртуалку.


Отладка модуля


Пишем простой модуль.

# cat $VM/hello/Makefile
KERNEL := $VM/linux-2.6.32.5

ARCH := arm
CROSS := arm-linux-gnueabi-

CFLAGS_hello.o := -g
obj-m += hello.o

all:
    make -C $(KERNEL) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) modules

clean:
    make -C $(KERNEL) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) clean
# cat $VM/hello/hello.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>

void goodbye(void); // без static!

void goodbye(void)
{
    printk(KERN_INFO "goodbye!\n");
}

static int __init hello_init(void)
{
    printk(KERN_INFO "hello_init\n");
    return 0;
}

static void __exit hello_exit(void)
{
    goodbye();
    printk(KERN_INFO "hello_exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("hello module");

Собираем модуль.

# cd $VM/hello
# make

Копируем hello.ko на виртуалку и загружаем.

# insmod hello.ko
# cat /sys/module/hello/sections/.text
0x0000000000000001
# cat /sys/module/hello/sections/.data
0x0000000000000002
# cat /sys/module/hello/sections/.bss
0x0000000000000003

Загружаем символы модуля в GDB.

(gdb) add-symbol-file ../hello/hello.ko \
      0x0000000000000001 -s .data 0x0000000000000002 -s .bss  0x0000000000000003
(gdb) b goodbye
(gdb) c

Выгружаем модуль, чтобы сработал breakpoint.

# rmmod hello

Отладка в Emacs


Советую настроить Emacs так:

(setq gdb-non-stop-setting nil)
(setq gdb-many-windows t)

И запускать отладчик так:

M-x gdb
arm-linux-gnueabi-gdb -i=mi

И затем в консоли GDB:

(gdb) file vmlinux
(gdb) target remote :1234
.....

PowerPC


Для PowerPC последовательность действий та же, за исключением перечисленных ниже моментов.


QEMU


QEMU был собран с флагом ppc.


Debian


Использовался Debian Wheezy с ядром 3.x.


Т.к. QEMU под PowerPC поддерживает загрузчик, вручную передавать ядро и initrd из установщика не требуется (опции -kernel и -initrd).


Crossdev


Использовался тулчейн powerpc-unknown-linux-gnu и соответственно отладчик cross-powerpc-unknown-linux-gnu/gdb.


Ядро


Проверялись ядра 2.6.39 и 3.6.11 с флагами сборки:

ARCH="powerpc" CROSS="powerpc-unknown-linux-gnu-"

Вместо versatile_defconfig и включения перечисленных опций ядра был использован конфиг ядра из Debian Wheezy.


В QEMU опцией -kernel передавался файл $VM/linux-3.6.11/vmlinux.

12 янв. 2014 г.

Debian Wheezy 64 bit, Fglrx, Steam

Список пакетов fglrx (закрытый драйвер ATI):

fglrx-atieventsd
fglrx-control
fglrx-driver
fglrx-glx
fglrx-modules-dkms
glx-alternative-fglrx
libfglrx
libfglrx-amdxvba1
libgl1-fglrx-glx


libfglrx:i386
libgl1-fglrx-glx:i386


Установка:

$ sudo apt-get install fglrx-atieventsd fglrx-control fglrx-driver fglrx-glx fglrx-modules-dkms glx-alternative-fglrx libfglrx libfglrx-amdxvba1 libgl1-fglrx-glx libfglrx:i386 libgl1-fglrx-glx:i386

$ sudo aticonfig --initial

Установщик Steam: Steam Installer for Wheezy

$ wget https://dl.dropboxusercontent.com/u/82856418/Steam-Installer-For-Wheezy/steam-debian_1.0.0.45-4_all.deb
$ sudo dpkg -i steam-debian_1.0.0.45-4_all.deb

3 нояб. 2013 г.

Debian: потеря темы GTK2 в KDE

Симпотмы проблемы:
  • в некоторых приложениях на pygtk2, при запуске в KDE, вместо выбранной темы GTK2 (например, QtCurve) используется страшная дефолтная тема;
  • gtk-chtheme отображает выбранную тему, а gtk-theme-switch2 всегда отображает дефолтную.

Возможное решение:

$ ln -s ~/.gtkrc-2.0 ~/.gtkrc-2.0-kde

2 дек. 2012 г.

Debian, установка cpu frequency в режим powersave (scaling governor)


Ссылки

Инструкция

1.

# apt-get install sysfsutils cpufrequtils

2.

# cat > /etc/default/cpufrequtils
GOVERNOR="powersave"

Список доступных вариантов здесь:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

3.

# cat > /etc/sysfs.conf
devices/system/cpu/cpu0/cpufreq/scaling_governor = powersave


4.

# update-rc.d sysfsutils defaults

5.

# reboot

6.

Проверка:

$ cpufreq-info | grep -A3 'current policy'

28 янв. 2012 г.

Fglrx, XV и Debian Wheezy (падение X-сервера при просмотре видео)


Сейчас в Debian Wheezy используется fglrx-driver 1:11-12-1 и xserver-xorg 1:7.6+10. В этой и более поздних версиях fglrx программы, использующие расширение XV, вызывают падение X-сервера. Сюда относятся многие видео-плееры, например, mplayer.

Флеш в браузере без полноэкранного режима не использует XV.

Причина в том, что ATI не спешит реагировать на поломанный ABI в новых версиях X11. Подробности описаны здесь: Bug #649346.

Решение #1

Использовать свободные драйвера вместо fglrx:

$ sudo apt-get remove fglrx-driver
$ sudo apt-get install xserver-xorg-video-radeon

Свободные драйвера не поддерживают 3D-ускорение и работают медленнее на моей карточке.

Решение #2

Не использовать расширение XV:

$ mplayer -vo gl myvideo.flv

Решение #3

Откатить версию X11, оставив новый fglrx:

1. Добавить squeeze-backports в /etc/apt/sources.list:

deb http://backports.debian.org/debian-backports squeeze-backports main

2. Добавить приоритеты в  /etc/apt/preferences:

Package: xserver-xorg* libgl1-mesa-dri
Pin: release n=squeeze-backports
Pin-Priority: 1100

Package: *
Pin: release a=testing
Pin-Priority: 1000

3.  Откатить X11:

$ sudo apt-get update
$ sudo aptitude install -t squeeze-backports xserver-xorg-core=2:1.10.4-1~bpo60+1 xserver-xorg-input-all=1:7.6+8~bpo60+1 xserver-xorg=1:7.6+8~bpo60+1

Среди предложенных вариантов нужно выбрать тот, который выполняет DOWNGRADE для указанных пакетов, не удаляет ничего нужного и не оставляет неразрешенных зависимостей.