Sunday, March 16, 2008

sharing file between a windows guest and ubuntu host using VM ware and samba

VMware Workstation (and presumably the other enterprise-grade products in the VMware family) come with the handy “shared folders” feature which makes sharing files between a host and a virtual appliance nice and simple. The free products (VMware Player and Server) do not, unfortunately, have this ability and so we must find another way.

This quick guide shows how to use Samba to achieve the same aim. It is aimed at Ubuntu users but (the general concepts at least) should work on any modern Linux distribution. It is also written with a Windows XP guest in mind but a similar process should work in Windows Vista, Windows 2000 and other operating systems.

The goal is to set up a network share which both operating systems can transparently read and write to.

For reference, I am using Ubuntu 7.04 (Feisty).

Which VMware?

I’ll presume you have VMWare already installed with a Windows XP guest virtual appliance already set up. This guide is aimed at users of VMware Player and Server editions (I am using VMware Player).

VMware Player is a simple:

sudo apt-get install vmware-player

away. For the Server edition, you’ll probably want to consult the wiki.

Install Samba

If you don’t already have Samba installed, now would be a good time to do it:

sudo apt-get install samba

In order to keeps things clean and easy to manage, we’ll set up a new user account to own the share. This account name will be used when connecting to the share from within Windows. For the purposes of illustration, I will be creating a share called sandbox with the username and group also being sandbox.

Create the new group and user account with no login privileges:

sudo groupadd sandbox
sudo useradd --gid sandbox --shell /bin/false sandbox

To avoid creating a redundant home directory, you can add:

--home /nonexistent

to the end of the previous command.

Now you need to add a matching Samba account. You’ll be prompted to set a password - make note of this as this is what you will use to connect to the share from within Windows.

sudo smbpasswd -a sandbox

Next you’ll need to create a directory to be used as the share (assuming you don’t already have one). Create a directory, setting the username to your usual login and group to sandbox. Then chmod the directory 775 (assuming you wish both yourself and the virtual appliance to have read/write access). Here is what I entered:

cd $HOME
mkdir sandbox
sudo chown russ:sandbox sandbox
sudo chmod 775 sandbox

When you write to the share from within Ubuntu, new files will be created with the default permissions 644 with the username and group being your own user account. When your Windows client connects to the share, it will access it as if it were the local system user sandbox and so the group permissions will apply and you won’t be able to write to any files created from within Ubuntu.

To get around this problem, we can set the groupid bit for the sandbox directory which means all new files created will inherit the permissions of the parent and so the sandbox user from within Windows will be able to make read and write changes as desired.

sudo chmod g+s sandbox

If you don’t understand the above, don’t worry, just chmod the directory with the command above and all should be well.

Setting up the Samba share

Now all that’s left to do is to tell Samba about our share. Open up /etc/samba/smb.conf in your favourite text editor.

sudo gedit /etc/samba/smb.conf

Firstly, we need to set the security mechanism to user. Look for the line:

security = user

and make sure it is uncommented (remove the preceding semicolon if there is one).

Now, scroll down to the Share Definitions section and add the following:

[sandbox]
path = /home/russ/sandbox
valid users = sandbox
read only = No
create mask = 0777
directory mask = 0777

Be sure to set the correct path to your share. Save the file and restart the Samba daemon:

sudo /etc/init.d/samba restart

That should be it. You should now be able to connect to your share from within the Windows guest. At this point you need to know what IP address to connect to from within Windows. This depends on what networking mode you are using for your virtual appliance.

Bridged Networking

In this mode, your guest OS has its own IP address and so the address it needs to connect to is your usual host machine’s address. In this case your address is probably the top line from the output of this command:

ifconfig | grep "inet addr:"

NAT networking

In this mode, your guest OS shares your host’s address (in terms of other machines on the LAN) and communicates with the host via a private network. In this case, the IP address you need to connect to is most likely the bottom one from the output of this command:

ifconfig | grep "inet addr:"

Connecting to the share from within Windows

If you are unsure as to your host’s IP address, try and ping it first from within the Windows guest to confirm you have the right one.


Having worked out what IP address to connect to, you should now be able to connect to your share from within Windows.

