Skip to main content

a silhouette of a person's head and shoulders, used as a default avatar

Qt Developer Days 2010

Today I got a email about registration for “Qt Developer Days 2010”. This conference will be in Munich (October 11-13) and in San Francisco (November 1-3). I think this is the biggest and best Qt-event. Last time there was more than 700 people. It’s very interesting for me as the KDE developer, but it’s not free like FOSDEM or openSUSE Conference 🙁

For example, 3 days in Munich cost 499€ (if you pay befor 15th september and 699€ if you pay after). Ok, I know that Qt/Nokia makes very good coffee, but anyway this event is very costly for students like me 😉

I will wait for the openSUSE Conference and meet the Qt/KDE hackers there.

a silhouette of a person's head and shoulders, used as a default avatar

ru meeting 5 июня в 18:00 (МСК)

Итак, очередная встреча состоится завтра (в суботу) 05.06.2010 в 18:00 (МСК) на канале #opensuse.ru сервера irc.opensuse.org

Топики выдвинутые к обсуждению:
1. отчёт по выполненным задачам, поставленным на прошлой встрече
2. openSUSE Conference 2010
3. feeds с блогов участников русского сообщества openSUSE для http://planetsuse.org/ru/
4. перевод официальной документации для openSUSE 11.3
5. feedback oб официальном форуме
6. русские сообщества openSUSE на open-suse.ru, linuxforum.ru и unixforum.org
7. старт вычитывания и коррекции ошибок и опечаток libzypp и процесса инсталяции

Приглашаю всех не равнодушных к проекту openSUSE
a silhouette of a person's head and shoulders, used as a default avatar

openGarrobito 0.4.5

Greetings!

This time I come to announce the departure of openGarrobito FULL 0.4.5 and openGarobito LITE edition 04.3

That brings improvements:

1. Support for Broadcom wireless card brand (now supports more wireless cards because of the new module broadcom-sta)
2. The LITE version is made from scratch to weigh less and reached a 4 GB USB)
3. Update to KDE 4.4.3
4. All software has been updated to May 11, 2010
5. With driver for ATI graphics cards, osea brings fglrx, nvidia cards are still in process, I hope soon;)

There are few things that were corrected, but making major changes jejeje

http://ecentro.uca.edu.ni/~novell/

the avatar of Andrea Florio

AcetoneISO2 and LXDE

I am sure that most of you know and like acetoneiso2, a nice tool to menage isos and lots of other things. Latest release, 2.2.1 support only kde, gnome and xfce as DE and allow to open their file managers to browse files and mounted stuffs…

So, you know, FLOSS is our world.. i took the code, and improved it, just a trivial change, but really nice. I added LXDE/PcmanFM support, as you can see from the picture:

Now you can have acetoneiso2 run pcmanfm too.

