2014년 10월 28일 화요일

Installing Virtualbox Guest Additions iso into a Linux VM

When clicking "install VBox guest additions" from the VBox manager VM context menu on a Windows guest, the Windows installer launches automatically, but things are not as simple on a Linux guest:

1a) From the VBox manager "Devices" menu, click "CD/DVD Devices" -> "Choose a virtual CD/DVD disk file" and navigate to /usr/share/virtualbox and select VBoxGuestAdditions.iso (Note: in Archlinux the location of the the guest additions iso is /usr/lib/virtualbox/additions/VBoxGuestAdditions.iso and is provided by the package virtualbox-guest-iso)



1b) Alternatively, you can click "Insert Guest Additions CD Image" from the VBox Manager "Devices" menu.




2. mount the cd-rom/dvd drive onto a mountpoint. To find the name of the cd-rom you can do

ls /dev/*

which (depending on your machine) will reveal /dev/cdrom or /dev/sr0

sudo mount -o loop,ro /dev/cdrom /mnt/test

3. cd into the mountpoint and run the install script ending in extension .run (don't run the other scripts ending in .sh) as root:

sudo ./VBoxLinuxAdditions.run

4. After rebooting the VM, you should find that mouse pointer integration, full-screen mode, shared clipboard, folder sharing between host and guest machines and other useful features now work.

2014년 10월 21일 화요일

Thoughts on working in an Enterprise Linux environment coming from a Desktop Linux background

Linux for me started out as a hobby and only recently has it become my vocation. This means that I am naturally more familiar with desktop Linux environments and this is the background which I carry with me while learning the ropes of the Enterprise Linux (EL) world. I will discuss several of the biggest differences I have encountered between the Desktop and Enterprise domains.

I. Kernels

So far all of the production servers I have worked with are running kernels < linux 3.0
In fact, the most up-to-date kernel I have seen in a production environment is 2.6.32... which is the same version used in Debian Squeeze 6.0 (which I used as my desktop distro in 2010). Kernel 2.6.32... is used in the RHEL/CentOS 6.X series. I also regularly encounter kernel 2.6.18... used in the RHEL/CentOS 5.X series.

II. Packages

Since our customers' production servers use relatively old kernels (compared to the most recent kernel 3.17 which is currently in testing), many of the packages I am used to using in the desktop world are unavailable when I access servers over SSH or the built-in server console.

For example, Python3 is not available from the stock repos for RHEL 5.X/6.X
Also the handy tool lsblk (which lists block devices as well as filesystem info) is only available for kernels 2.6.27 and above, which means this package is not available in RHEL/CentOS 5, which uses kernel 2.6.18... There are countless of other examples.

III. net-tools vs. iproute2

In the EL world, almost all networking tasks are accomplished with utilities from the net-tools package which is becoming deprecated in the desktop Linux world. For example, bleeding-edge distros like Archlinux stopped using net-tools in 2011 in favor of the iproute2 package. Some common syntax differences between similar tasks using utils from net-tools vs. iproute2:

Put up a network interface:

ifup eth0

ip link set eth0 up

Specify an IP for a network interface:

ifconfig eth0 192.168.10.100/24 up

ip addr add 192.168.10.100/24 dev eth0

Note that the ifconfig command above will replace any existing IP addresses assigned to eth0. However the iproute2 command above will add the specified IP address to eth0 in addition to any other IP addresses already assigned to the interface. If you wish to remove any existing addresses before adding a new address using iproute2, you must do the following:

ip addr flush dev eth0

ip addr add 192.168.10.100/24 dev eth0

Of course there are many more examples like netstat being replaced by ss and other utils, etc.

IV. Systemd

In the desktop world, most distros have moved to systemd from init scripts (SysVinit) and upstart. I am now more comfortable with the systemctl action serviceName (i.e. systemctl restart dnsmasq) syntax than with the old service daemonName action (i.e. service dhcpd stop) syntax. In the Enterprise world, servers on kernels < 3.0 do not use systemd.

Many common tasks such as querying the system log are totally different in servers which do not use systemd. The first example shows the non-systemd way of checking the system log, while the second example shows how it's done in systemd:

tail -f /var/log/messages

journalctl -f


I personally think that being exposed to both the Desktop and Enterprise worlds is good for me as a Linux engineer, because I am forced to learn multiple ways of accomplishing the same tasks. When I was just administering a few machines at home, I never used tools like scp, sftp, and other networking-related utils. As a matter of necessity I have also started to write Bash scripts to automate the repetitive and mundane aspects of my job, particularly generating system reports after new Linux installations. Now is an exciting time to be a Linux system engineer!

2014년 10월 14일 화요일

Notes on installing terminator in RHEL/CentOS6.X (two missing Python2 dependencies)

  Terminator is my go-to terminal application in Linux, but unfortunately it is not available through the default repos in RHEL/CentOS6.X. Luckily, terminator is available from the EPEL (Extra Packages for Enterprise Linux ) repo maintained by Fedora. To enable this repo in RHEL/CentOS6, enter the following from the CLI:

sudo yum install epel-release

The epel-release package is included in the CentOS Extras repository by default.

Once the EPEL6 repo has been enabled, you should see the package for terminator when searching for it:

yum search terminator

However, you will find that if you install the package and try to run terminator, it will fail due to two missing dependencies, which are not listed in the rpm file:

gnome-python2-bonobo
gnome-python2-canvas

Apparently someone has already filed a bug report for this issue with RedHat:
https://bugzilla.redhat.com/show_bug.cgi?id=540551

Once these two packages have been installed, terminator works fine.

2014년 10월 7일 화요일

RHEL/CentOS PXE Network Install Boot Using dnsmasq, darkhttpd, and vsftpd

  This is a followup to my previous post on PXE network install of RHEL/CentOS in which the installation files from the .iso are sent to clients over http from the PXE server. In this post, I will show how you can send installation files from the .iso over ftp instead of http.

Basically the method is the same as that described previously except that the vsftpd server will share a mounted iso to anonymous over ftp.

 Just like in the previous post, you will need to ensure that you have dnsmasq, darkhttpd, and syslinux installed. In addition you will need to install vsftpd.


Differences between PXE Install over http vs. ftp

1. Only one instance of darkhttpd is required
    When sending .iso installation files by http, we used two instances of darkhttpd -- one to share the PXE
    boot images from /usr/local/tftpboot/pxe on 192.168.10.100:80, and another to share
    the .iso installation files from /mnt/distroIso on 192.168.10.100:8080.

    In the ftp, method, however, we only need to run one instance of darkhttpd sharing
    /usr/local/tftpboot/pxe on 192.168.10.100:80

2. Share the mounted iso over ftp, not http
    We must edit /etc/vsftpd.conf such that the iso mount point will also be the directory used for
    anonymous login.


/etc/vsftpd.conf Settings

Make sure that the following entries are set in /etc/vsftpd.conf :

  1. anonymous_enable=YES
  2. no_anon_password=YES
  3. anon_root=/mnt/distroIso/ (you can customize this mountpoint as needed)
  4. dirmessage_enable=YES
  5. xferlog_enable=YES
  6. connect_from_port_20=YES
  7. listen=YES (listen on IPv4 sockets)


Sample PXE cfg file for network boot using ftp


Note that after repo= above, the protocol is ftp:// and the user is anonymous. Once the PXE menu appears on the server console and you press ENTER, the installer will give you an IP address for manually connecting to the installation instance using the command vncviewer 123.456.789:1

To make each installation client automatically reverse connect to a listening instance of vncviewer (vncviewer -listen), in the kernel parameters line after vnc add the statement vncconnect=192.168.XXX.XXX:5500 where the specified IP address corresponds to the machine on which vncviewer is running in listen mode (note that this address can be different from the IP address of your PXE server).

Steps

Note: Some of these steps will overlap with those from my previous PXE tutorial for http.

1. Install required packages
    a. dnsmasq (integrated dns, dhcp, and tftp server)

    b. darkhttpd (http server which we will use to serve up PXE boot images)

    c. syslinux (for boot images used in pxe)

    d. vsftpd (ftp server using ssh which we will use to serve up installation files from the .iso)

2. Disconnect router from Internet (active DHCP processes conflict with dhcpd/dnsmasq
    assigning IP's to PXE clients; Our PXE server machine will be connected to a
    router (preferably with DHCP turned off) or a simple hub and we will run our own DHCP server
    for assigning IP's to PXE clients)

3. Setup PXE
    a. copy all files from /usr/lib/syslinux/bios to a local directory
        that will be used as the tftp-root (for the purposes of this tutorial
        we will call this directory /usr/local/tftpboot/pxe Make sure this directory
        is writable by your regular user)

    b. create a mountpoint for the installation .iso - the mountpoint doesn't have to be
        located under the ../tftpboot directory as in the previous method. A common
        mountpoint would be something like /mnt/distroIso

    c. From the mounted RHEL/CentOS installation .iso, navigate to /images/pxeboot
        and copy the Linux kernel images vmlinuz and initrd.img to a sub-
        directory of /usr/local/tftpboot/pxe, something like
        /usr/local/tftpboot/pxe/images/centos7_64

    d. create a config file for the PXE server under /usr/local/tftpboot/pxe
        Try to make it something distro-specific, i.e. centos7_64_vnc_ftp.cfg

4. Edit dnsmasq.conf
    a. edit /etc/dnsmasq.conf (refer to the previous post on setting up dnsmasq.conf; note
        that dhcp-option-force=209,path/to/pxe_server_cfg_file should point to the PXE config file
        defined above in step 3d)

5. Start/Restart Services
    a. start dnsmasq as root: sudo systemctl start dnsmasq (systemd syntax)

    b. start darkhttpd as rootsudo darkhttpd /usr/local/tftpboot/pxe --no-keepalive
        (this will share the pxe images on port 80 of our wired IP address)

    c. start vsftpd: sudo systemctl start vsftpd
        (this will share the mounted iso on ftp port 20 from the PXE server's IP)

6. PXE Client setup
    a. Physical machine: enter BIOS and set network/PXE boot order to first place

    b. VM: Enable network booting in the VM Manager, change the network interface to
                bridge with wired interface (i.e. eth0 or enp1s0)

7. Installation


Postscript 2016-02-06
This old post only covers Legacy BIOS PXE netboot with dnsmasq. Please refer to a newer post from 2016 that explains how to setup dnsmasq for UEFI PXE netboot:

http://eatpeppershothot.blogspot.kr/2016/02/uefi-and-legacy-bios-pxe-netboot.html