Kind of my extended memory with thoughts mostly on Linux and related technologies. You might also find some other stuff, a bit of SF, astronomy as well as old (quantum) chemistry posts.
Search This Blog
Thursday, November 14, 2013
e17 and stable Debian
If you are interested in using e17 with Debian Wheezy, the best way is to use package provided by John Holland at http://www.vin-dit.org/.
Friday, October 04, 2013
Number of threads per state
awk with ps creates powerful Linux combo. For example there is one, or more, multi-threaded application on your system. You would like to know what states all those threads are. Standard ps show information about processes, but you can learn more about threads with "-L" switch. You probably hit another issue - number of threads, you don't want to analyse, let say, 300 lines. Lucky, awk is very good for such tasks. Following 'one-liner' shows number of threads and processes per state (running, sleeping, uninterrupted sleep), every 5 seconds.
Such output can be valuable extension to top command results. It shows instant changes to number of busy processes, which affects system load.
while [ 1 ];
do
ps -Leo pid,state,args| \
awk '{state[$2]++} \
END{ for (j in state) {printf "%s - %d\n", j, state[j]}}';
echo "---";
sleep 5;
doneFirst line ensures that command runs forever. ps uses '-e' (all processes), '-L' (include threads), '-o' (user specify output). There are 3 lines in ps output: PID, state and command arguments. (These arguments are useful for my other commands. In this case you can leave only 'state', but you has to modify awk command). Next awk takes every line and counts each state using state array with argument equal to state representation (i.e.: S for sleep, D for uninterrupted sleep, R for running). At the end of execution it prints each argument with it value. After that script displays '---' and waits 5 seconds.
Such output can be valuable extension to top command results. It shows instant changes to number of busy processes, which affects system load.
Saturday, May 25, 2013
CPU affinity, interrupts and old kernel bug
This is an old story and AFAIK were address ages ago in Linux kernel, but there are still plenty of CentOS/RHEL 5 running and you still might be hit by the problem with kernel not properly balancing interrupts from hardware, so the that below list of the links my be helpful. In bug report network card are mentioned, but it might affect other components (i.e. raid controllers from HP - cciss drivers).
If you would like to learn more there is a set of good links:
If you would like to learn more there is a set of good links:
- https://bugzilla.redhat.com/show_bug.cgi?id=432451
- http://docs.oracle.com/cd/E24290_01/coh.371/e22838/tune_perftune.htm
- http://www.alexonlinux.com/smp-affinity-and-proper-interrupt-handling-in-linux
- http://www.alexonlinux.com/msi-x-the-right-way-to-spread-interrupt-load
- http://www.alexonlinux.com/why-interrupt-affinity-with-multiple-cores-is-not-such-a-good-thing
Saturday, April 20, 2013
Regexp Groups in Python
Let say that we have a string consist from a numeric continent code (i.e. 1 for Europe) , followed by a country code (i.e. 44 for UK) and ended with a region code made in similar manner (i.e. Cambridge equal 65). A continent and a country are preceded with the letter C and a location with the letter L.
So we have the string C1C44L65 and we need to know the continent, counter and region codes, but numbers might have different length (i.e. 5, but also 55 or 555) so we cannot just grab selected characters from a string, but in Python we can use following regular expression to save all that information into "groups" for further use, in example in an mathematical operations (as integers).
info = re.search(r"^C(?P[^\d]+)C(?P\d+)L(?P\d+)$", full_id)
continent = int(info.group("continent"))
country = int(info.group("country"))
region = int(info.group("region"))
So we have the string C1C44L65 and we need to know the continent, counter and region codes, but numbers might have different length (i.e. 5, but also 55 or 555) so we cannot just grab selected characters from a string, but in Python we can use following regular expression to save all that information into "groups" for further use, in example in an mathematical operations (as integers).
info = re.search(r"^C(?P
continent = int(info.group("continent"))
country = int(info.group("country"))
region = int(info.group("region"))
Friday, April 19, 2013
Ubuntu and mix of NFS, NIS and autofs in post from past
Some time ago I had a problem with autofs, NIS and NFS during Ubuntu start. As far as I remember autofs was responsible for serving users home directories, define with NIS and provided from remote location with NFS. The problem that autofs started before network and NIS, so home directories weren't ready.
When I started look into the problem found that small change to autofs.conf should resolve the situation. I didn't deploy the fix on big scale (I were using CRUX on my desktop), but saved the patch to blogger and today finally found some time to share it. Maybe it will be useful for anyone.
root@test-upstart:/etc/init# diff -u autofs.conf ~wawrzekn/autofs.conf --- autofs.conf2010-08-17 11:34:47.000000000 +0100 +++ /home/wawrzekn/autofs.conf2011-02-06 12:19:48.678663000 +0000 @@ -10,6 +10,15 @@ respawn pre-start script +while : +do +ypwhich +if [ $? = 0 ] +then +break +fi +sleep 4 +done if [ -f /etc/default/autofs ]; then . /etc/default/autofs fi
Monday, February 25, 2013
PS2 and friends
This post won't be about PlayStation 2, but about my (not so) recent problem with the UNIX shell prompt.
I had a problem with prompt on some remote Linux system. Everything looked fine until the command (with arguments) fitted one line. I was using iTerm2 on MacOSX with full screen mode, so line could be long, but anyway it started to be very annoying. When I tried to move cursor back or jump to the beginning of the line it could end up in the middle of existing text.
I spent a lot of time trying to debug problem. First I tried to find something wrong with my iTerm2 settings, but could not find a thing. Next I started to play with tput (see link 1 and 2). For a moment believed that I had broken my PS2 setting (see 3) and finally, after reading link 4, figured out that I hadn't properly escaped non printing character in colour settings. My 'remote' bash prompt looks currently as printer below and you can see a lot of \[ before not printing characters and \] after them.
\[\e[32m\]\h \[\e[0m\]: \[\e[33m\]\w \[\e[0m\]#>
Reading:
Thursday, November 22, 2012
Fabric as a python module
Introduction
Fabric is a powerful tool to automate running the same command on many remote server. It is written in python, but authors concentrate on usage as command line tool rather as a python module.There are some documentation how to do this. You can also find some examples in the internet, but examples never too much, so below another one.
Scenario
We would like to run a command on each of our webservers, ideally in batches, but in a specific order. Our webserver are grouped in 'cells'. Each cell consist of 3 servers in different 'zones' (zone are called a, b, and c). For convince there is following convention of naming servers: "role-cell#-zone" i.e. web-04-a. To make things more interesting some cells are missing, so we cannot make simple loop. On the other hand, there is a service holding various servers information in json file accessible over http. Additionally, we have a python module called 'server' to locally access those information from our workstation. In the 'server' module we have class 'webserver' to deal with webservers. One of its method is 'get_all_server'. It return a list of all webserver.Script
Servers
First we create the list of all servers using our external tool.from servers import webserver
allservers = webserver.get_all_severs()
The order mentioned above is to run first all 'c' boxes next 'b' and finally 'a'. To achieve that, let creates 3 lists (in a function). Nothing magic, a bit of 're'.
def make_lists(servers):
import re # if not imported in the main part
wa = []
wb = []
wc = []
for server in servers:
if re.search('web-\d+-a', server):
wa.append(server)
elif re.search('web-\d+-b', server):
wb.append(server)
elif re.search('web-\d+-c', server):
wc.append(server)
separation = (wa, wb, wc)
return separation
Fabric
So now we can start to use fabric. Let import necessary pieces:
# Fabric part
from fabric.api import *
from fabric.network import disconnect_allset up environment
env.skip_bad_hosts = True
env.warn_only = True
env.parallel = True
and finally call the function
:
@parallel(pool_size=10)
def run_remotely():
with hide('running', 'status'):
sudo(task)
Main part
Prepare the lists of servers (see paragraph servers): lists = make_lists(get_servers())Get the command to run. I don't remember why, but writing my script decided not to pass variable to 'fabric; function, but use global variable.
global task
task = raw_input("Type/paste command to run >")Now run the provided command in selected order:
for i in [3, 2, 1]:
execute (run_remotely, hosts=lists[i-1])
For any case disconnect all connection. (It might be not necessary).
disconnect_all
Wednesday, November 21, 2012
My way for binding ssh-agent with zshell
The following lines I put into my .zshrc might not be very pretty, but it is short, seems to work, and I don't need to
use any of the graphical tools to ssh somewhere with my key (with
passphrase). So it works fine with my zshell and E17.
SSHPID=`ps ax|grep -c "[s]sh-agent"`
if (( $SSHPID == 0 ))
then
ssh-agent > ~/.ssh-env
source ~/.ssh-env
ssh-add
else
source ~/.ssh-env
fi
SSHPID=`ps ax|grep -c "[s]sh-agent"`
if (( $SSHPID == 0 ))
then
ssh-agent > ~/.ssh-env
source ~/.ssh-env
ssh-add
else
source ~/.ssh-env
fi
Sunday, February 05, 2012
CakePHP tutorials on TuxRadar
LinuxFormat presented a some time ago interesting tutorials to CakePHP. What even more interesting their share materials on TuxRadar webpage. The only problem I found is lack of some kind of list of contents, so I made one:
BTW. IF you hit this page you might be also interested in Practical PHP Programing tutorial from the same page.
- CakePHP Tutorial: Build Web Apps Faster
- CakePHP Tutorial: Storage, Baking and Slugs
- CakePHP Tutorial: Build a file sharing application
- CakePHP Tutorial: Build a bookmark site
BTW. IF you hit this page you might be also interested in Practical PHP Programing tutorial from the same page.
List of VMs on XenServer (with UUIDs)
Xen XE command is a very powerful tool, especially if you bind it with other UNIX tools such as awk. Let say we need a map of vm uuids and theirs names. We can use an output from the vm-list command and parse if with awk to get desire result.
The script first save the fifth column from a line having uuid string in it into the variable uuid. Next it saves all columns, after the third one, from line having name-label into variable vmname. Finally it prints both variables.
The exemplary output:
We can modify our command to prepare a list of all host with vms bind to them. This time we use xe vm-list with params=all option. The scripts searches for lines with the name-label and saves a name (third column). Next it looks for lines with the word affinity and a uuid (we know that UUID have to start from a hexadecimal number) and prints a saved name.
The output might looks similar to:
You might wonder why the list is so short, but we have the list of machine enforce to start from a given host (affinity to a given UUID). If you have machine on share storage allowed to flow between machine you should get very short list indeed.
xe vm-list | \
awk '{if ( $0 ~ /uuid/) {uuid=$5} if ($0 ~ /name-label/) \
{$1=$2=$3="";vmname=$0; printf "%s - %s\n", vmname, uuid}}'
The script first save the fifth column from a line having uuid string in it into the variable uuid. Next it saves all columns, after the third one, from line having name-label into variable vmname. Finally it prints both variables.
The exemplary output:
ukweb2 - fbca0851-35de-2963-bf0c-7980f3c0d96f nagios - b741def2-14cc-def4-f8ba-ff0d3ed741d9 ukmail1 - 343c8f93-e4db-d0df-bc30-7544fcd6f14e jira - ecc3241f-ac14-0398-4e44-ba96cd1d51d2 dodb-02 - 7f223172-e43e-a200-6dc6-b108ce4f9166 RTST-Witness Server - 3c236b0a-209f-6ac9-6d46-b14f7678bfa6 hub-01 - 60ef767c-9b87-edf8-9f13-af2185e656cd ukweb1 - 6e0e4622-ddfe-0db8-a128-f432e05565cb dns2 - d65e40d4-ea21-1cbf-cc86-9f522f5e04ef ixchariot - 73f78129-86db-fd9f-81b4-85768eeee487
We can modify our command to prepare a list of all host with vms bind to them. This time we use xe vm-list with params=all option. The scripts searches for lines with the name-label and saves a name (third column). Next it looks for lines with the word affinity and a uuid (we know that UUID have to start from a hexadecimal number) and prints a saved name.
xe vm-list params=all| \
awk '{if ( $0 ~ /name-label/) {$1=$2=$3=""; vmname=$0} \
if ($0 ~ /affinity.*\:\ [a-e,0-9]/) {host=$4; printf "%s \n", vmname}}'
The output might looks similar to:
Control domain on host: p1-m4 Control domain on host: p1-m2 dodb-02 ukweb5 Control domain on host: p1-m3 Control domain on host: p1-m1
You might wonder why the list is so short, but we have the list of machine enforce to start from a given host (affinity to a given UUID). If you have machine on share storage allowed to flow between machine you should get very short list indeed.
Tuesday, January 24, 2012
Crux and Mercurial view
I've spent quite some time trying to make hg view to work on my Crux. All time I got error message:
I could not understand what going on. I enable hgk in /etc/mercurial/hgrc or ~/.hgrc. I specified the full path to hgk.py in there as well. I even modify default python path. It didn't work.
After some time of googling, changing various variables I found somewhere (probably on Mercurial page), that some Linux distro missing hgk even if they provide hgk.py. Now I know that Crux is one of them. I copied hgk from contrib directory in source package to /usr/bin and now hg view works fine.
hg view /bin/sh: hgk: command not found
I could not understand what going on. I enable hgk in /etc/mercurial/hgrc or ~/.hgrc. I specified the full path to hgk.py in there as well. I even modify default python path. It didn't work.
After some time of googling, changing various variables I found somewhere (probably on Mercurial page), that some Linux distro missing hgk even if they provide hgk.py. Now I know that Crux is one of them. I copied hgk from contrib directory in source package to /usr/bin and now hg view works fine.
Saturday, January 14, 2012
Aptitude advance usage
Some time ago on the Debian mailing list there was a discussion (there
are many discussion over there ;). That one was extremely interesting,
not because of the problem (I don't remember it), but because of the Jörg-Volker. Peetz mail with information on advance aptitude usage:
"I would try the following:
- to find out what is installed
aptitude search '~iapache'
- why it is installed
aptitude why apache2-mpm-worker
maybe this one is only recommended by another package
- and what depends on this package
aptitude search '~i~Dapache2-mpm-worker'
- finally, see what would happen, if it is removed:
aptitude -s purge apache2-mpm-worker"
In the same thread Bernd Semler suggested following command:
apt-cache rdepends $packagename
The original thread can be found here: http://lists.debian.org/debian-user/2011/10/msg01472.html
"I would try the following:
- to find out what is installed
aptitude search '~iapache'
- why it is installed
aptitude why apache2-mpm-worker
maybe this one is only recommended by another package
- and what depends on this package
aptitude search '~i~Dapache2-mpm-worker'
- finally, see what would happen, if it is removed:
aptitude -s purge apache2-mpm-worker"
In the same thread Bernd Semler suggested following command:
apt-cache rdepends $packagename
The original thread can be found here: http://lists.debian.org/debian-user/2011/10/msg01472.html
Monday, January 09, 2012
XenDebian.py to install Debian on XenServer/XCP
Recently, I've needed to install many Debian VMs onto XenServers and, of course, wanted to automate it. One of my colleagues pointed that rather use existing tools like Cobbler I should take opportunity of working with world leading XenAPI developers and learnt it by writing some code. I took that advice and started to write a python script.
During that I decided that I could improve XenAPI documentation. I spent some extra time on my program and tried to write the code clear and with as many comments as possible, so other can learn from it and reuse it. I hoped to write even more documentation (some tutorial) based on my experiences, unfortunately I haven't had enough time.
Please find short XenDebian.py documentation on Xen wiki:
http://wiki.xen.org/wiki/XenDebian.py
and code on GitHub:
https://github.com/wawrzek/XenDebian
The script is called XenDebian, but with minor modification (new preseed file and change distro name in few places) you should be able to use it with Ubuntu. With a few more modification it should works for any distribution.
Finally, thanks to Project Kronos you would be soon able to install use XenDebian to install many Debian on Debian!
During that I decided that I could improve XenAPI documentation. I spent some extra time on my program and tried to write the code clear and with as many comments as possible, so other can learn from it and reuse it. I hoped to write even more documentation (some tutorial) based on my experiences, unfortunately I haven't had enough time.
Please find short XenDebian.py documentation on Xen wiki:
http://wiki.xen.org/wiki/XenDebian.py
and code on GitHub:
https://github.com/wawrzek/XenDebian
The script is called XenDebian, but with minor modification (new preseed file and change distro name in few places) you should be able to use it with Ubuntu. With a few more modification it should works for any distribution.
Finally, thanks to Project Kronos you would be soon able to install use XenDebian to install many Debian on Debian!
Wednesday, January 04, 2012
xe-patch
Recently I wrote a very small script to apply XenServer patches from command line.
To use if first you need to download a patch (you might try to find any new patch here), and next use the script:
./xe-patch hotfix.zip
#!/bin/bash unzip $1 filename=`basename $1 .zip`.xsupdate echo "Applying $filename" xe patch-pool-apply uuid=`xe patch-upload file-name=$filename`
To use if first you need to download a patch (you might try to find any new patch here), and next use the script:
./xe-patch hotfix.zip
Thursday, December 29, 2011
The power of find - exec and friends (grep, sed)
This is quite old post. I started to write it in October 2010, but could not properly polish it for a long time.
Today I would like to present an example of usage of find (and grep) rooted in Crux. Let say that I want to find all packages in version 20100511 (this was true scenario when I wanted to update e17 related ports). Translating into less Crux specific language it means that I had to find all Pkgfile files (simple find), which had string 20100511 (simple grep). I needed only file names not a matching string so I used -l option for grep.
In UNIX world there are always more than one way of doing things and in our scenario the find -exec can be replace with a separate command xargs. Xargs might be very useful in many cases because can be use to create unix command from standard input. Using xargs rather then find -exec my first example would be:
Today I would like to present an example of usage of find (and grep) rooted in Crux. Let say that I want to find all packages in version 20100511 (this was true scenario when I wanted to update e17 related ports). Translating into less Crux specific language it means that I had to find all Pkgfile files (simple find), which had string 20100511 (simple grep). I needed only file names not a matching string so I used -l option for grep.
find . -name Pkgfile -exec grep -l 20100511 {} \;
I not only needed to find all old files but to updated them as well (to version 1.0.0.beta that time). I used the same find but exchanged grep to sed (with option -i for "in place").
find . -name Pkgfile -exec sed -i 's/20100511/1.0.0.beta/ {} \;
Let push our example one step further. I wanted to find dependence for packages, therefore I ran following command.
grep -i depen `find . -name Pkgfile -exec grep -l beta {} \;
What used previous command to create a list of files to hunted through for word beta. (I wasn't sure if word "dependence" begun lower or upper case so used option -i for --ignore-case).
In UNIX world there are always more than one way of doing things and in our scenario the find -exec can be replace with a separate command xargs. Xargs might be very useful in many cases because can be use to create unix command from standard input. Using xargs rather then find -exec my first example would be:
find . -name Pkgfile | xargs grep -l beta $1
Let use xargs for another task related to above example. In my scenario I had not only to update the version, but also to change the sources of the packages. To do that I used find, xargs and sed in a for loop.
for file in `find . -name Pkgfile | xargs grep -l beta $1 2&> /dev/null` ; \ do \ sed -i 's/pitillo.mine.nu\/crux\/distfiles/download.enlightenment.org\/releases/' $file; \ done
The above command might be one liner, but can be paste line by line. It used the command from the previous example to create the $file array consist of names of files with word "beta". Elements from $file were use as input for sed command.
Wednesday, December 21, 2011
Mount LVM from domU in dom0
Mounting logical volumes (LVM) from domX (guest) within dom0 (XenServer) is very not recommender and suggested. But sometimes it might be the only options, and it's cool hacker (hacker in good old meaning, not cracker) trick. So to mount your volume you should take following steps:
- xe vm-disk-list vm=test4 - list disk of the VM.
- xe vm-list - find info (UUID) about dom0.
- xe vbd-create device=xvda unpluggable=true vdi-uuid=79a7a556-a6ba-48cf-8c82-30fa5bb9597c vm-uuid=36895434-e6d7-4fea-8271-d5477ca23c6d - create unpluggable VBD (xvda) with disk (uuid from point 1) on dom0 (uuid from point 2).
- xe vbd-plug uuid=0a4151b6-2b59-2fdb-c0a9-492520a8d52c - plug created vbd.
- mount /dev/xvda1 /mnt - mount disk (any 'physical partition').
- vi /etc/lvm/lvm.conf - if you need anything on LVM you have to edit lvm.conf
- vgchange -a y test4 - activate new vg.
- mount /dev/test4/root /test/mnt - mount partition.
# Ignore /dev/xvd* devices to prevent deadlocking when live-snapshotting # dom0-attached LVHD VDIs #filter = "r|/dev/xvd.|","r|/dev/VG_Xen.*/LV.*|"
Labels:
linux,
shell,
virtualization,
xe,
XenServer
Monday, November 28, 2011
XenServer, xe and more greping
In my last post I described how you can use grep to extend listing of XenServer parameters. Continuing this thread today, I show how to get values of specific parametes, let say memory.
You can get memory using following command, but I bet it's not you expect.
More interesting values you can get using params=all. The problem is that you will get hundreds of other values too. This is not helpful, but of course grep can help us:
It's not so useful yet, because we have only memory related value, but we don't know relation between them and VMs. Luckily, we can very easily extend our grep.
Now we know that the at10 has 0.5GB, the at11 1GB and the dom0 might have between 386 and 771 MB.
Summary
Of course similar construction in grep query might be use for other variables.E.g. to have the list of live VMs try:
You can get memory using following command, but I bet it's not you expect.
# xe vm-list params=memory memory (MRO) : memory (MRO) :
More interesting values you can get using params=all. The problem is that you will get hundreds of other values too. This is not helpful, but of course grep can help us:
# xe vm-list params=all| grep memory
memory-actual ( RO): 536870912
memory-target ( RO):
memory-overhead ( RO): 6291456
memory-static-max ( RW): 536870912
memory-dynamic-max ( RW): 536870912
memory-dynamic-min ( RW): 536870912
memory-static-min ( RW): 536870912
recommendations ( RO):
memory (MRO):
memory-actual ( RO): 500170752
memory-target ( RO):
memory-overhead ( RO): 15728640
memory-static-max ( RW): 789839872
memory-dynamic-max ( RW): 500170752
memory-dynamic-min ( RW): 500170752
memory-static-min ( RW): 395313152
memory (MRO):
memory-actual ( RO): 1073741824
memory-target ( RO):
memory-overhead ( RO): 10485760
memory-static-max ( RW): 1073741824
memory-dynamic-max ( RW): 1073741824
memory-dynamic-min ( RW): 1073741824
memory-static-min ( RW): 1073741824
recommendations ( RO):
memory (MRO):
It's not so useful yet, because we have only memory related value, but we don't know relation between them and VMs. Luckily, we can very easily extend our grep.
# xe vm-list params=all| grep "label\|memory"
name-label ( RW): at10
memory-actual ( RO): 536870912
memory-target ( RO):
memory-overhead ( RO): 6291456
memory-static-max ( RW): 536870912
memory-dynamic-max ( RW): 536870912
memory-dynamic-min ( RW): 536870912
memory-static-min ( RW): 536870912
recommendations ( RO):
memory (MRO):
name-label ( RW): Control domain on host: dt33
memory-actual ( RO): 500170752
memory-target ( RO):
memory-overhead ( RO): 15728640
memory-static-max ( RW): 789839872
memory-dynamic-max ( RW): 500170752
memory-dynamic-min ( RW): 500170752
memory-static-min ( RW): 395313152
memory (MRO):
name-label ( RW): at11
memory-actual ( RO): 1073741824
memory-target ( RO):
memory-overhead ( RO): 10485760
memory-static-max ( RW): 1073741824
memory-dynamic-max ( RW): 1073741824
memory-dynamic-min ( RW): 1073741824
memory-static-min ( RW): 1073741824
recommendations ( RO):
memory (MRO):
Now we know that the at10 has 0.5GB, the at11 1GB and the dom0 might have between 386 and 771 MB.
Summary
Of course similar construction in grep query might be use for other variables.E.g. to have the list of live VMs try:
xe vm-list params=all| grep -i -E '(label|\s+live)'
Friday, November 25, 2011
XenServer CLI and grep by name
One of the annoying thing in XenServer command line tool (xe) is lack of regexp/wildcards in filtering vm (and other objects) by name. However, there is easy way to work around thanks to grep. Standard output have 3 lines per vm, with one line before (-B 1 in grep) and one after (-A 1) line with name. So you can use following line to find information about VM with given name:
You can also extend this command to get uuid of requested vm:
What can be use i.e. to take the snapshot:
xe vm-list | grep -B 1 -A 1 your-vm-name
You can also extend this command to get uuid of requested vm:
xe vm-list | grep -B 1 your-vm-name| awk '/uuid/ {print $5}'
What can be use i.e. to take the snapshot:
vm-uuid=`xe vm-list | grep -B 1 dowa| awk '/uuid/ {print $5}'`
xe vm-clone name-name-label='dowa-01-clone' uuid=$vm-uuid
Wednesday, October 12, 2011
Debian, DHCP and IPv6
It was big surprise for that in Debian /etc/network/interface you cannot us
iface ethX inet6 dhcp
option to use DHCPv6 client to set IP address. If you need IPv6 address from DHCP server, you should can either define interface manually:
iface eth1 inet6 manual up /sbin/ip link set eth1 up post-up /etc/init.d/wide-dhcpv6-client start pre-down /etc/init.d/wide-dhcpv6-client stop down /sbin/ip link set eth1 downor plug it into IPv4 definition (i.e. inet dhcp).
inet dhcpiface eth1 inet dhcp post-up /etc/init.d/wide-dhcpv6-client start pre-down /etc/init.d/wide-dhcpv6-client stop
Wednesday, June 01, 2011
Another awk example
This time how to print all columns others than first one, but only for lines begins with i.e. exim4-config.
Oh, I obtained the list using:
hub-02:~# awk '/^exim4-config/ {$1=""; print }' test2
And I got:
exim4/dc_smarthost string smtp.uk exim4/dc_relay_domains string exim4/dc_relay_nets string exim4/mailname string hub-01.uk exim4/dc_localdelivery select mbox format in /var/mail/ exim4/dc_local_interfaces string 127.0.0.1 exim4/dc_minimaldns boolean false exim4/dc_other_hostnames string exim4/dc_eximconfig_configtype select mail sent by smarthost; received via SMTP or fetchmail exim4/no_config boolean true exim4/hide_mailname boolean false exim4/dc_postmaster string toor exim4/dc_readhost string exim4/use_split_config boolean true
BTW. I need this list to filter responses used to configure Exim in Debian. And I need the answers to reuse them in pressed.
Oh, I obtained the list using:
debconf-get-selections --install > test2
Subscribe to:
Posts (Atom)