The patched package is already into Packman repository and a submit-request (#41069) has been submitted to KDE:KDE4:Community repository, so hopefully, it would be available even there quite soon.

So people.. enjoy it 😀

Andrea

a silhouette of a person's head and shoulders, used as a default avatar

FLISOL 2010 GYE – Some Late Numbers and Experiences

I know, I know… it is a bit late ( more than a month ) since FLISOL took place in Guayaquil-Ecuador this year… but a lot a time consuming activities have stopped me from reporting some results. Even though more than a month have passed, I think I should let you know what happened.

Compared to previous years, the event of this year was relatively smaller. An approximate of 200 people assisted, from which for the ~80% it was their first time that assisted to FLISOL, 50% of visitors had not used or heard about FLOSS before, ~13% were below 18 years old and ~75% were between 18-35 years old.

There are 3 things that I would like to point from this year’s event:

  1. Most of the event was organized by the new members from Kokoa ( ESPOL’s Free Software Community ), who I send my congratulations since it was a very good start. They were just newbies and took the challenge of organizing the biggest FLOSS event in town. As an old Kokoa kore member I know how difficult can be to organize FLISOL, and I can say those guys did a good job.
  2. One of the rooms that caught most of the attention of the visitors was the gaming room. It mostly attracted the young visitors from different genres. I think that gnu/linux is a niche that has started to be exploited in the gaming area. Personally I have tried some games since the very first time I had openSUSE (SuSE Linux back then) installed and I have seen how good known titles and good quality indie games are coming to gnu/linux. I think that with openSUSE GameStore , some gamers and developers from the openSUSE community we can try to promote our lovely green as a good platform for gaming.
  3. Last but not least, I would like to say thanks to Jarflex, ESPOL’s Digital Culture Club, Ecuagamers and all the people who contributed to make this event possible.

Summarizing, this year it was seen a collaboration between different groups and enterprises somehow related to FLOSS that , locally, was not seen before. This might be a further step of what was started in 2007 when we tried to take FLISOL from a FLOSS installation festival for FLOSS enthusiast to a FLOSS event that will catch the attention of people of different ages with different interests.

Until the next post people of the openSUSEsphere…

jaom7

PS.1: Some pictures by: @sarahjessi, Kmeng, @_abejamaya , Jarflex and Ecuagamers
PS.2: If you are interested or have some ideas related to openSUSE gaming [site] please write a comment or contact me.

the avatar of Flavio Castelli

How to run a single rails unit test

This post explains how to execute a single unit test (or even a single test method) instead of running the complete unit test suite.

In order to run the unit tests of your rails application, basically you have these official possibilities:

  • rake test: runs all unit, functional and integration tests.
  • rake test:units: runs all the unit tests.
  • rake test:functionals: runs all the functional tests.
  • rake test:integration: runs all the integration tests. Each one of these commands requires some time and they are not the best solution while developing a new feature or fixing a bug. In this circumstance we just want to have a quick feedback from the unit test of the code we are editing.

Waiting for all the unit/functional tests to complete decreases our productivity, what we need is to execute just a single unit test. Fortunately there are different solutions for this problem, let’s go through them.

The easy approach: use your favorite IDE

Most of the IDE supporting ruby allow you to run a single unit test. If you are using Netbeans running a single unit test is really easy:

  • make sure the editor if showing the file you want to test or the file containing its unit tests
  • Hit Ctrl+Shift+F6 or click on the following menu entry: Debug->Debug Test File Two new windows will be opened: one will contain the output produced by your unit test, the other one will show the results of the unit test.

As you will notice the summary window contains also some useful information like the:

  • hyper links to the exact location of the code that produced the error/failure.
  • execution time required by each one of the test methods. As you will experience it will be like “compiling” your ruby code.

From the console

If you are not using Netbeans you can always rely on some command line tools.

No additional tools

These “tricks” don’t require additional gems, hence they will work out of the box.

The first solution is to call this rake task:

rake test TEST=path_to_test_file

So the final command should look like

rake test TEST=test/unit/invitation_test.rb

Unfortunately on my machine this command repeats the same test three times, I hope you won’t have the same weird behavior also on your systems…

Alternatively you can use the following command:

ruby -I"lib:test" path_to_test_file"

It’s even possible to call a specific test method of your testcase:

ruby -I"lib:test" path_to_test_file -n name_of_the_method"

So calling:

ruby -I"lib:test" test/unit/invitation_test.rb - test_should_create_invitation

will execute only _InvitationTest::test_should_createinvitation.

It’s also possible to execute only the test methods matching a regular expression. Look at this example:

ruby -I"lib:test" test/unit/invitation_test.rb -n /.*between.*/

This command will execute only the test methods matching the /.between./ regexp.

Using the single_test gem

If you want to avoid the awful syntax showed in the previous paragraph there’s a gem that can help you, it’s called single_test.

The github page contains a nice documentation, but let’s go through the most common use cases.

You can install the gem as a rails plugin:

script/plugin install git://github.com/grosser/single_test.git

single_test will add new rake tasks to your rails project, but won’t override the original ones.

Suppose we want to execute the unit test of user.rb, just type the following command:

rake test:user

If you want to execute the functional test of User just call:

rake test:user_c

Appending _”c” to the class name will automatically execute its functional test (if it exists).

It’s still possible to execute a specif test method:

rake test:user_c:_test_name_

So calling:

rake test:user_c:test_update_user

Will execute the _test_updateuser method written inside of _test/functional/user_controllertest.rb.

It’s still possible to use regexp:

rake test:invitation:.*between.*

This syntax is equivalent to ruby -I"lib:test" test/unit/invitation_test.rb -n /.*between.*/.

Possible issues

When a single unit test is run all the usual database initialization tasks are not performed. If your code is relying on newly created migrations you will surely have lots of errors. This is happening because the new migrations have not been applied to the test database.

In order to fix these errors just execute:

rake db:test:prepare

before running your unit test.

a silhouette of a person's head and shoulders, used as a default avatar

openSUSE at FLISoL Chile

As you already know, the Festival Latinoamericano de Instalacion de Software Libre event will be held this Saturday here in Chile.

In La Serena we are starting around 9 am at Universidad de La Serena campus Isabel Bongard, with plenty of fun talks and room for installations, I am more than ready to install our awesome green! =). By the way, I will be creating an ISO with SUSE Studio so everyone can grab it on USB devices.