The easiest way to do this is:

1. Open up My Computer
2. Go to the Tools menu and then Map Network Drive
3. Choose a drive letter to map the network share to
4. In Folder, enter: \\HOSTIP\sandbox (replacing HOSTIP)
5. Click “Connect using a different user name” and enter:
* username: sandbox
* password: yourpassword
6. Click OK and then the Finish button to connect

Hopefully, congratulations are in order. If not, be sure to make sure that any firewalls you have running (host or guest) have the correct rules set to allow communication between the two systems.

A note on security

At this point, assuming you have a successful connection, it is worth noting that any other machine on your local network (and potentially the internet if you are not behind a NAT or firewall) can connect to your share (assuming they have the correct credentials).

If you are only using Samba for sharing with VMware (as I am), you may wish to restrict access to VMware only. This is quite easy to do since VMware creates virtual network interfaces for communication between hosts and guests. This means we can set Samba up to ignore any communications that do not originate from these interfaces.

To do this, open up your Samba configuration file again:

sudo gedit /etc/samba/smb.conf

Make sure you have a:

bind interfaces only = true

line and that it is uncommented (remove any preceding semicolons). Just above this should be an interfaces line (most likely commented out). Add the following just below this:

interfaces = vmnet0 vmnet1 vmnet8

These are the virtual interfaces VMware uses for each type of virtual networking: bridged, host only and NAT respectively.

After making the changes, you will need to restart Samba again:

sudo /etc/init.d/samba restart

and possibly shutdown your VMware session and restart the VMware service:

VMware Player:

sudo /etc/init.d/vmware-player restart

VMware Server:

sudo /etc/init.d/vmware restart

Finished

You should now have a Samba share configured which is only accessible from your VMware guest appliances. Good luck!

Sharing files between Ubuntu Feisty/Gutsy and Windows XP or VISTA

This guide to install samba server on Ubuntu, will help you share files from your Ubuntu Feisty with the windows machines on your network.

This way maybe you will be able to use Ubuntu at your office, hope you can.

First install samba

sudo apt-get install samba

With this you will have samba installed on your system, now you need to edit the configuration file which is located at:

/etc/samba/smb.conf

Here I will put a simple minimal configuration to allow share files from your Linux server.

[global]
workgroup = MSHOME
netbios name = UBUNTU_SERVER
security = SHARE
auth methods = guest
domain master = No
wins support = Yes

[share1]
comment = mi home
path = /home/ggarron
read only = No
guest ok = Yes


Ok, the [global] section lets you configure all global parameters, which in this case are:

* workgroup; Lets you specify the windows workgroup
* netbios name; Lets you specify the name with your Linux PC will be seen by windows PCs
* security; specifies the level of security, default is user, but if the users on the windows PCs are not the same as the ones on the Linux PC, you better use share instead
* auth methods; Possible options include guest (anonymous access), sam (lookups in local list of accounts based on netbios name or domain name), winbind (relay authentication requests for remote users through winbindd), ntdomain (pre-winbindd method of authentication for remote domain users; deprecated in favour of winbind method), trustdomain (authenticate trusted users by contacting the remote DC directly from smbd; deprecated in favour of winbind method)
* domain master; Lets you configure your PC as a domain master or not, in this case we prefer not, as our goal is only to share files
* wins support; If you want or not to have wins enabled or not

Now comes the shares section, the string you put between the [] will be how windows will sees the share, in this case share1

path; You put here the path you may want to share
read only; yes or no, depending if you want to permit other users to write on this directories.
gest ok; It is a boolean field, and will permit or not guest users to access this resource

Until here you are able to share files from your Linux PC to your Windows PCs.

If you want to configure Samba using a GUI tool, you may want to install swat (samba web administration tool).

Once again you first need to install the software, which in this case it is almost all you need to do.

sudo apt-get install swat netkit-inetd tcpd

Once installed you can open your browser and enter

http://localhost:901

You will need to login as root to have full access to configure samba by this way.

so you will first need to enable root user on Ubuntu

sudo passwd root

then choose a password for your root user.

could be good to block access to port 901 via your firewall , or use SSL to secure the connection.

How to enable SSL for SWAT?, fortunately it is easy, here is how.

