Tag: Ubuntu

  • HOWTO: Enable Wireless Networking on Boot in Ubuntu Linux without NetworkManager

    Building on my previous post, this is how to enable wireless networking on boot without NetworkManager.

    I’m using WPA in this example, but the setup is similar for WEP and WPA2 using wpa_supplicant.

    Remove NetworkManager (Optional)

    sudo apt-get remove network-manager

    Setup WPA Supplicant

    To convert the WPA passphrase into the appropriate form (which is salted with the SSID), you need to use wpa_passphrase. For example:

    wpa_passphrase my_ssid my_secret_password

    Generates:

    network={
    ssid=”my_ssid”
    #psk=”my_secret_password”
    psk=6bea99c21cff6002adc637d93a47fba760ec5e6326cb41784c597b6691ed700d
    }

    Using this information, you need to setup /etc/wpa_supplicant.conf like so:

    ap_scan=1
    network={
    ssid=”my_ssid”
    #psk=”my_secret_password”
    psk=6bea99c21cff6002adc637d93a47fba760ec5e6326cb41784c597b6691ed700d
    }

    Enable Wireless Interface

    Put an entry in /etc/network/interfaces for wlan0 (or wlan1, or whatever your wireless interface is).

    NOTE: I’ve put the DHCP option here for completeness, but I ran into problems with a Belkin USB F5D9050 wireless adapter not getting an IP successfully, even after it associated with the AP. I’m not sure if this was a problem with the device, the linux driver, or the AP. I ended up adding a DHCP reservation on the AP and then using a static IP configuration on the server.

    Option 1: DHCP

    auto wlan0
    iface wlan0 inet dhcp

    Option 2: Static IP

    auto wlan0
    iface wlan0 inet static
    address 192.168.0.20
    gateway 192.168.0.1
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    wpa-driver wext
    wpa-conf /etc/wpa_supplicant.conf

    Debugging

    If you are having issues getting this to work, one debugging trick is to start up wpa_supplicant directly in the foreground and checking the output of dmesg and /var/log/syslog for additional details.

    sudo wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -dd
    
  • HOWTO: Enable Wired Networking on Boot in Ubuntu Linux without NetworkManager

    A lot of Linux distros are going to applet-based management of their network connections in their desktop flavors. For example, Ubuntu Linux Desktop Edition has been using the Gnome applet NetworkManager since at least 9.10 Karmic Koala. While it works great most of the time, I’ve run into issues with it several times.

    UPDATE:I believe this issue may have gone away with recent versions of NetworkManager.
    The first was that (at least with 9.10) while NetworkManager was running from boot, it didn’t start receiving commands to connect until the user initiated their Gnome session by logging in. If you wanted to run an SSH server on the machine, you wouldn’t be able to connect to it until a local user logged in.

    The second issue is that I often times end up using the Desktop Edition in a server-like capacity and turn gdm/X off entirely. The Desktop Edition has a shorter-lead time for package updates (which can be both a blessing and a curse). In my experience it’s also easier to find help/info on it versus the Server Edition. I recently setup a machine to act as a server for my dad, connecting to his weather station’s base station and uploading the results online. I ended up using the Desktop Edition of 11.04 because the server version didn’t have support out-of-the-box for some of his hardware.

    Anyways, while I found it maddening to find a solution to initially, like many things Linux, once you know the magic incantation to recite, it’s cake.

    Remove NetworkManager

    This is optional and many of you may want or need to keep it around. For me, in the cases where I need to use this at all, I find it easier just to completely remove NetworkManager from the picture.

    sudo apt-get remove network-manager
    

    Enable Wired Interface

    Put an entry in /etc/network/interfaces for eth0 (or eth1, or whatever your wired interface is).

    Option 1: DHCP

    auto eth0
    iface eth0 inet dhcp

    Option 2: Static IP

    auto eth0
    iface eth0 inet static
    address 192.168.0.10
    gateway 192.168.0.1
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255

    Now your network interface should come up on boot, without NetworkManager!

  • HOWTO: Disable IPv6 in Ubuntu Linux

    Although we are edging closer to wide-spread IPv6 adoption with milestones such as World IPv6 Day, we aren’t quite there yet. Since I don’t use IPv6 on my LAN, I prefer to disable it. These instructions were written with Ubuntu 11.04, but it should work for 9.x,10.x, and probably many other distros as well.

    Check if IPv6 is enabled

    cat /proc/sys/net/ipv6/conf/all/disable_ipv6

    0 means IPv6 is Enabled while 1 indicates that IPv6 is Disabled

    Disable IPv6

    Add the following to /etc/sysctl.conf

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1

    Reboot!

  • Ubuntu 11.04 Natty Narwhal Upgrade – Grub Prompt on First Reboot

    I just updated one of my VMs from Ubuntu 10.10 to 11.04 Natty Narwhal using the Update Manager. All seemed to go well during the upgrade process. When it rebooted for the first time however, I was left with a grub prompt rather than a booting system. Grrrrrr.

    NOTE: The following assumes the default disk layout. If you installed to a different disk or partition, you’ll have to adjust the steps below accordingly.

    The fix is to manually boot the system at the grub prompt by typing

    set root=(hd0,1)
    linux /boot/vmlinux-2.6.38-8-generic root=/dev/sda1 ro
    initrd /boot/initrd.img-2.6.38-8-generic
    boot

    Then once you are successfully booted, re-install grub like this:

    sudo grub-install /dev/sda
    sudo update-grub

    Thanks to Rob Convery for the tip!

  • HOWTO: Create a Local Repository Mirror on Ubuntu

    How to create and use a local repository mirror on Ubuntu 9.10. These instructions should work with minor modifications for other versions of Ubuntu.

    # File: HOWTO Create a Local Repository Mirror on Ubuntu.notes
    # Date: 2010/03/17
    # Refs: https://help.ubuntu.com/community/Debmirror
    #       http://ubuntuforums.org/archive/index.php/t-599479.html
    #       http://www.arsgeek.com/2007/02/14/how-to-set-up-your-own-local-repositories-with-apt-mirror/
    #       http://pwet.fr/man/linux/commandes/debmirror
    # Desc: How to create a local repository for 
    #       Ubuntu 9.10 Karmic Koala.
    
    # -------------------------------------
    #           Setup the Server
    # -------------------------------------
    # Install Ubuntu (I used 9.10) on a machine with plenty of 
    # free storage space (I used an 8GB OS vmdk and an 80GB data 
    # vmdk used through LVM so that I could easily add/grow to
    # it in the future if necessary).
    
    # Create the mirror user, I'll be using ubuntu.
    # NOTE: You don't have to add this user to the wheel but if you don't, the steps below that require sudo
    #       will require you to run them from an account with root or wheel access and may also require
    #       that you change the ownership/group of files/directories afterwards.
    sudo useradd -m ubuntu -Gusers,wheel
    sudo password ubuntu
    
    # UPDATE 2012/01/30: As Dave points out below, you'll need to create your mirrorkeyring folder with the correct user account.
    #                    If you aren't already running as that user, you can change your shell using su
    su - ubuntu
    
    # Update your apt-get package listing
    sudo apt-get update
    
    # Install debmirror
    sudo apt-get install debmirror
    
    # Create the location for the repo data to live
    sudo mkdir -P /mirror/ubuntu
    
    # Set the permissions for the repo data
    sudo chown -R ubuntu:ubuntu /mirror/ubuntu
    sudo chmod -R 771 /mirror/ubuntu
    
    # Setup the keyring for correctly verifying Release signatures
    gpg --no-default-keyring --keyring /home/ubuntu/mirrorkeyring/trustedkeys.gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg
    
    # Create the mirrorbuild.sh script
    vim /home/ubuntu/mirrorbuild.sh
    
    # NOTE: The ubuntu community documentation has you using 
    #       the HTTP protocol for the mirror build script
    #       however, I prefer rsync because we can rate limit.
    #       When the download is going to take days,
    #       I'd like to be able to use my connection in
    #       the interim.
    
    # --------------------------------------------
    # BEGIN MIRRORBUILD.SH SCRIPT
    # --------------------------------------------
    
    #!/bin/bash
    
    ## Setting variables with explanations.
    
    #
    # Don't touch the user's keyring, have our own instead
    #
    export GNUPGHOME=/home/ubuntu/mirrorkeyring
    
    # Arch=         -a      # Architecture. 
    # For Ubuntu can be i386, amd64, powerpc and/or sparc (sparc support begins with dapper)
    # 
    # Comma separated values
    arch=i386,amd64
    
    # Minimum Ubuntu system requires main, restricted
    # Section=      -s      # Section
    # (One of the following - main/restricted/universe/multiverse).
    # You can add extra file with $Section/debian-installer.
    # ex: main/debian-installer,universe/debian-installer,multiverse/debian-installer,restricted/debian-installer
    section=main,restricted,universe,multiverse
    
    # Release=      -d      # Release of the system
    # (Dapper, Edgy, Feisty, Gutsy, Hardy, IntrepidJaunty, Karmic), 
    # and the -updates and -security ( -backports can be added if desired)
    dist=karmic,karmic-updates,karmic-security
    
    # Server=       -h      # Server name,
    # minus the protocol and the path at the end
    # CHANGE "*" to equal the mirror you want to create your
    # mirror from. au. in Australia  ca. in Canada. This can be 
    # found in your own /etc/apt/sources.list file, 
    # assuming you have Ubuntu installed.
    server=us.archive.ubuntu.com
    
    # Dir=          -r      # Path from the main server,
    # so http://my.web.server/$dir, Server dependant
    # Lead with a '/' for everything but rsync,
    # where we lead with a ':'
    inPath=:ubuntu
    
    # Proto=        -e      # Protocol to use for transfer
    # (http, ftp, hftp, rsync)
    # Choose one - http is most usual the service, and the
    # service must be availabee on the server you point at.
    # NOTE: debmirror uses -aIL --partial by default.
    #       However, if you provide the --rsync-options
    #       paramter (which we do) then you HAVE to provide 
    #       it -aIL --partial in addition to whatever You
    #       want to add (e.g. --bwlimit) If you don't
    #       debmirror will exit with thousands of files
    #       missing.
    proto=rsync
    rsyncoptions="-aIL --partial --bwlimit=100"
    
    # Outpath=              # Directory to store the mirror in
    # Make this a full path to where you want to mirror the material.
    #
    outPath=/mirror/ubuntu/
    
    # The --nosource option only downloads debs and not deb-src's
    # The --progress option shows files as they are downloaded
    # --source \ in the place of --no-source \ if you want sources also.
    # --nocleanup  Do not clean up the local mirror after mirroring
    # is complete. Use this option to keep older repository
    # Start script
    #
    debmirror       -a $arch \
                    --no-source \
                    -s $section \
                    -h $server \
                    -d $dist \
                    -r $inPath \
                    --progress \
                    -e $proto \
                    --rsync-options="$rsyncoptions" \
                    $outPath
    
    # -----------------------------------------------------
    # END BUILDMIRROR.SH SCRIPT 
    # -----------------------------------------------------
    
    # Add execute permissions on the mirrorbuild.sh script
    chmod +x mirrorbuild.sh
    
    # Run the script
    ./mirrorbuild.sh
    
    # Go home, kick back, have a beer while it downloads 43GBs 
    # (in the case of karmic, karmic-update, karmic-securty for
    # i386 and amd64)
    
    # --------------------------------------
    #          Setup the mirror
    # --------------------------------------
    # Install apache2
    sudo apt-get install apache2
    
    # Symlink the mirror data into the web root
    sudo ln -s /mirror/ubuntu /var/www/ubuntu
    
    # Point your browser at http://localhost/ubuntu and
    # you should see your pool!
    
    # -------------------------------------
    #        Updating the Repo Mirror
    # -------------------------------------
    # To update the repo mirror, just execute the mirrorbuild.sh
    # script used to initially build it.
    ./mirrorbuild.sh
    
    # -------------------------------------
    #   Configure Clients to Use this Repo
    # -------------------------------------
    # Update the apt sources list
    cd /etc/apt
    sudo mv sources.list sources.list.orig
    sudo sensible-editor sources.list
    
    # Replace 'mirrorbox' with your server's DNS name 
    # (e.g. karmic-repo.test.com)
    # -----------------------------------------------------------------------------
    # BEGIN SOURCES.LIST
    # -----------------------------------------------------------------------------
    # Local network mirror sources.
    deb http://mirrorbox/ubuntu karmic main restricted universe multiverse
    deb http://mirrorbox/ubuntu karmic-updates main restricted universe multiverse
    deb http://mirrorbox/ubuntu karmic-security main restricted universe multiverse
    # -----------------------------------------------------------------------------
    # END SOURCES.LIST
    # -----------------------------------------------------------------------------
    
    # Test to see if you are able to pull down updates 
    # from the new mirror
    sudo apt-get update
    
  • Erasing a hard drive using a Linux LiveCD

    Normally when I need to erase a hard drive, I use dban. Recently however, I’ve run into issues with dban not detecting disks (I’m guessing it doesn’t support the I/O controller/drivers). While it isn’t as secure, a decent and easy way is to just zero out the hard drive using a Linux LiveCD (besides, if you really want it done securely, physically destroy the drive). Ubuntu is my usual distro of choice but there are tons out there that will work.

    dd if=/dev/ of=/dev/sda bs=4096
    

    To get an update on it’s progress, you can signal it from another terminal using

    pkill -USR1 ^dd
    
  • HOWTO: Setup a DHCP Server on Ubuntu 9.10

    Setting up a DHCP server on a LAN with Ubuntu 9.10. These instructions should also basically work on Ubuntu 10.x.

    # File:	HOWTO Configure a DHCP Server on Ubuntu.notes
    # Date:	2010/03/24
    # Refs: https://help.ubuntu.com/community/dhcp3-server
    #       http://www.ubuntugeek.com/how-to-install-and-configure-dhcp-server-in-ubuntu-server.html
    # Desc:	Setting up a DHCP server on a LAN with Ubuntu 9.10
    
    # Install DHCP3
    sudo apt-get install dhcp3-server
    
    # Specify the interface(s) that dhcp3-server should manage
    # in /etc/default/dhcp3-server
    INTERFACES="eth0"
    
    # Set a static IP for the DHCP server itself on the
    # interfaces that it will manage in /etc/network/interfaces
    auth eth0
    iface eth0 inet static
        address 192.168.72.1
        netmask 255.255.255.0
        network 192.168.72.0
        gateway 192.168.72.254
        broadcast 192.168.72.255
    
    # Edit the etc/dhcp3/dhcpd.conf configuration file
    # I'm going to be running a 192.168.72.0 host-only 
    # vmnet on eth0 with fixed addresses for several machines 
    # in my example here
    ddns-update-style none;
    log-facility local7;
    authoritative;
    
    subnet 192.168.72.0 netmask 255.255.255.0 {
    
        option routers              192.168.72.254;
        option subnet-mask          255.255.255.0;
        option broadcast-address    192.168.72.255;
        option domain-name-servers  192.168.72.1;
        option ntp-servers          192.168.72.1;
        default-lease-time          7200;
        max-lease-time              86400;
    
        host helium {
                hardware ethernet 00:0c:29:c6:de:09;
                fixed-address 192.168.72.2;
        }
        host lithium {
                hardware ethernet 00:0c:29:d8:d5:7f;
                fixed-address 192.168.72.3;
        }
        host beryllium {
                hardware ethernet 00:0c:29:b6:93:41;
                fixed-address 192.168.72.4;
        }
        host boron {
                hardware ethernet 00:0c:29:3f:c6:f3;
                fixed-address 192.168.72.5;
        }
    }
    
  • HOWTO: Setup a Locally Authoritative DNS Server on Ubuntu 9.10

    How to setup a locally authoritative DNS server on a LAN with Ubuntu 9.10. These instructions should work almost entirely on Ubuntu 10.x without modification.

    # File:	HOWTO Setup a DNS Server on Ubuntu 9.10.notes
    # Date:	2010/03/25
    # Refs: https://help.ubuntu.com/8.04/serverguide/C/dns-installation.html
    #       https://help.ubuntu.com/community/BIND9ServerHowto
    # Desc:	Setting up a locally authoritative DNS server on a LAN with Ubuntu 9.10
    
    # Install bind9 (the actual DNS server) and the dnsutils package
    # (useful for testing and troubleshooting DNS issues). We 
    # also install resolvconf so that we can manage the static
    # IP DNS settings in /etc/network/interfaces since NetworkManager
    # will stomp on any changes we make to /etc/resolv.conf
    sudo apt-get install bind9 dnsutils resolvconf
    
    # Establish a static IP for the nameserver by editing
    # /etc/network/interfaces. In our setup, we have a multihomed
    # machine with eth0 static on the trusted LAN and eth1 DHCP
    # to the internet
    auto eth0
    iface eth0 inet static
        address 192.168.72.1
        netmask 255.255.255.0
        network 192.168.72.0
        gateway 192.168.72.254
        broadcast 192.168.72.255
        # dns-options are implemented by the resolvconf package
        dns-nameservers 192.168.72.1
        dns-search test.com
    
    # Make the static IP changes take affect
    # NOTE: You should be able to use 
    # ifconfig <interface> down/up, but I found rebooting to be
    # the only reliable way. Also, when these changes take effect,
    # you'll have NO internet DNS yet, so beware.
    sudo shutdown -r now
    
    # For our setup here, I want to be an authoritative nameserver 
    # on the local LAN, so I need at least 1 Forward Zone and
    # 1 Reverse Zone for it. Our domain is test.com and our 
    # subnet is 192.168.72.0. First we add the zones to
    # /etc/bind/named.conf.local
    zone "test.com" {
            type master;
            file "/etc/bind/db.test.com";
    };
    
    zone "72.168.192.in-addr.arpa" {
            type master
            notify no;
            file "/etc/bind/db.192";
    };
    
    # Use an existing zone file as a template
    sudo cp /etc/bind/db.local /etc/bind/db.test.com
    
    # Edit the /etc/bind/db.test.com file to fit our zone requirements
    ;
    ; BIND data file for test.com
    ;
    $TTL    604800
    @       IN      SOA     ns.test.com. root.test.com. (
                           20100325         ; Serial (YYYYMMDD)
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                             604800 )       ; Negative Cache TTL
    ;
    @       IN      NS      ns.test.com.
    @       IN      A       192.168.72.1
    ns      IN      A       192.168.72.1
    
    ; Hostname entries
    hydrogen    IN  A       192.168.72.1
    helium      IN  A       192.168.72.2
    lithium     IN  A       192.168.72.3
    beryllium   IN  A       192.168.72.4
    boron       IN  A       192.168.72.5
    
    # Use an existing reverse zone file as a template
    sudo cp /etc/bind/db.127 /etc/bind/db.192
    
    # Edit the Reverse Zone file for our reqs
    ;
    ; BIND reverse data file for test.com
    ;
    $TTL    604800
    @       IN      SOA     ns.test.com. root.test.com. (
                           20100325         ; Serial (YYYYMMDD)
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                             604800 )       ; Negative Cache TTL
    ;
    @       IN      NS      ns.
    1       IN      PTR     ns.test.com.
    
    ; Hostname RNL pointers
    2       IN      PTR     helium.test.com.
    3       IN      PTR     lithium.test.com.
    4       IN      PTR     beryllium.test.com.
    5       IN      PTR     boron.test.com.
    
    
    # Start the bind9 daemon
    sudo /etc/init.d/bind9 start
    
    # Check the status of the server. You should get a big 
    # printout from the local nameserver
    dig @localhost
    
  • HOWTO: Configure a Local NTP Server on Ubuntu 9.10

    Setting up a Network Time Protocol (NTP) server and configuring NTP clients on a LAN with Ubuntu 9.10. These instructions should also work for Ubuntu 10.x but may require slight tweaking for use with upstart.

    # File:	HOWTO Configure a Local NTP server on Ubuntu.notes
    # Date:	2010/03/16
    # Refs: http://www.ubuntugeek.com/network-time-protocol-ntp-server-and-clients-setup-in-ubuntu.html
    #       http://www.cameratim.com/computing/linux/time-serving
    #       http://en.gentoo-wiki.com/wiki/NTP#Be_a_Time_Server
    # Desc:	Setting up an NTP server and configuring NTP clients
    #       on a LAN with Ubuntu 9.10
    
    # -------------------------------------
    #           Configure the Server
    # -------------------------------------
    # We can't uninstall ntpdate like the ubuntugeek reference 
    # suggest because it will remove ubuntu-minimal along with it,
    # which has a bunch of stuff we want. So, we just have to
    # disable the ntpdate service
    sudo update-rc.d -f ntpdate remove
    
    # Install NTP
    sudo apt-get install ntp
    
    # Edit the ntp configuration file: /etc/ntp.conf
    # Change the server lines to point to the pool servers
    # you want to use. 
    # In my case, we are on a LAN with no Internet access, 
    # so I will be the master time keeper, so I commented
    # out all server lines and added the following:
    server 127.127.1.0
    
    # Fudge your local server's local clock to a lowish stratum 
    # so that other local computers will still use it as a time 
    # source, but will resync to a better time source when
    # they're able to.
    # Using a stratum of 9 means it's considered better than the
    # computer's own time (usually stratum 16 for unsynced, often 
    # stratum 12 for stand-alone time servers), but will be
    # considered a poor source of time compared to most other 
    # servers (usually stratums ranging from 1 to 4), and will 
    # be ignored in those cases (when better sources are available).
    fudge 127.127.1.0 stratum 9
    
    # Restart the ntp service
    sudo service ntp restart
    
    # -------------------------------------
    #           Configure the Clients
    # -------------------------------------
    # Install NTP
    sudo apt-get install ntp
    
    # Edit the ntp configuration file: /etc/ntp.conf
    # Change the server lines to point to the IP (or DNS record
    # if you created one) of the LAN server created above
    # Bonus Points if you have a DNS entry for the NTP server
    server ns.test.com
    
    # Restart the ntp service
    sudo service ntp restart