Friday, September 2, 2016

Catching up

Hi, folks!

The last few months have been mostly a matter of making some small, steady progress. This blog is intended as my reference notes, so here's the notes:

1)
The tap stuff I wrote about seems to mostly be irrelevent. After adding a script[1] to /etc, when using qemu I'm able to just do:

-net nic -net tap

And the tap interface "just works".

Simh/vax seems to work too -somewhat. Still ironing that out.

2)
Qemu has the -saveconfig and -readconfig options. They save a hell of a lot of typing!

3)
I saved the following off of the debian/sparc page for the sake of reference:

As mentioned earlier, the Debian SPARC64 port only supports 64 bit SPARC processors which correspond to the following sun4 architectures / processors.

    sun4u
        SPARC64 VI
        SPARC64 VII
        SPARC64 VII+
        UltraSPARC I
        UltraSPARC II
        UltraSPARC III
        UltraSPARC IV
    sun4u1
        UltraSPARC II
    sun4us
        SPARC64V
        SPARC64V+
    sun4v
        SPARC T3
        SPARC T4
        SPARC T5
        SPARC T7
        SPARC64 X
        SPARC64 X+
        UltraSPARC T1
        UltraSPARC T2
        UltraSPARC T2+

The Debian SPARC64 port is stable on most machines using these architectures / processors, but not all of them. Kernel support for the hardware found in these machines is the biggest factor in whether a particular machine is supported or not.
That's really about it. PCem has made great progress, but because reasons I haven't played with it much.  Neozeed has compiled a version with networking for the latest version ...it doens't compile on Linux, and using it on wine is flaky.

I guess it's simh/qemu/virtualbox for now!

[1](/etc/qemu-ifup):
 #!/bin/sh
#
# Copyright IBM, Corp. 2010 
#
# Authors:
#  Anthony Liguori
#
# This work is licensed under the terms of the GNU GPL, version 2.  See
# the COPYING file in the top-level directory.

# Set to the name of your bridge
BRIDGE=br0

# Network information
NETWORK=192.168.53.0
NETMASK=255.255.255.0
GATEWAY=192.168.53.1
DHCPRANGE=192.168.53.2,192.168.53.254

# Optionally parameters to enable PXE support
TFTPROOT=
BOOTP=

do_brctl() {
    brctl "$@"
}

do_ifconfig() {
    ifconfig "$@"
}

do_dd() {
    dd "$@"
}

do_iptables_restore() {
    iptables-restore "$@"
}

do_dnsmasq() {
    dnsmasq "$@"
}

check_bridge() {
    if do_brctl show | grep "^$1" > /dev/null 2> /dev/null; then
    return 1
    else
    return 0
    fi
}

create_bridge() {
    do_brctl addbr "$1"
    do_brctl stp "$1" off
    do_brctl setfd "$1" 0
    do_ifconfig "$1" "$GATEWAY" netmask "$NETMASK" up
}

enable_ip_forward() {
    echo 1 | do_dd of=/proc/sys/net/ipv4/ip_forward > /dev/null
}

add_filter_rules() {
do_iptables_restore <# Generated by iptables-save v1.3.6 on Fri Aug 24 15:20:25 2007
*nat
:PREROUTING ACCEPT [61:9671]
:POSTROUTING ACCEPT [121:7499]
:OUTPUT ACCEPT [132:8691]
-A POSTROUTING -s $NETWORK/$NETMASK -j MASQUERADE
COMMIT
# Completed on Fri Aug 24 15:20:25 2007
# Generated by iptables-save v1.3.6 on Fri Aug 24 15:20:25 2007
*filter
:INPUT ACCEPT [1453:976046]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1605:194911]
-A INPUT -i $BRIDGE -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i $BRIDGE -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i $BRIDGE -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i $BRIDGE -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -i $1 -o $1 -j ACCEPT
-A FORWARD -s $NETWORK/$NETMASK -i $BRIDGE -j ACCEPT
-A FORWARD -d $NETWORK/$NETMASK -o $BRIDGE -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o $BRIDGE -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i $BRIDGE -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Fri Aug 24 15:20:25 2007
EOF
}

start_dnsmasq() {
    do_dnsmasq \
    --strict-order \
    --except-interface=lo \
    --interface=$BRIDGE \
    --listen-address=$GATEWAY \
    --bind-interfaces \
    --dhcp-range=$DHCPRANGE \
    --conf-file="" \
    --pid-file=/var/run/qemu-dnsmasq-$BRIDGE.pid \
    --dhcp-leasefile=/var/run/qemu-dnsmasq-$BRIDGE.leases \
    --dhcp-no-override \
    ${TFTPROOT:+"--enable-tftp"} \
    ${TFTPROOT:+"--tftp-root=$TFTPROOT"} \
    ${BOOTP:+"--dhcp-boot=$BOOTP"}
}