1. Install OpenSSL.
2. Generate certificate and private key.

/usr/bin/openssl req -new -x509 -days 365 -nodes -config /usr/share/doc/packages/stunnel/stunnel.cnf -out /etc/stunnel/stunnel.pem -keyout -etc/stunnel/stunnel.pem

3. Remove SWAT entry from [x]inetd.
4. Start stunnel.

stunnel -p /etc/stunnel/stunnel.pem -d 901 -l /usr/local/samba/bin/swat swat

Update for Vista:

You will need samba 3.0.22 in order to see shares of Linux on Vista, and to be able to mount the Vista's shares on Linux you will maybe need to do it manually using the mount command.

mount -t smbfs -o username=[username] password=[secret] //ip_address/share /mountpoint

Please post your experiences, if you want to know more about Linux, and how to work with it,

Saturday, March 15, 2008

How to install Pidgin 2.2.0 in Ubuntu Feisty

What is Pidgin?

It’s a instant messenger, same like yahoo messenger, skype, irc, msn etc. It also has many common features that found in other messenger clients.

There 2 things that I like from Pidgin:

  • You can chat with AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ, all, in the same time.

  • Use less data transfer when we chat. May be you don’t recognize it when you use phone line, internet connection from LAN, broadband, cable modem etc. But, when you use pre paid Mobile and it charges you per kb, same like me, then you will know that you save a lot.

Step 1. Install the library

There are few modules that you have to install. Just open your console (Applications > Accessories > Terminal or Alt-F2 and type xterm).

taufanlubis@zyrex:~$ sudo apt-get install libgtk2.0-dev libxml2-dev gettext libnss-dev libnspr-dev

Password:

Reading package lists… Done

Building dependency tree

Reading state information… Done

gettext is already the newest version.

gettext set to manual installed.

The following extra packages will be installed:

libatk1.0-dev libcairo2-dev libexpat1-dev libfontconfig1-dev

libfreetype6-dev libglib2.0-dev libice-dev libpango1.0-dev libpng12-dev

libsm-dev libx11-dev libxau-dev libxcursor-dev libxdmcp-dev libxext-dev

libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxrandr-dev

libxrender-dev x11proto-core-dev x11proto-fixes-dev x11proto-input-dev

x11proto-kb-dev x11proto-randr-dev x11proto-render-dev x11proto-xext-dev

x11proto-xinerama-dev xtrans-dev zlib1g-dev

Suggested packages:

libcairo2-doc libglib2.0-doc libgtk2.0-doc libpango1.0-doc

The following NEW packages will be installed:

libatk1.0-dev libcairo2-dev libexpat1-dev libfontconfig1-dev

libfreetype6-dev libglib2.0-dev libgtk2.0-dev libice-dev libnspr-dev

libnss-dev libpango1.0-dev libpng12-dev libsm-dev libx11-dev libxau-dev

libxcursor-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev

libxinerama-dev libxml2-dev libxrandr-dev libxrender-dev x11proto-core-dev

x11proto-fixes-dev x11proto-input-dev x11proto-kb-dev x11proto-randr-dev

x11proto-render-dev x11proto-xext-dev x11proto-xinerama-dev xtrans-dev

zlib1g-dev

0 upgraded, 35 newly installed, 0 to remove and 0 not upgraded.

Need to get 16.3MB of archives.

After unpacking 49.8MB of additional disk space will be used.

Do you want to continue [Y/n]? y

Get:1 http://archive.ubuntu.com feisty/main x11proto-core-dev 7.0.10-1 [86.3kB]

Get:2 http://security.ubuntu.com feisty-security/main libfreetype6-dev 2.2.1-5ubuntu1.1 [640kB]

Get:3 http://archive.ubuntu.com feisty/main libice-dev 2:1.0.3-1build1 [55.9kB]

Get:4 http://archive.ubuntu.com feisty/main libsm-dev 2:1.0.2-1build1 [25.6kB]

….

….

Setting up libpango1.0-dev (1.16.2-0ubuntu1) …

Setting up libgtk2.0-dev (2.10.11-0ubuntu3) …

