Vnx-rootfslxcvyos

From VNX
Jump to: navigation, search

How to create a LXC VyOS root filesystem for VNX

Basic installation

VyOS is an open source network operating system that is based on Debian GNU/Linux and that joins multiple applications such as Quagga, ISC DHCPD, OpenVPN, StrongS/WAN and others under a single management interface. It can be installed on physical hardware or on virtual machines and it is a community fork of Vyatta.

Follow this procedure as a root user to create a VyOS based LXC root filesystem for VNX. The procedure has been tested with VyOS 1.1.7 over a Ubuntu 16.04 system.

  • Get VyOS installation CD and mount it to make its content accesible:
  • wget http://packages.vyos.net/iso/release/1.1.7/vyos-1.1.7-amd64.iso
    mount -o loop vyos-1.1.7-amd64.iso /mnt/
    
  • Create a Debian LXC rootfs with:
  • lxc-create -n vyos -t debian -- -r wheezy
    
  • Substitute the rootfs directory of the newly created container by the VyOS one:
  • cd /var/lib/lxc/vyos
    rm -rf /var/lib/lxc/vyos/rootfs/
    unsquashfs /mnt/live/filesystem.squashfs
    mv squashfs-root/ rootfs
    umount /mnt
    
  • Do some modifications in container configuration:
  • # Change the number of ttys to 6
    sed -i -e "s/lxc.tty = 4/lxc.tty = 6/" config
    # Eliminate the "nr_inodes" option in vyatta-router script (not supported inside the container)
    sed -i -e 's/,nr_inodes=0//' rootfs/etc/init.d/vyatta-router
    # Create the /dev/fuse device manually in /etc/rc.local
    sed -i -e "/By default this script does nothing/a mknod -m 666 /dev/fuse c 10 229\nchown root.fuse /dev/fuse\nchmod 660 /dev/fuse" rootfs/etc/rc.local
    
  • Start the new container for the first time (needed for the vyos user to be created) and stop it later:
  • lxc-start -n vyos
    sleep 5
    lxc-attach -n vyos -- poweroff
    
  • Add the TERM environment variable to the vyos user .bashrc:
  • echo "export TERM=xterm" >> rootfs/home/vyos/.bashrc
    
  • Disable the ttyS0 console in default configuration:
  • sed -i -e '/device ttyS0/,+2d' rootfs/opt/vyatta/etc/config/config.boot
    

After this steps, you will have a working VyOS LXC image ready to be used. You can start it and access the console with:

lxc-start -n vyos
lxc-console -n vyos

Note: the foreground option "-F" of "lxc-start" that allows starting the container and directly showing the console does not work (I do not now why; probably something related with the console/ttyS0 ports).

Finally, to convert the image into a VNX rootfs:

  • Move the image to VNX images directory:
  • cd /usr/share/vnx/filesystems/
    mv /var/lib/lxc/vyos vnx_rootfs_lxc_vyos64-1.1.7-v025
    
  • Edit the rootfs configuration file (/usr/share/vnx/filesystems/vnx_rootfs_lxc_vyos64-1.1.7-v025/config) to reflect the directory change:
  • lxc.rootfs = /usr/share/vnx/filesystems/vnx_rootfs_lxc_vyos64-1.1.7-v025/rootfs
    
  • Start a the container and access to the console:
  • lxc-start -n vnx -f vnx_rootfs_lxc_vyos64-1.1.7-v025/config
    lxc-console -n vnx
    
  • Enter using vyos/vyos user/password and create the vnx/xxxx user with:
  • configure
    set system login user vnx full-name "VNX project"
    set system login user vnx authentication plaintext-password xxxx
    set system login user vnx level admin            
    commit
    save
    exit
    
  • Stop the container with:
  • poweroff
    
  • Add the TERM environment variable to the vnx user .bashrc:
  • echo "export TERM=xterm" >> vnx_rootfs_lxc_vyos64-1.1.7-v025/rootfs/home/vnx/.bashrc