Some talk topics we are presenting: KVM, Free Knowledge, Linux beyond the Desktop, and Contributing to openSUSE without having to be a developer.

I would like to thank Andreas and everyone at Novell who has been supporting the Ambassadors Program, shipping DVDs, Geekos, T-shirts that the audience really appreciates and do make a difference.

a silhouette of a person's head and shoulders, used as a default avatar

Обновление openSUSE 11.2 до 11.3 M7

Прогнав несколько раз обновление openSUSE с 11.2 до очередной "вехи" (очередного Milestone) на виртуалке, я таки решился обновить систему на своем ноутбуке. Напомню, на всякий случай, релиз openSUSE 11.3 выйдет 15 июля, но уже сейчас те, кто хочет - могут обновиться до очередного тестового выпуска. То, что выпуск тестовый означает, что его работа не гарантируется в каждый из моментов времени. Другими словами поломаться может все что угодно в любой момент времени ;).

Несколько тестовых прогонов на виртуалке позволили выявить несколько подводных камней, на которые можно наткнуться при выполнении обновления "живой" системы. О них я расскажу по ходу дела.



На моей openSUSE подключено много дополнительных репозиториев: это конечно же разные репозитории, позволяющие воспроизводить multimedia-файлы. К ним относятся Packman, libdvdcss и Videolan. Поскольку этих репозиториев под openSUSE 11.3 нет - я их оставил нетронутыми. Интересно было посмотреть - будут ли проблемы с зависимостями при обновлении.

Зато я отключил следующие репозитории:
  • Mozilla - в котором всегда есть сборка последнего Firefox;
  • OpenOffice - назначение аналогично;
  • Virtualization - последние версии kvm и qemu.
Причина банальна - все последние версии перечисленных программ включаются в основной репозиторий openSUSE 11.3. Естественно, что позже, после релиза стоит подключить эти репозитории обратно.

Затем я просто перебил номер версии openSUSE с 11.2 на 11.3 в файлах репозиториев OSS (opensource ПО), Non-OSS и Updates. Затем выполнил команду zypper ref , чтобы обновить информацию о репозиториях.

Теперь об обещанном подводном камне. В процессе обновления, при изменении файлов в /etc/sysconfig , zypper вызывает SuSEconfig, для генерации разных системных файлов в /etc . В то же время в процессе обновления в системе меняются некоторые утилиты, которые вызываются из SuSEconfig'a, что иногда вызывает его временную неработоспособность. Эта "неработоспособность" приводит к тому, что процесс обновлений прерывается и не факт, что его затем можно будет продолжить корректно. Возможно, что к релизу этот баг подправят. Но пока работает именно так, как я описал. К счастью, SuSEconfig можно отключить. Делается это редактированием файла /etc/sysconfig/suseconfig. Достаточно в этом файле изменить значение переменной ENABLE_SUSECONFIG="yes" на ENABLE_SUSECONFIG="no" . После этого SuSEconfig работать больше не будет. На обновленной системе его затем будет необходимо включить обратно.

Затем, рекомендуется изменить в файле /etc/zypp/zypp.conf (если не сделали этого раньше) параметр commit.download.mode в значение DownloadInAdvance. Это заставит zypper выполнить обновление после предварительного выкачивания всех пакетов.

