Showing posts with label virtualbox. Show all posts
Showing posts with label virtualbox. Show all posts

31 December 2010

Virtual machine as Windows service

A follow up from
Synology as Web Gateway (part one)
Once you have a virtual server up and running in Virtualbox, the question of starting it automatically in the background may be solved by the use of ServiceMan.

ServiceMan is a small win32 app i wrote as Virtualbox (3.xx) is not natively service-able. It features execution of a set of cmd lines, and on-the-fly environment variables setting. Both are needed to start a virtualbox machine (plus is able to launch many apps in one go, and support internal variables).

You need to type a cmd line to register ServiceMan as a service (it will be executed at host start).
ServiceMan -i [ServiceName]

ServiceMan will get all information from a old-fashioned ServiceMan.ini located in the executable directory. Here is mine in this case:



[General]
;this shows in services control panel
Description=ServiceMan (a virtual machine using virtualbox)

;
;From now, each section is considered to be triggered sequentially
;at host startup and shutdown
;
;We're launching a virtual server in this one
[VirtualUbuntu]

;
;Aliases : allow to define internal variables you'll be reusing later in config file
;here i'm using a portable edition of virtualbox, and need to set some paths
;
Aliases=VboxUserHome=D:\Machines\Portable-VirtualBox\data\.VirtualBox;VboxDir=D:\Machines\Portable-VirtualBox\app64

;A more conventional virtual box installation should use this
;Aliases=VboxUserHome=C:\Documents and Settings\[User Name]\.VirtualBox;VboxDir=C:\Program Files\Oracle\VirtualBox

;
;Environment variables to add to your configuration when executing cmd lines
;
EnvVars=VBOX_USER_HOME=%VboxUserHome%;VBOX_INSTALL_PATH=%VBoxDir%

;
;Working directory
;
WorkingDir=%VboxDir%

;
;we can redefine envvars for that particular service event
;with StartupEnvVars=VBOX_USER_HOME=%VboxUserHome%;VBOX_INSTALL_PATH=%VBoxDir%
;following are the command executed sequentially. It waits 1000s by default
;
;doing this should force vboxsvc to read new env vars
StartupCmd1="%VboxDir%\vboxsvc.exe" /reregserver
;it's possible to define a pause between commands (default is 1000 ms)
;StartupPause1=1000
StartupCmd2="%VboxDir%\vboxmanage.exe" list systemproperties
StartupCmd3="%VboxDir%\vboxmanage.exe" list vms
StartupCmd4="%VboxDir%\vboxheadless.exe" -startvm VirtualLinux

;
;and shutdown event: again, if we need to redefine things...
;ShutdownEnvVars=VBOX_USER_HOME=%VboxUserHome%;VBOX_INSTALL_PATH=%VBoxDir%
;ShutdownWorkingDir=%VboxDir%
;
ShutdownCmd1="%VboxDir%\vboxmanage.exe" controlvm VirtualLinux savestate

;
;you may have more than one app to launch as a service: open another section
;[AnotherSetOfCommand]
;etc, etc
;



If you need to start and stop for testing, use the service control panel or the cmd line -s / -k option.

Note that it generates a session exec log in ServiceMan directory (which, therefore, should be writable).

Download ServiceMan

24 November 2010

Synology as Web gateway (part1)

RedMine is a great tool for developpers: unfortunately it does not perform well on my synology DS-107+ (for various reasons i don't have time to inspect, low memory is probably a first answer)...

Anyway, as i'm having a-lot-of (probably too-much) machines available @ home: i choose to dedicate some horsepower to run a minimalistic virtual linux machine with Apache and RedMine (note that Bitnami is offering such packages ready for download).

So my idea was to use the Synology as a gateway between the internet and my home LAN, mainly to centralize security settings, and access point uniqueness.

Many topics are covered in this recipe:

1) Installing a virtual ubuntu server running redmine
2) Running a virtual machine as a service under Windows 7
3) Binding the Synology web frontend and a virtual server

