Thursday, July 3, 2008

IPv6 - network, applications, ...

As I already wrote, there is support in YaST network module to configure IPv6 addresses (one or more), possibly mixed with IPv4:





But what is really new - support to configure apache2 server for IPv6 environment:

Setup on which addresses apache listen


Detail of virtual host (based on IP)


And test that it works:


This is in version yast2-http-server-2.17.2

Sunday, June 22, 2008

web UI for YaST

With python-bindings we can slowly move our wishes from impossible into possible group.One of our wishes is web UI. Today before lunch I did some research, and it works!

Fist of all enable mod_python in apache2, then configure Handler for Python.

Then write index.py with this code:
def getDescription():
 import ycp
  ycp.import_module('Lan')
  ycp.import_module('LanItems')
  ycp.Lan.Read(ycp.Term('nocache'))
  interfaces=ycp.LanItems.Overview()
  descr="<table>"
  for interface in interfaces:
   descr+="<tr><td>"+interface['table_descr'][0]+"</td>"
   descr+="<td>"+interface['rich_descr']+"</td></tr>"
   descr+="</table>"
   return descr

def index():
  s = """\
<html>
<body>
"""+getDescription()+"""
</body>
</html>
"""
  return s


It needs some hack - disable check if YaST code is running as root. I commented one line in Lan::Read() function. And result is here:

PRO/Wireless 3945ABG Network ConnectionPRO/Wireless 3945ABG Network Connection (Not connected)
MAC : 00:18:de:64:b8:0d

The device is not configured. Press Edit
to configure.


82573L Gigabit Ethernet Controller82573L Gigabit Ethernet Controller
MAC : 00:16:41:aa:74:56
  • Device Name: eth0
  • Started automatically on cable connection
  • IP address assigned using DHCP


It's just summary of network devices configuration. I know it's very simple example, but as I wrote - the plan was to do it before lunch, not instead of ;-)

Wednesday, June 18, 2008

IPv6, prefixlen

This story started when I discussed with our openSUSE member Marek Stopka and he told me that he is running IPv6 network but because of really bad support in YaST2 he needs to configure that manually.
Oh, what a shame! So we made a deal that he'll test my patches and I'll try to implement initial support.
So now we have initial support for IPv6 in YaST. Initial means that you're able to configure "primary" address IPv6 type. Nothing more, nothing less.
Because of this I add new parameter to configure prefixlen (in v6 there is no netmask as we know from v4). In UI you can configure prefix with a little trick - instead of 255.255.255.0 you can write "/24".

Ok, example of CLI:


linux-1pi7:~ # yast lan list
0 79c970 [PCnet32 LANCE], Not configured

1 79c970 [PCnet32 LANCE], Not configured

linux-1pi7:~ # yast lan edit id=0 ip=2001:15c0:668e::5 prefix=48
Ethernet Network Card
MAC : 08:00:27:80:b5:07
Device Name: eth1
Started automatically at boot
IP address: 2001:15c0:668e::5/48


linux-1pi7:~ # yast lan list
0 Ethernet Network Card, 2001:15c0:668e::5

1 79c970 [PCnet32 LANCE], Not configured

linux-1pi7:~ #


And some screenshots from ncurses UI:






Of course there's still much work to implement full support, routing, network services support, test all possible cases, AutoYaST, etc.
Implemented in yast2-network-2.17.1

Saturday, June 14, 2008

running YaST in debugger

First of all - I like Python.
Second - we have some prototype for mysql-server configuration written in Python I never tried before.

So I check-in code from subversion and try to run. Unfortunately it exits with some errors like "couldn't initialize UI". So I open the code in Eric - great Python debugger.

With breakpoints, globals and locals variables dispatcher it was really easy to find problematic places in code. Also possibility to write code interactively into interpreter is very helpful.
And finally module runs ;-)