Последний шаг перед обновлением - это убедиться, что у вас на жестком диске достаточно места, для всех выкачиваемых пакетов. У меня объем скачивания составил 1,4Gb. Пакеты скачиваются в каталог /var/cache/zypp.

Ну а теперь просто выполняем обновление командой zypper dup . Перед выполнением обновления он предложит вам разрешить конфликты между пакетами. У меня это почему-то были пакеты, связанные с NetworkManager. Я предпочел удалить все эти пакеты. Их потом можно поставить из обновленной системы. Затем, zypper выкачивает необходимые пакеты и начинает выполнять обновление. У меня весь процесс обновления (без учета времени выкачивания пакетов) занял около 40 минут (Core 2 Duo 2,1 GHz). Достаточно быстро! По окончании процесса можно убедиться в том, что мы действительно обновили систему:

host13:/etc/X11 # cat /etc/SuSE-release
openSUSE 11.3 Milestone 7 (x86_64)
VERSION = 11.3


После завершения обновления включаем обратно SuSEconfig и запускаем его из командной строки: SuSEconfig (обратите внимание, что буква 'u' маленькая). После того, как он отработал, я решил перестраховаться и запустил еще раз mkinitrd - это скрипт, выполняющий пересборку initrd (образа, критичного для загрузки системы). Также желательно запустить zypper ve для дополнительной проверки системы на целостность зависимостей.

Если вывод этих команд не содержал информации об ошибках, вводим reboot и перезагружаем систему. После удачной (я надеюсь!) загрузки мы попадаем в обновленную систему. В последнем Milestone разработчики openSUSE потихоньку начинают внедрять новое оформление. Новые обои по умолчанию видно на этом скриншоте:


Примерно такая же картинка в графическом меню grub и в GDM.

Система вроде бы пока работает достаточно стабильно. Замеченые пока ошибки:
1. Иногда при загрузке системы разрешение внезапно устанавливается в 640х480 . У меня подозрение, что это пока KMS подглючивает.
2. Немного косячит неправильно настроенный PolicyKit - система постоянно спрашивает root'овый пароль для перезагрузки, монтирования флешек и перехода в спящий режим. Насколько я разобрался - причины кроются в том, что из системы убрана поддержка HAL, а новые политики пока не написаны.
3. При выходе из спящего режима включается на полную вентилятор процессора.
Все эти ошибки терпимые и до релиза вполне можно жить.

После обновления haldaemon остается работать в системе и его необходимо принудительно отключить:
host13:/etc/X11 # chkconfig haldaemon off

Х-сервер теперь собран с поддержкой udev вместо HAL:
host13:~ # ldd $(which X)
    linux-vdso.so.1 =>  (0x00007fff401ff000)
    libudev.so.0 => /lib64/libudev.so.0 (0x00000036e8600000)
    libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x00000036d2800000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000036d4600000)
    libpciaccess.so.0 => /usr/lib64/libpciaccess.so.0 (0x00000036d3000000)
    libXfont.so.1 => /usr/lib64/libXfont.so.1 (0x00000036d5200000)
    libXau.so.6 => /usr/lib64/libXau.so.6 (0x00000036d6200000)
    libpixman-1.so.0 => /usr/lib64/libpixman-1.so.0 (0x00000036dee00000)
    libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00000036da200000)
    libm.so.6 => /lib64/libm.so.6 (0x00000036d3e00000)
    librt.so.1 => /lib64/librt.so.1 (0x00000036d4e00000)
    libc.so.6 => /lib64/libc.so.6 (0x00000036d3a00000)
    libz.so.1 => /lib64/libz.so.1 (0x00000036d4a00000)
    /lib64/ld-linux-x86-64.so.2 (0x00000036d2400000)
    libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00000036d7600000)
    libfontenc.so.1 => /usr/lib64/libfontenc.so.1 (0x00000036d3400000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000036d4200000)

Теперь для его настроек используется каталог /etc/X11/xorg.conf.d:

host13:~ # ls /etc/X11
.qtrc.lock  Xmodmap.remote  fs        proxymngr  rstart       xdm  xim.d  xorg.conf.d
Xmodmap     Xresources      lbxproxy  qtrc       x11perfcomp  xim  xinit  xs