setup_bridge_nat() {
    if check_bridge "$1" ; then
    create_bridge "$1"
    enable_ip_forward
    add_filter_rules "$1"
    start_dnsmasq "$1"
    fi
}

setup_bridge_vlan() {
    if check_bridge "$1" ; then
    create_bridge "$1"
    start_dnsmasq "$1"
    fi
}

setup_bridge_nat "$BRIDGE"

if test "$1" ; then
    do_ifconfig "$1" 0.0.0.0 up
    do_brctl addif "$BRIDGE" "$1"
fi

Tuesday, January 19, 2016

updating netbsd-7 with kvm

KVM commandline (on host):
 screen -S qemu06 /usr/local/bin/qemu-system-x86_64 -enable-kvm -cpu host -smp 4,cores=4,maxcpus=8 -m 2048 -net nic,model=e1000 -net tap,ifname=tap5,script=no -hda /home/random/qemu/x86/n7cde/cde.vdi -nographic
====
build command (inside VM):
time ./build.sh -x -r -j4 release iso-image

=====
make iso-image started at:  Tue Jan 19 18:56:17 AKST 2016
make iso-image finished at: Tue Jan 19 18:57:22 AKST 2016
===> Successful make iso-image
===> build.sh ended:      Tue Jan 19 18:57:22 AKST 2016
===> Summary of results:
         build.sh command:    ./build.sh -x -r -j4 release iso-image
         build.sh started:    Tue Jan 19 17:11:58 AKST 2016
         NetBSD version:      7.0.0_PATCH
         MACHINE:             amd64
         MACHINE_ARCH:        x86_64
         Build platform:      NetBSD 7.0 amd64
         HOST_SH:             /bin/sh
         No $TOOLDIR/bin/nbmake, needs building.
         Bootstrapping nbmake
         MAKECONF file:       /etc/mk.conf
         TOOLDIR path:        /usr/src/obj/tooldir.NetBSD-7.0-amd64
         DESTDIR path:        /usr/src/obj/destdir.amd64
         RELEASEDIR path:     /usr/src/obj/releasedir
         Removing /usr/src/obj/tooldir.NetBSD-7.0-amd64
         Removing /usr/src/obj/destdir.amd64
         Created /usr/src/obj/tooldir.NetBSD-7.0-amd64/bin/nbmake
         Updated makewrapper: /usr/src/obj/tooldir.NetBSD-7.0-amd64/bin/nbmake-amd64  
         Successful make release
         Successful make iso-image
         build.sh ended:      Tue Jan 19 18:57:22 AKST 2016
===> .
     6324.10 real     12894.15 user      4787.03 sys

Sunday, January 17, 2016

Qemu bridging sorted

My original idea was to put a script in $HOME/bin which would start tap interfaces on demand.

That ran into snags when the echo 1 >/proc commands would give me permission errors.

Then I had the idea -make everything permanent and throw it all into /etc/rc.local.

Not the most elegant solution -but at least now I have six guarenteed tap interfaces to work with!

here's the code to put in /etc/rc.local (warning, make sure your distro supports /etc/rc.local..many newer ones may not);

 echo 1 > /proc/sys/net/ipv4/ip_forward
 echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp

for x in {0..5}
 do
  tunctl -u random 
  sudo ip link set tap$x up
  echo 1 > /proc/sys/net/ipv4/conf/tap$x/proxy_arp
  route add -host 192.168.200.2$x dev tap$x
done

exit 0
===
Rebooted, works for me! So far, at least.