Setting up libnspr-dev (1.firefox2.0.0.6+1-0ubuntu1) …

Setting up libnss-dev (1.firefox2.0.0.6+1-0ubuntu1) …

Setting up libxml2-dev (2.6.27.dfsg-1ubuntu3) …

taufanlubis@zyrex:~$

Step 2. Download and Install the package

Extract the package

taufanlubis@zyrex:~$ sudo tar jxvf pidgin-2.2.0.tar.bz2

…..

….

pidgin-2.2.0/share/ca-certs/

pidgin-2.2.0/share/ca-certs/Makefile.am

pidgin-2.2.0/share/ca-certs/Makefile.in

pidgin-2.2.0/share/ca-certs/Makefile.mingw

pidgin-2.2.0/share/ca-certs/Equifax_Secure_CA.pem

pidgin-2.2.0/share/ca-certs/GTE_CyberTrust_Global_Root.pem

pidgin-2.2.0/share/ca-certs/Verisign_RSA_Secure_Server_CA.pem

pidgin-2.2.0/share/ca-certs/Verisign_Class3_Primary_CA.pem

pidgin-2.2.0/pidgin.spec

taufanlubis@zyrex:~$

Configure

taufanlubis@zyrex:~$ cd pidgin-2.2.0/

taufanlubis@zyrex:~/pidgin-2.2.0$./configure

………

………

pidgin 2.2.0

Build GTK+ 2.x UI…………. : yes

Build console UI………….. : no

Build for X11…………….. : yes

Enable Gestures…………… : yes

Protocols to build dynamically : gg irc jabber msn myspace novell oscar qq simple yahoo zephyr

Protocols to link statically.. :

Build with GStreamer support.. : no

Build with D-Bus support…… : no

Build with NetworkManager….. : no

SSL Library/Libraries……… : Mozilla NSS

Build with Cyrus SASL support. : no

Use kerberos 4 with zephyr…. : no

Use external libzephyr…….. : no

Has you………………….. : yes

Use XScreenSaver Extension…. : no

Use X Session Management…… : yes

Use startup notification…… : no

Build with GtkSpell support… : no

Build with plugin support….. : yes

Build with Mono support……. : no

Build with Perl support……. : no

Build with Tcl support…….. : no

Build with Tk support……… : no

Print debugging messages…… : no

Pidgin will be installed in /usr/local/bin.

configure complete, now type ‘make’

taufanlubis@zyrex:~/pidgin-2.2.0$

Build the application

taufanlubis@zyrex:~/pidgin-2.2.0$ sudo make

…..

…..

make[3]: Entering directory `/home/taufanlubis/pidgin-2.2.0/share/ca-certs’

make[3]: Nothing to be done for `all’.

make[3]: Leaving directory `/home/taufanlubis/pidgin-2.2.0/share/ca-certs’

make[3]: Entering directory `/home/taufanlubis/pidgin-2.2.0/share’

make[3]: Nothing to be done for `all-am’.

make[3]: Leaving directory `/home/taufanlubis/pidgin-2.2.0/share’

make[2]: Leaving directory `/home/taufanlubis/pidgin-2.2.0/share’

make[2]: Entering directory `/home/taufanlubis/pidgin-2.2.0′

LC_ALL=C ./intltool-merge -d -u -c ./po/.intltool-merge-cache ./po pidgin.desktop.in pidgin.desktop

Found cached translation database

…..

make[2]: Nothing to be done for `install-exec-am’.

test -z “/usr/local/share/applications” || mkdir -p — “/usr/local/share/applications”

/usr/bin/install -c -m 644 ‘pidgin.desktop’ ‘/usr/local/share/applications/pidgin.desktop’

make[2]: Leaving directory `/home/taufanlubis/pidgin-2.2.0′

make[1]: Leaving directory `/home/taufanlubis/pidgin-2.2.0′

taufanlubis@zyrex:~/pidgin-2.2.0$

Step 3. Run the application

Open Applications > Internet > Pidgin Internet Messenger.

pidgin.png

Installing Ubuntu inside Windows using VirtualBox

Installing Ubuntu inside Windows using VirtualBox 1. My new experiment about Ubuntu installation inside the windows using virtual box. ( Wo...