host13:~# ls /etc/X11/xorg.conf.d/
10-evdev.conf  20-synaptics.conf  50-device.conf   50-screen.conf   90-keytable.conf
11-mouse.conf  20-wacom.conf      50-monitor.conf  50-vmmouse.conf

В данном каталоге лежат файлы, настраивающие отдельные аспекты настройки Х-сервера. Вот, например, файл для evdev:

host13:~ # cat /etc/X11/xorg.conf.d/10-evdev.conf
#
# Catch-all evdev loader for udev-based systems
# We don't simply match on any device since that also adds accelerometers
# and other devices that we don't really want to use. The list below
# matches everything but joysticks.

Section "InputClass"
        Identifier "evdev pointer catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev tablet catchall"
        MatchIsTablet "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

В общем и целом все пока нравится, вроде все работает.

the avatar of Matthias Hopf

RAnsrID - Redundant Array of Non-Striped Really Independent Disks

In my spare time I've been working on a RAID-lookalike system for storing large amounts of data with multiple redundancies - and with significantly lower power consumption and disk spinning time than standard RAID if you only access single large files in a typical session.

The whole thing is implemented as a network block device (nbd), and will be presented (in an early, but at least already partially working state) on LinuxTag 2010 in Berlin.

Note that this is not a direct competitor to a standard RAID solution - in fact, I propose using a RAID 1 for the journal it needs (e.g. use the system disk - you're already using a RAID there, right?). For a comparison table check the project page.

Source will be available soon, I've not decided which git hoster to use yet. I don't think it's reasonable to put this on freedesktop, because is relation to freedesktop to close to nothing. I might change my mind, though .
a silhouette of a person's head and shoulders, used as a default avatar

Управление пакетами в (open)SUSE с помощью zypper


Данная статья не претендует на попытку написать документацию на zypper. Скорее это попытка познакомить читателя со средством пакетного менеджмента, используемым в дистрибутивах компании Novell. Данный пакетный менеджер является незаслуженно игнорируемым многими. Естественно, что охватить все его функции в рамках такой короткой статьи не представляется возможным, хотя бы потому, что для этого есть исчерпывающая документация ;), с которой трудно конкурировать. Ниже приведено вольное изложение об его основных и часто используемых возможностях. Более полный вариант документации и все возможные опции можно посмотреть в man zypper и здесь, здесь и здесь.

Для управления пакетами в разных версиях SUSE как самое высокоуровневое средство используется Yast, который на самом деле использует zypper (а если еще точнее, то его библиотеку libzypp). Причем, обратите внимание на то, что вторая буква в его названии это "Y", а то почему-то его название многие порываются написать, как zipper. Zypper - средство для управления пакетами в текстовом режиме. С SUSE версии 11 (включая энтерпрайзовые версии) zypper существенно прибавил в скорости. По данному теперь он легко уделывает yum (в отличие от yum zypper написан на С) и не уступает (по субъективному ощущению) apt. Синтаксис его конфигурационных файлов достаточно прост, например, чтобы управлять разными репозиториями не нужно ломать голову в отношении их приоритетов (это камень в огород apt). Также zypper достаточно «всеяден» в плане подключения разных репозиториев - он понимает:

  • «родной» формат репозиториев yast;
  • репозитории yum (rpm repo-md);
  • iso-образы репозиториев (да-да, не нужно их распаковывать!) ;
  • локальный каталог с rpm-пакетами;
  • то, что писать уже практически не обязательно - разные сетевые источники репозиториев — http, ftp, nfs.


Oб остальных интересностях я расскажу по ходу дела.