Sorry, video is pretty slow - probably ati driver problem ;-(

Monday, June 9, 2008

http-server, dns-server integration

Actually this is not new feature, but because I re-tested that functionality today, I found it's good time to describe it in a few words.
Integration in this case means that you can configure DNS server records while adding new virtual hosts for apache HTTP server (with YaST, both on the same machine)

yast2-dns-server

First - DNS server must be installed, enabled and running:



Then add new zone (it must be type "Master"):



yast2-http-server

Then in yast2-http-server module add new virtual host. Server name belongs into dns zone "example.com" we configured in yast2-dns-server:

Virtual Host ID must be valid IP address


And here we can see there is button "Add to Zone" which in this case will add record www.example.com with IP address 10.20.30.40 into example.com zone



yast2-dns-server

When you open YaST DNS server again, you can see that new record for "example.com" zone was correctly added.

Thursday, June 5, 2008

Command Line Interface

This is probably nothing new but for those who don't know yet ...

You can run every YaST2 module in Qt, GTK or Ncurses UI. Some of that modules has implemented also command line interface. Just type: yast module_name help and you will see something like this:


linux:/home/mzugec # yast lan help

YaST Configuration Module lan
------------------------------

Network Card Configuration

Basic Syntax:
yast2 lan interactive
yast2 lan [verbose] [options]
yast2 lan help
yast2 lan longhelp
yast2 lan xmlhelp
yast2 lan help

Commands:
add Add a network card
delete Delete a network card
edit Change existing configuration
list Display configuration summary
show Display configuration summary

Run 'yast2 lan help' for a list of available options.


In case module doesn't support CLI, output is like:

linux:/home/mzugec # yast dsl help
There is no user interface available for this module.



Option interactive is useful when you want to do several actions, because read and write are done only one. Difference between using ip or ifconfig commands and yast lan is that yast lan works with configurations, not only current status.

Ok, so let's start with example. List all network cards:

linux:/home/mzugec # yast lan list
0 Ethernet Network Card, DHCP

1 79c970 [PCnet32 LANCE], Not configured

2 79c970 [PCnet32 LANCE], DHCP

3 Ethernet Network Card, 10.20.30.40


See configuration of last device:

linux:/home/mzugec # yast lan show id=3
Ethernet Network Card
MAC : 08:00:27:d9:db:b7
Device Name: eth0
Started automatically at boot
IP address: 10.20.30.40, subnet mask 255.255.255.0


Change configuration to DHCP :

linux:/home/mzugec # yast lan edit id=3 bootproto=dhcp
Device Type : eth
Bootproto : dhcp
IP Address :
Mask :


Done, that was easy ;-)

Bye,
Michal

Monday, May 26, 2008

Research of possibility: running YaST anywhere

Hello !

One week ago I installed Fedora Core 9 distribution. But (experienced from openSUSE) there was something I missed : YaST and zypper. So I decide to port them to Fedora (and maybe to other distributons later).

I did something similar a long time ago (it was FC5) but now it seems much easier. Our developers makes UI part independent from ycp language. So I just compile libyui, libyui-bindings, qt, ncurses and was able to run example code in both frontends. With GTK there is still problem that is not cleaned from libzypp dependency.

Then I compiled libzypp and zypper. Then I add installation source - local CD-rom:

zypper ar cd:///?devices=/dev/sr0 CD

And it works perfectly!

Compared to yum is zypper much, much faster. Just for an example (I turn autorefresh on, by default is autorefresh disabled):

[root@dhcp24 ~]# time zypper se rpmlint
Reading installed packages...

S | Name | Summary | Type
--+---------+-------------------------------------------------+--------
| rpmlint | Tool for checking common errors in RPM packages | package

real 0m0.958s
user 0m0.308s
sys 0m0.482s
[root@dhcp24 ~]# time yum search rpmlint
Loaded plugins: refresh-packagekit
======================================== Matched: rpmlint =========================================
rpmlint.noarch : Tool for checking common errors in RPM packages

real 0m2.765s
user 0m1.826s
sys 0m0.788s

With autorefresh disabled search time is even better:

[root@dhcp24 ~]# time zypper se rpmlint
Reading installed packages...

S | Name | Summary | Type
--+---------+-------------------------------------------------+--------
| rpmlint | Tool for checking common errors in RPM packages | package

real 0m0.717s
user 0m0.289s
sys 0m0.362s


Note: I don't wan't to say which tool is better (everybody knows ;-)). Just that you can use zypper on the same installation source like yum. There are some requests on that porting from RH/Fedora users. And also some other people are thinking about this.

Ok, after that I compiled yast2-core, yast2-devtools, yast2-testsuite, yast2-perl-bindings, yast2-ycp-ui-bindings, yast2, yast2-pkg-bindings (maybe I forgot something, sorry). Finally mine package yast2-iscsi-client. Some patch because of distribution differences ... and the result is:



It works! ;-)
So we definitely can run YaST and its configuration modules on Fedora Core 9!

Ok, some work is needed to be done: create Build Service project and as a first step some distribution based patches. After that we should find some system how to use different backends for different distributions (like NetworkManager does). But this is something for another post ...

Good night,
Michal