Zypper Command Reference
I needed an overview of all zypper's commands and options, so i created this little script that prints all the help texts. It can be used to search for options through all commands, or to create a reference sheet for printing like this:
$ ./zypper-help-all | fold -s | a2ps -rjB --columns 3 -o file.ps
todo: fix some inconsistencies in option names (see this thread for discussion)
todo: wrap the help texts at 79th column, bug #423007 (no more need for 'fold -s' in the command above)
Off to Egypt!
But to keep a bit SUSE relevant ...
We (well mostly Novell Technical Support Developers) now put my CVE index in an official place! It is updated once daily.
If you find incorrect stuff or older CVEs not yet linked, do not hesitate to mail us at security@suse.de (be aware that new published issues take a some days through QA usually).
Also, Wine 1.1.8 has been released and is in the openSUSE buildservice repository as usual.
YaST releases independent of openSUSE releases?
YaST is one of the cornerstones of openSUSE. It is developed for openSUSE and is released as part of openSUSE. There never was a release of YaST independent of openSUSE. Even the versioning of YaST is tied to openSUSE – the versions are 2.X.Y, where X is increased for every openSUSE release (17 for 11.1) and Y is simply a patch level, whenever a new fix or feature is added. Even more, every YaST package has its own versioning, so the only way to ensure you have a consistent set of YaST packages is via dependencies set in the .spec file of the YaST packages.
But in principle, YaST is a tool that can be used across distributions and there are people interested in this to happen. There are technical barriers to do releases independent of openSUSE (e.g. a lot of openSUSE-specific knowledge and behavior coded in YaST) as well as procedural. During past years, a lot of these non-technical issues has been addressed as we opened up the YaST development (re-licensing the code under GPL, opening up source control system and mailing lists, etc).
But still, there is one big thing left: YaST packages are released in concert with openSUSE. Yes, it is very convenient for openSUSE, but it makes it almost impossible to track the development during for people outside of our great distribution.
If one looks at the way the YaST packages are updated during the hotphase of an openSUSE release, the core parts of YaST (yast2-devtools, yast2-core, libyui, …) are rarely updated, they get a bug fix here and there. However, the distribution specific parts (yast2-pkg-bindings, yast2 common libraries, bootloader, storage, networking, …) get a fast flow of patch-level releases, typically several between openSUSE milestones.
Thus, the way forward I like the most right now is a compromise: a core YaST system should be released independently of the openSUSE release cycle while specific modules could keep their crescendo during openSUSE hot phase. How to do that?
For core YaST packages (a list to be defined) would be released independently of openSUSE and during hot phase, they would be handled the way other FOSS parts of openSUSE are – by patching the code in the package. The rest of the YaST, current practice would stay untouched.
There are clearly advantages – the YaST developers can do a proper release management of the core code and it is much more predictable how the core part of YaST will be released. On the other hand, people would need to be aware of the split.
However, I can imagine there is a lot of I did not realize. I’m definitely interested in comments about this topic.
Еще одна книга

Standards Institute British
The C Standard : Incorporating Technical Corrigendum 1
Если успеете запастись данной книгой на выходные, то поделитесь своими впечатлениями на тему "Мои английские выходные".
Интересная книга

Стивен Прата
Язык программирования C. Лекции и упражнения
В данной книге очень хорошо и подробно рассмотрен язык. Уделено внимание рассмотрению конкретных примеров. В принципе, эта книга может быть интересно разноуровневым специалистам. Написана известным человеком в данной области. Так что книга "на выходные" есть.
Использование функции _Exit
Для завершения программы без вызова обработчиков, зарегистрированных с помощью функции atexit, можно использовать функцию _Exit. Данная функция задекларирована следующим образом:
void _Exit(int).
В качестве параметра функция принимает код возврата, с которым программа и завершается.
Как я уже упоминал: функции-обработчики не вызываются. Рассмотрим пример кода:
int k=0;
void exit1(){
printf("At function exit1 %d\n",k++);
}
void exit2(){
printf("At function exit2 %d\n",k++);
}
void exit3(){
printf("At function exit3 %d\n",k++);
}
void exit4(){
printf("At function exit4 %d\n", k++);
}
typedef void (* Func_t)(void);
int main (int argc, const char * argv[]) {
Func_t arr[4]={exit1, exit2, exit3, exit4};
int i=0;
for(i=0;i<4;++i)
atexit(arr[i]);
for(i=0;i<10;++i)
if(i==5){
printf("%d",i);
_Exit(0);
}
printf("End of program");
return 0;
}
При выполнении данного кода произойдет следующее. При i==5 программа завершит свое выполнение путем вызова функции _Exit, при этом ни один из обработчиков вызван не будет. Результат выполнения приведен ниже:
[Session started at 2008-11-07 11:10:00 +0300.]
The Debugger has exited with status 0.
Использование функции exit
Первый вариант - это выход при помощи вызова функции exit, которая выглядит следующим образом:
void exit(int)
В качестве параметра в функцию нужно передать код возврата, с которым закончит свою работу программа.
При вызове функции программа завершает свою работу. При этом вызываются все функции, зарегистрированные с помощью функции atexit.
Пример использования:
int k=0;
void exit1(){
printf("At function exit1 %d\n",k++);
}
void exit2(){
printf("At function exit2 %d\n",k++);
}
void exit3(){
printf("At function exit3 %d\n",k++);
}
void exit4(){
printf("At function exit4 %d\n", k++);
}
Это функции - обработчики завершения программы.
typedef void (* Func_t)(void);
int main (int argc, const char * argv[]) {
Func_t arr[4]={exit1, exit2, exit3, exit4};
int i=0;
for(i=0;i<4;++i)
atexit(arr[i]);
for(i=0;i<10;++i)
if(i==5){
printf("%d",i);
exit(0);
}
printf("End of program");
}
При запуске данного кода получаем следующий результат:
5 // Печатается счетчик цикла i
At function exit4 0 // Результат выводится последним обработчиком
At function exit3 1 // Результат выводится предпоследним обработчиком
At function exit2 2 // и т.д.
At function exit1 3
Vacation
Released libgphoto2 2.4.3 in the meantime, polished up my camera page.
Spent the week working on a nice halloween party, role playing with friends, and lots of relaxing, also in a thermal bath. I also worked up libgphoto2, joining the Canon SDK developer program, and integrating some of the documented stuff into libgphoto2.
I'm going to GLUA TechSessions 08
I'll be talking about our magnific BugSquad, Patchsquad, Translators, Gnome Love, my involvment on OSS and Brasero.
Thanks to GLUA members for inviting me for this presentation.
Bootloader gets chattier
Since openSUSE 11.0. we have some basic speech support in our bootloader. This enables visually impaired people to use the bootloader as there is usually no other output device available at that time (BIOS doesn’t really support braille displays).
It uses the PC-speaker for output (which has the benefit that you don’t need specialized sound drivers for every hardware).
If you didn’t try it yet: press F9 at the boot screen.
I’ve reworked that a good deal in openSUSE 11.1 RC1 (2MB sound samples) and now it reads all menus and dialogs to you and spells all chars you enter in input dialogs (actually it speaks the char left from cursor).
The sound samples are pre-generated with espeak. But you are of course free to replace them with your own voice if you like that more. 