С версии openSUSE 11.2 в zypper наконец-то была добавлена опция, которая давно в него просилась, а именно, опции предварительного выкачивания пакетов при обновлении. Ранее zypper работал так. Например, нужно обновить с десяток пакетов. Zypper выкачивал их все и устанавливал по одному. В принципе, ничего страшного. Если канал в сеть хороший и надежный. А это в наших широтах не всегда встречается. В основном конфигурационном файле /etc/zypp/zypp.conf данное поведение описывается опцией commit.download.mode (опция закоментирована по умолчанию), которая имеет следующие варианты:
  • DownloadOnly — опция, которая легко заменяется ключом --dry-run, т. е. выкачивание всех пакетов необходимых для обновления без их установки.
  • DownloadInAdvance — сначала выкачать все пакеты, требующие обновления, затем начать процесс их установки.
  • DownloadInHeaps — опция аналогичная представленной выше, но в данном случае закачка и установка пакетов выполняется «порциями», не нарушающими целостность системы. Примерно также ведет себя пакетный менеджер в Mandriva.
  • DownloadAsNeeded — традиционное поведение. Закачка и установка осуществляется по одному пакету.
Следующей интересной возможностью zypper является сокращенный вариант его опций, т. е. для установки пакета можно написать zypper install foopackage, а можно zypper in foopackage. Далее я буду приводить именно сокращенный вариант опций, а полный вариант писать в скобках.

Поиск пакетов

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

zypper se foopackage — выполнить поиск (se - search) пакета foopackage.

Если вы хотите найти какую-то программу, но не знаете в каком пакете ее искать, можно сделать так:

booka:/etc/zypp # zypper wp vi
Loading repository data...
Reading installed packages...
S | Name | Type | Version | Arch | Repository
--+--------------+---------+----------+------+------------------
| gvim | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss
i | vim | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss
| vim-enhanced | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss

Опция wp (what-provides) позволяет искать пакет по любому возможному параметру: имя исполняемого файла, путь до исполняемого файла, любой набор символов из описания пакета. В данном случае я попросил найти пакет, содержащий редактор vi.

Еще примеры:

Попробуем поискать в каком пакете у нас находится библиотека libpng:
host13:~ # zypper wp libpng
Loading repository data...
Reading installed packages...
S | Name | Type | Version | Arch | Repository
--+------------+---------+------------+--------+------------------
i | libpng12-0 | package | 1.2.39-2.2 | x86_64 | openSUSE-11.2-Oss
v | libpng12-0 | package | 1.2.39-2.2 | i586 | openSUSE-11.2-Oss

Интересно, а в каком пакете находится файл /bin/bash?

Host13:~ # zypper wp /bin/bash
Loading repository data...
Reading installed packages...
S | Name | Type | Version | Arch | Repository
--+------+---------+------------+--------+----------------------------
i | bash | package | 4.0-18.4.1 | x86_64 | Updates for openSUSE 11.2-0
v | bash | package | 4.0-18.4.1 | i586 | Updates for openSUSE 11.2-0
v | bash | package | 4.0-18.3 | x86_64 | openSUSE-11.2-Oss
v | bash | package | 4.0-18.3 | i586 | openSUSE-11.2-Oss

Первый столбик показывает статус пакета, где i означает - установлен.

Просмотреть информацию о пакете можно командой zypper info <имя пакета>

Установка и удаление пакетов

Установка пакетов из подключенных репозиториев выполняется командой:

zypper in foopackage

Данная команда (in - install) установит пакет foopackage со всеми его зависимостями.

Для удаления пакетов используется опция rm/remove:

zypper rm foopackage

Данная команда удалит пакет foopackage из вашей системы.

Для проверки целостности системы на предмет удовлетворения зависимостей существует команда verify:

zypper ve

Если чего-то не будет хватать - zypper предложит доустановить нехватающие пакеты (или даже удалить ненужные).

Также есть еще два ключа, которые не являются обязательными, но могут здорово помочь, если вы вызываете zypper из скриптов. Первый ключ «-y» заставляет пакетный менеджер отвечать на все вопрос «да»/«yes». Второй ключ «-l» (маленькая L) - имеет похожее значение, она заставляет zypper соглашаться с лицензионными соглашениями отдельных пакетов (например, таких как Adobe Flash).

Обновление