My next problem to work out involves figuring out how to kill headless qemu sessions (x86 doesn't give any output when done with -nographic).

Saturday, January 16, 2016

struggling with qemu bridging

I think I almost have this figured out.

I read these two blogs:
https://shanetomlinson.com/2009/bridging-a-wireless-card-in-kvmqemu/
and
http://blog.bodhizazen.net/linux/bridge-wireless-cards/

Basically I'm creating a new route on a new interface (tap*) and connecting through that.


router=192.168.200.1
Host=192.168.200.100

So, I install everything I need and might need

sudo apt-get install uml-utils bridge-utils

from bodhi's blog;
C : Tap. We do not assign a ip address to the tap, rather we assign a route on the host. This route will become the ip address of the guest.
route = 192.168.0.20
This is important to note.
So far it seems that what that means is that for each virtual machine you want to make, you'll need to make a new tun device and add it's IP to the host machine's routing table.

On the host after each reboot the tun device(s) ..one for each vm.. need to be remade.

So, the important numbers for my configuration;
router: 192.168.200.1
host:192.168.200.100
tap0:192.168.200.20
tap1:192.168.200.21
and so on (tap2 .22;tap3 .23 etc)

So we take the following steps to make a tap device
sudo -s
tunctl -u $USERNAME (note; use your actual username, not "$USERNAME")
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp
ip link set tap0 up
route add -host 192.168.200.20 dev tap0

Then in the virtual machine you can use 192.168.200.20 as the IP, 192.168.200.100 as the gateway and 192.168.200.1 as the nameserver.

For example, I have an openbsd/sparc64 VM I've configured thusly;
/etc/hostname.ne0 contains:
inet 192.168.200.20 255.255.255.0
/etc/mygate contains:
192.168.200.100
/etc/resolv.conf contains:
lookup file bind
nameserver 192.168.200.1 (note, on netbsd I had to change this to 8.8.8.8 in order to work)


to make additional tap interfaces you simply re-run the tunctl command, echo 1 to a new /proc.../tapX/proxy_arp, ip link set tapX up and then add the IP you want the new interface to have to the routing table.

For instance, assuming you've already set up tap0, to set up tap1 to have the IP of 192.168.200.30 you'd run the following commands;

sudo -s
tunctl -u $USERNAME
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp
ip link set tap1 up
route add -host 192.168.200.30 dev tap1

...and bob's your uncle; your tap1 is ready to use.

After you've set up your interface you can invoke it in qemu by adding the following to your qemu invocation;

-net nic -net  tap,ifname=tap0,script=no


Monday, November 2, 2015

Notes RE: Smartos


I'm trying to figure out how to run SmartOS on kimsufi; ideally redirecting ports towards KVM instances. Don't have much now, but here's some links I'm getting:

SmartOS wiki:
https://wiki.smartos.org/display/DOC/Home

IRC log discussing setting up LX on Smartos:
http://echelog.com/logs/browse/smartos/1429567200

Single IP tips for SmartOS:
https://docu.blackdot.be/snipets/solaris/smartos-nat

Tips for using proxmox

I just got a server and one of the options was to run proxmox on it, so I chose that.

I found this guide on low-end talk which had some great tips on it. Most importantly was the interfaces entry and network info, which I'm gonna re-print here in the event that link dies.

Put this in /etc/networks/interfaces to create a working bridge entry:

auto vmbr2
iface vmbr2 inet static
address 192.168.0.254
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o vmbr0 -j MASQUERADE


Then restart the server.

Use these settings when configuring VM networks:
ip : 192.168.0.1 to 192.168.0.250
subnet mask 255.255.255.0
gateway : 192.168.0.254 (ip vmbr2 on the host)
DNS: your server's DNS or google's (8.8.8.8, 8.8.4.4)

It's weird to delete proxmox virtual machines, what I do is:
ssh as root

1)delete the configuration file under /etc/pve/qemu-server
2)delete the disk image file under /var/lib/vz/images/

The web interface will refresh and the vm will be gone, as an added bonus you'll be able to re-use the node number for a new vm.

Saturday, October 10, 2015

Getting a higher resolution qemu on openindiana Oct 2015

I found something interesting on the mailing list today. Apparently openindiana has some sort of support for virtual consoles -only on certain computers, though; and not for qemu, as I found out the hard way.

First, here's the wiki entry; http://wiki.openindiana.org/oi/4.6+Remote+Console

As I said, this won't work on kvm. But by trying to get it to work I was able to finally break free of the low-res hell that I was stuck in with qemu/vga -std. On Krexel's essay "qemu: using cirrus considered harmful" I found an interesting tidbit which will prove very useful. You can set qemu's video ram from the command line. The way I've done it with my hipster box is to edit "-std vga" to "-vga std -global VGA.vgamem_mb=256 " which is admittedly overkill, but it seemed to help.


Then I simply pasted the xorg.conf I found on this page:
https://help.ubuntu.com/community/KVM/FAQ --deleting the mouse section (to prevent a potential conflict with the illumos mouse driver).

Going back to the wiki link I posted earlier, I used and ssh session to turn gdm off with this command: svcadm disable svc:/application/graphical-login/gdm:default ...followed by
svcadm enable svc:/application/graphical-login/gdm:default to turn it back on to test my changes.

There's a down-side, though. I edited /etc/X11/xorg.conf and set my screen resolution to 1280x1020 and it seems to play hell with both Qemu's sdl and gvncviewer; if I solve that problem, I'll write a follow-up or edit this post.

[EDIT] ...and here's that update! I'm finding that I can simply add "-full-screen" to the commandline, and/or do ctrl-alt-f to go fullscreen. Starting Hipster Oct 2015 in graphical mode gets weird, but switching out of and then back into full screen seems to fix that, at least so far.

automating zfs mounts -a quick and very dirty script

 #!/bin/sh for x in obj xsrc src pkgsrc pkgsrc/distfiles pkgsrc/packages pkg         do zfs create ext/$x zfs set mountpoint=/usr/$x ext/$x ...