[afnog] Solaris to FreeBSD Migration

Joe Abley jabley at ca.afilias.info
Fri Jun 23 18:22:26 EAT 2006


On 23-Jun-2006, at 04:21, NJIE EFOME Paul wrote:

>     I have installed FreeBSD and all its services and everything is  
> working fine. Now my mail server was on solaris 2.x. Now I want to  
> migrate all my accounts from the old solaris server to my new BSD  
> server. An idea how to proceed. I have the Passwd, shadow and  
> aliases files in a tmp directory in my BSD server already. How do I  
> covert this files in a FreeBSD format. Any one has a migration tool  
> that I can profit. Tks in advance.

Passwords stored in Solaris' /etc/shadow are DES-encrypted, I think,  
which FreeBSD's master.passwd can also handle. So if I have that  
right, there should be no need to require access to plain text  
passwords.

I don't have a Solaris box handy, but according to some random  
document I found on Sun's web page Solaris' /etc/passwd looks like this:

username:password:uid:gid:gecos:homedir:shell

If "password" is "x", then /etc/shadow is consulted for the second  
field.

FreeBSD's master.passwd looks like this:

username:password:uid:gid:class:change:expire:gecos:homedir:shell

So, FreeBSD has some extra fields that need to be incorporated.  
System accounts used in FreeBSD and Solaris are also different; you  
don't want to copy those across directly. This looks like a job for  
awk, plus some manual editing.

Note that I haven't tested the following (you should, before deciding  
that it works :-).

#!/usr/bin/awk -f
#
BEGIN {
   FS=':';
}
#
/^[a-z0-9]*:/ {
   if ($2 != "x") password[$1] = $2;
   uid[$1] = $3;
   gid[$1] = $4;
   gecos[$1] = $5;
   homedir[$1] = $6;
   shell[$1] = $7;
}
#
END {
   for (n in uid)
     print n ":" password[n] ":" uid[n] ":" gid[n] "::0:0:" \
       gecos[n] ":" homedir[n] ":" shell[n];
}

If you saved that as conv.awk, mode 755, in a directory which  
contained your Solaris passwd and shadow files named "solaris-passwd"  
and "solaris-shadow" you could do something like

   $ ./conv.sh solaris-passwd solaris-shadow >freebsd-passwd
   $

The lines in "freebsd-passwd" might well be in a jumbled order. You  
can always sort them using sort (see "man sort" for details).

You would then edit freebsd-passwd to remove the Solaris system  
accounts that you don't want to copy over, and to correct anything  
else that seems to be broken. For example, check that home  
directories and shells are appropriate for the new machine; search  
and replace if not. Check that the uids from Solaris are suitable for  
FreeBSD, too (check they don't clash with system accounts, for example).

The edited "freebsd-passwd" file should then be suitable to  
incorporate into your FreeBSD passwd file, which you can edit (for  
example) using vipw.


Joe



More information about the afnog mailing list