Выполнять обновление системы zypper позволяет двумя способами — на основе патчей и на основе пакетов. Первый способ рекомендуется для серверов. В данном случае производится только наложение патчей, исправляющих ошибки безопасности на установленное ПО, причем этот способ обновлений должен поддерживаться теми, кто ведет репозиторий, из которого вы обновляетесь. Стандартные репозитории openSUSE поддерживают данный способ. Второй способ выполняет установку новых пакетов в систему. Понятно, что в данном случае все определяется способом ведения репозитория майнтейнерами пакетов. Стандартные репозитории openSUSE «замораживают» номера версий ПО, так что в принципе эти два способа равноценны (но только для них). Это все была теория. Теперь немного практики.
Обновить метаданные репозитория можно командой zypper ref и это необходимо делать всякий раз перед выполнением обновления (либо включить autorefresh для всех репозиториев - см.ниже).

Просмотреть список доступных патчей (list-patches) можно командой:

zypper lp

Просмотреть информацию о конкретном патче можно командой (про опцию -t ниже):

zypper info -t patch foopatch

Установить патчи можно командой zypper patch .

Обновление системы на основе пакетов выполняется командой:

zypper up [имя пакета]

Данная команда (up/update) выполняет обновление либо указанного пакета, либо всей системы.

Вторая команда предназначается для обновления системы между релизами (dist-upgrade):

zypper dup

Последняя команда имеет несколько интересных эффектов. Как известно все пакеты rpm имеют поле Vendor, в котором указан сборщик пакета. Пакеты из стандартных репозиториев имеют в данном поле openSUSE (или просто SUSE для энтерпрайзовых версий). Пакеты собранные на openSUSE Build Service имеют в данном поле слово obs с указанием вида репозитория. Так вот команда zypper up выполняет обновление таким образом, чтобы поле Vendor не менялось при обновлении. zypper dup, наоборот, может предпочесть изменить вендора пакета при обновлении.

