When you enable a bridge interface with brctl from bridge-utils you loose network connectivity for a short while. This means trouble if you use nfs root or something that needs to have network to load the next command, or acces other files or directories.
Here's what to do. Warning! Understand what you do. If you are working logged in remotely and it screws up, you'll have to reboot the machine, because it has lost its access to the nfs root file system!
Anyway, here we go:
We must create a small rootfs on a directory that is not nfsrooted such as a tmpfs (a ram-based file system), there is often one mounted already. Look for one with mount.
I have a tmpfs mounted at /run. I notice that it is mounted as 'noexec' which means that I can't run commands from it. To solve that, remount it with the exec option set.
Then make a root dir called /run/root for instance.
Then copy over /lib and /bin (we don't need all of it, but we're lazy, remember!).
Put the stuff we need to do in a script file in the temp root, and then execute it from a chroot with busybox (or sh if you have put everything you need into the chroot). Make sure that you actually have busybox.
Here is what I have in my script (https://gist.github.com/anonymous/5480567):
måndag 29 april 2013
fredag 15 mars 2013
Pure python sin
Pure python sin up to 6 decimals (nine degree Taylor expansion, no recursion, 11 mult, 1 div)
"""
f(x) = f(x)+f'(x)*x+f''(x)/2!*(x**2)+...
if f(x) = sin(x)
around 0 is
f(x) = sin(0)+cos(0)*x-sin(0)/2*x2-cos(0)/3!*x3+sin(0)/4!*x4+cos(0)/5!*x5+...
= x-x**3/6.+x**5/120.+...
"""
# constants
pi = 3.14159265358979
pi2 = pi / 2
k1 = 1. / (2 * 3)
k2 = 1. / (4 * 5)
k3 = 1. / (6 * 7)
k4 = 1. / (8 * 9)
def sin(x):
s = 1.0
if x < 0.0:
s = -s
x = -x
if x > pi2:
n = int(x / pi2)
x = x - pi2 * float(n)
if n & 1: x = pi2 - x
if n & 2: x = -x
x2 = x * x
return s*(x*(1.-k1*x2*(1.-k2*x2*(1.-k3*x2*(1.-k4*x2)))))
"""
f(x) = f(x)+f'(x)*x+f''(x)/2!*(x**2)+...
if f(x) = sin(x)
around 0 is
f(x) = sin(0)+cos(0)*x-sin(0)/2*x2-cos(0)/3!*x3+sin(0)/4!*x4+cos(0)/5!*x5+...
= x-x**3/6.+x**5/120.+...
"""
# constants
pi = 3.14159265358979
pi2 = pi / 2
k1 = 1. / (2 * 3)
k2 = 1. / (4 * 5)
k3 = 1. / (6 * 7)
k4 = 1. / (8 * 9)
def sin(x):
s = 1.0
if x < 0.0:
s = -s
x = -x
if x > pi2:
n = int(x / pi2)
x = x - pi2 * float(n)
if n & 1: x = pi2 - x
if n & 2: x = -x
x2 = x * x
return s*(x*(1.-k1*x2*(1.-k2*x2*(1.-k3*x2*(1.-k4*x2)))))
måndag 4 mars 2013
Set LC_ALL once and for all...
To get rid of the annoying messages in ubuntu complaining about things like
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
you should do
sudo locale-gen en_US.UTF-8
sudo dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
you should do
sudo locale-gen en_US.UTF-8
sudo dpkg-reconfigure locales
fredag 8 februari 2013
Install tiny webserver on archlinux
# pacman -S darkhttpd
# mkdir /var/httpd
# chmod a+rx /var/httpd
# echo > /var/httpd/start-server.sh \
'darkhttpd /var/httpd --log /var/log/httpd.log --uid daemon --chroot --daemon'
# chmod 0700 /var/httpd/start-server.sh
# echo Hello > index.html
# chmod a+r index.html
# /var/httpd/start-server.sh
torsdag 31 januari 2013
Multiple ipv6 addresses on an interface
To prevent being tracked on the intertubes, ipv6 has security extensions that, (if they are enabled via sysctl net.ipv6.conf.all somewhere), from time to time creates random a address, and expire the old ones for outgoing traffic. To see the addresses do
ip -6 addr
and look for temporary. The expired addresses (that still work) have the word "deprecated". If you get sick of seeing them, delete an address from an interface with
ip -6 addr del dev eth0
or delete all deprecated addresses like this
ip -6 addr | awk '/deprecated/ {print "ip -6 addr del " $2 " dev eth0"}' | sudo bash -s
ip -6 addr
and look for temporary. The expired addresses (that still work) have the word "deprecated". If you get sick of seeing them, delete an address from an interface with
ip -6 addr del
or delete all deprecated addresses like this
ip -6 addr | awk '/deprecated/ {print "ip -6 addr del " $2 " dev eth0"}' | sudo bash -s
Virtual X11 display
x11vnc -create -forever -localhost
-create launches Xvfb (on DISPLAY=:20 or something like that)
-forever enables reconnection
-localhost only listens to local connections, so you'll have to forward the port (5900+nr) for instance over ssh.
Then one may need a windowmanager too, for instance
DISPLAY=:10 fluxbox
You may put fluxbox in the .xinitrc file too.
-create launches Xvfb (on DISPLAY=:20 or something like that)
-forever enables reconnection
-localhost only listens to local connections, so you'll have to forward the port (5900+nr) for instance over ssh.
Then one may need a windowmanager too, for instance
DISPLAY=:10 fluxbox
You may put fluxbox in the .xinitrc file too.
torsdag 17 januari 2013
posting to xen-devel
example
git format-patch 73edc26b69803cdbce62513c7be8010c829e4274^..73edc26b69803cdbce62513c7be8010c829e4274
git send-email --in-reply-to '<1358428780 .13856.57.camel=".13856.57.camel" zakaz.uk.xensource.com="zakaz.uk.xensource.com">' --from lra@sics.se --to xen-devel@lists.xensource.com --smtp-server smtp.sics.se 0001-Set-register-values-and-comment-in-early-init_uart-t.patch1358428780>
tisdag 15 januari 2013
inplace quicksort in python
https://gist.github.com/4537928
def quicksort(l):
work = [(0,len(l)-1)]
while work:
(left,right) = work.pop()
if right < left:
continue
i_piv = left
piv = l[i_piv]
l0,r0 = left, right
while left < right:
while l[left] <= piv and left < right: left += 1
while l[right] > piv: right -= 1
if left < right: l[left], l[right] = l[right], l[left]
l[i_piv], l[right] = l[right], piv
work.append((l0,right-1))
work.append((right+1,r0))
Prenumerera på:
Inlägg (Atom)