Creating the virtual machine : ubuntu+redmine
Get VirtualBox, http://www.virtualbox.org/ . Eventually look for a portable edition.
    Create a new virtual machine: Ubuntu type, i dedicated 20gb of expandable disk space and 512Mo memory (but 5Go and 256Mo should be fine). Use Bridged Network Access for network connections (it should allow the virtual machine to have its own static IP address on your LAN).
      Note: to move a virtual server from one machine to another: ensure that you're using the same netword card between virtualbox installations: type of network card and MAC address must be the same. (note that if network is not working properly on virtualized linux, ensure that /etc/udev/rules.d/70-persistent-net.rules doesn't contain deprecated MAC entries).
      Grab Ubuntu server ISO, attach it to your virtua machine and perform the (blazingly fast) install: select Apache and MySQL components
        • Once connected to the console, you might notice a sluggish refresh:
        howto blackList vga mode :
        sudo nano /etc/modprobe.d/blacklist-framebuffer.conf
        add the following line:
        blacklist vga16fb
        Note: you can enable and use remote access to a virtualbox machine...
        Enforcing static IP use for the virtual Ubuntu Server (192.168.0.78 in my case)

            sudo vi /etc/network/interfaces
            change
            auto eth0
            iface eth0 inet dhcp
            into
            auto eth0
            iface eth0 inet static
            address 192.168.0.78
            netmask 255.255.255.0
            network 192.168.0.0
            broadcast 192.168.0.255
            gateway 192.168.0.254
            store your dns info via
            sudo vi /etc/resolv.conf
            you should read/add something like this
            nameserver 208.67.220.220
            nameserver 208.67.222.222
             and finally
            sudo /etc/init.d/networking restart
            Install VirtualBox extensions on ubuntu servers
              apt-get install build-essential linux-headers-`uname -r`
              mount /dev/cdrom /media/cdrom
              cd /media/cdrom
              ./VBoxLinuxAdditions-x86.run
              Perform Ubuntu system update:
                sudo apt-get update
                sudo apt-get install ruby
                sudo apt-get install rubygems
                Install Ruby requirements for RedMine
                  sudo gem install
                  gem install rails -v 2.3.5 -no-doc -no-ri
                  gem install rack -v 1.0.1 -no-doc -no-ri
                  Plug Ruby with MySQL, using an adapter:
                    cd /tmp
                    check latest version http://github.com/tmtm/ruby-mysql/downloads
                    wget http://github.com/downloads/tmtm/ruby-mysql/ruby-mysql-2.9.3-beta.tar.gz
                    tar -xzvf ruby-mysql-2.9.3-beta.tar.gz
                    cd ruby-mysql-2.9.3-beta/
                    ruby setup.rb
                    Eventually install PHPMyAdmin
                      sudo wget http://sourceforge.net/projects/phpmyadmin/files%2FphpMyAdmin%2F3.3.7%2FphpMyAdmin-3.3.7-all-languages.tar.gz
                      sudo tar -xzvf 
                      sudo mv /apps/phpMyAdmin
                      On Ubuntu Server: symbolic links in /etc/apache2/sites-enabled point to 'available' web sites. Use the a2ensite (Apache2 Enable Site) command to create such symbolic links, like this: sudo a2ensite mynewsite where your site configuration file is /etc/apache2/sites-available/mynewsite . Similarly, the a2dissite utility is used to disable sites.
                      Enabling your PhpMyAdmin directory as a site
                        cd /etc/apache2/sites-available
                        ln /phpmyadmin /apps/phpmyadmin-3.3.7
                        sudo a2ensite phpmyadmin
                        /etc/init.d/apache2 reload
                        browse to address/phpmyadmin
                        login/root from installation credentials
                        sometimes php fails when triggered (security problems), edit
                        sudo nano /etc/php5/apache2/php.ini
                        and edit open_basedir = to add your own '/apps/' (which allow php execution from that directory).
                        Install Mercurial
                          sudo apt-get install mercurial
                          Download and configure Redmine (http://www.redmine.org/wiki/redmine/RedmineInstall)
                            chown -R www-data:www-data /apps/
                            cd /volume1/apps
                            wget http://rubyforge.org/frs/download.php/72201/redmine-1.0.1.tar.gz
                            tar -xzvf redmine-1.0.1.tar.gz

                            mv redmine-1.0.1 redmine
                            cd redmine/config
                            cp database.yml.sample database.yml
                            nano /config/database.yml

                            production
                            adapter: mysql
                            username: redmine
                            password: xxxxxxxx

                            sudo apt-get install libopenssl-ruby1.8
                            sudo apt-get install rake

                            cd redmine

                            RAILS_ENV=production rake config/initializers/session_store.rb
                            RAILS_ENV=production rake db:migrate
                            RAILS_ENV=production rake redmine:load_default_data
                            ruby script/server -p production

                            in redmine login/password: admin admin

                            Install passenger (module enabling execution of ruby servicing in Apache)
                              sudo apt-get install libapache2-mod-passenger
                              load module in sites apache config scripts if not included by default
                              LoadModule passenger_module modules/mod_passenger.so

                              Install RedMine site under Apache (http://www.he1ix.org/?p=572)
                                cd /etc/apache2/sites-available
                                Alias /redmine /apps/redmine-1.0.1/public
                                sudo a2ensite redmine
                                sudo /etc/init.d/apache2 reload
                                sudo chown -R www-data.www-data files log tmp public/plugin_assets
                                sudo a2enmod rewrite
                                cd /apps/redmine-1.0.1/public
                                copy dispatch.cgi.example dispatch.cgi
                                If you have problem with /tmp/mysql.sock (Redmine having some problems to access mysql: can't find /tmp/mysql.sock):
                                you cant use sudo  ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock (file is not persistent), but you may specify the ubuntu mysql socket path in redmine config: edit /redmine/config/database.yml
                                production:
                                  adapter: mysql
                                  socket: /var/run/mysqld/mysqld.sock
                                
                                
                                Enabling NFS services on your synology: to allow your LAN machine to access a repository on the synology
                                  synoservice --list
                                  synoservice --enable nfs
                                  nano /etc/exports

                                  In 'exports' file, add the following line
                                  /directory/ ip.of.NFS.client(ro,root_squash,no_subtree_check)
                                  (* as 'ip.of.NFS.client', means 'for all computers on LAN')

                                  Save the 'exports' file

                                  Check if the file /var/lib/nfs/rmtab does exist, if not, run the following command
                                  touch /var/lib/nfs/rmtab

                                  Now perform
                                  cd / /usr/sbin/exportfs -a

                                  Testing: look at /var/log/messages to check whether the settings are ok with your Synology product

                                  On the Ubuntu Server side (read this):

                                  sudo apt-get install nfs-kernel-server
                                  sudo mkdir /apps/mnt
                                  sudo mount 192.168.0.77:/volume1/repos

                                  sudo vi /etc/fstab
                                  to add
                                  192.168.0.77:/volume1/repos /nfsmount nfs
                                  That's it for the virtual ubuntu server install !