Следующая интересная возможность касается тех, кто как я любит поэкспериментировать с системой. Допустим, вы хотите поставить последнюю версию KDE, подключаете репозиторий (об этом ниже) KDE4:Factory (данный репозиторий для разработчиков и тестеров), выполняете zypper dup (при этом Vendor меняется с openSUSE на что-то вроде obs://build.opensuse.org/KDE/KDE4:Factory) и получаете ее. Но потом, вы обнаруживаете, что в ней еще куча ошибок и вы хотели бы вернуться обратно. Что же делать? Неужели ничего нельзя поправить?!!! А ничего страшного! Убираете данный репозиторий (удаляете файл с его описанием или просто выключаете его) и опять выполняете zypper dup. При этом zypper вам предложит выполнить downgrade всех обновленных ранее пакетов. Т. е. zypper dup выполняет обновление системы таким образом, чтобы она всегда соответствовала подключенным репозиториям. Справедливости ради, стоит отметить, что downgrade не всегда проходит гладко. Иногда, при неблагоприятном положении звезд и планет, в системе остаются библиотеки от новых репозиториев, которые могут помешать работе программ. Так что возможно, придется затем позаниматься таким «увлекательным» занятием, как troubleshooting.

Управление репозиториями

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

host13:~ # zypper lr

В первой колонке приведен порядковый номер репозитория, во второй и третьей его название и описание. Четвертая и пятая колонки показывают включен ли данный репозиторий и включено ли его автообновление (autorefresh). Если последняя возможность включена, то при каждом своем запуске zypper будет проверять нужно ли обновление метаданных репозитория и, если нужно, выполнять его. В противном случае, вам нужно будет делать это собственноручно командой zypper ref (refresh).

Добавить репозиторий можно командой: zypper ar URI alias , где - URI идентификатор репозитория.  alias - это любое понятное вам имя репозитория, позволяющее идентифицировать его и отличить от других. ar — сокращенный вариант addrepo. Пример команды:

host13:~ # zypper ar nfs://192.168.0.254/srv/ftp/sles11 sles11
Adding repository 'sles11' [done]
Repository 'sles11' successfully added
Enabled: Yes
Autorefresh: No
URI: nfs://192.168.0.254/srv/ftp/sles11

Удалить репозиторий можно командой zypper rr . Например:

host13: ~# zypper rr 13
Removing repository 'sles11' [done]
Repository 'sles11' has been removed.

Здесь я удалил репозиторий, указав его ID (то есть номер). Его можно увидеть в выводе команды zypper lr . Аналогичного эффекта я бы добился, указав zypper rr sles11 . То есть в данном случае указывать нужно или ID репозитория, или его псевдоним.

Модификация параметров репозитория выполняется командой: zypper mr [options] . Список опций можно получить следующим образом:

host13:~ # zypper mr
Alias or an aggregate option is required.
modifyrepo (mr) ...
modifyrepo (mr) <--all|--remote|--local|--medium-type>

Modify properties of repositories specified by alias, number, or URI, or by the
'--all, --remote, --local, --medium-type' aggregate options.

Command options:
-d, --disable Disable the repository (but don't remove it).
-e, --enable Enable a disabled repository.
-r, --refresh Enable auto-refresh of the repository.
-R, --no-refresh Disable auto-refresh of the repository.
-n, --name Set a descriptive name for the repository.
-p, --priority Set priority of the repository.
-k, --keep-packages Enable RPM files caching.
-K, --no-keep-packages Disable RPM files caching.

-a, --all Apply changes to all repositories.
-l, --local Apply changes to all local repositories.
-t, --remote Apply changes to all remote repositories.
-m, --medium-type Apply changes to repositories of specified type.

Например, следующая команда включит параметр autorefresh для все репозиториев:

host13:~ # zypper mr -ra

Опция -r просит включить автообновление для репозиториев (а -R выключит его), а опция -a говорит применить это ко всем репозиториям.

Репозитории могут иметь приоритеты, которые могут дополнительно указывать zypper ваши предпочтения (меньшее значение - больший приоритет). Работа с приоритетами аналогична тому, что происходит в yum. Только здесь не нужно ставить никаких дополнительных плагинов. Чтобы задать приоритет репозиторию можно воспользоваться командой zypper mr, но на мой взгляд, гораздо проще открыть файл .repo репозитория и дописать в нем, например, такую строчку - priority=100. Стандартные репозитории openSUSE имеют приоритет 90, а репозиторий Updates приоритет 20. Имейте это в виду, когда будете задавать собственные приоритеты. После изменения приоритетов репозиториев обязательно необходимо запустить, сначала  zypper ref (если не включен autorefresh для репозиториев), а затем zypper dup, для того, чтобы zypper установил пакеты в соответствии с высказанными вами предпочтениями.

Но, по-моему, гораздо удобнее для управления репозиториями использовать соответствующий модуль yast:
host13:~ # yast repositories

Любители графического интерфейса Yast могут воспользоваться либо его графическим меню, либо набрав в консоли:

host13:~ # yast2 repositories

Ну и самый простой способ подключения репозиториев - это скачать файл с его описанием отсюда. В каждом из репозиториев есть текстовый .repo файл, например, для репозитория со свежими версиями Apache он лежит здесь. Затем нужно поместить его в каталог /etc/zypp/repos.d/. Ну и подредактировать на предмет приоритетов, если это нужно.

Типы пакетов

Ну и самая интересная возможность zypper в том, что он позволяет использовать разные типы «пакетов» при установке. В данном случае под «пакетами» понимаются:
  • собственно, пакеты (и если ничего не указывать специально, то имеются в виду именно они);
  • патчи (patch) (репозитории могут содержать просто патчи, а не пакеты с обновлениями);
  • шаблоны (pattern) - группы пакетов, устанавливающие ту или иную функциональность;
  • продукты (product) - совсем редко встречающийся зверь - это группы пакетов для работы того или иного продукта;
  • пакет с исходниками (srcpackage) - это обычный src.rpm.

Тип пакета указывается опцией -t . Например, получить список доступных шаблонов можно командой zypper patterns. И поставить тот, что нужен, командой:

host13:~ # zypper in -t pattern x11

Здесь pattern это тип устанавливаемого пакета, то есть мы указываем, что имеем в виду именно шаблон. x11 - имя устанавливаемого шаблона. Самое плохое при использовании шаблонов это то, что удалять пакеты шаблонами zypper пока не умеет.

Это, пожалуй, все, что я хотел рассказать про zypper на данном этапе. Я не ставил целью написать полный обзор данного пакетного менеджера, но надеюсь, что после этого хотя бы кто-то прочтет его полную документацию ;).