• My SugarCRM install proceedure for CentOS

    We are evaluating CRM products at work, and I wanted to get an idea what SugarCRM looks like. Below are the steps I used to install Sugar CRM community edition. I already had LAMP up and running

    Download sugarCRM: wget http://www.sugarforge.org/frs/download.php/7746/SugarCE-6.1.2.zip

    Extract the zip and move to /var/www. Create a virtual host for it in /etc/http/conf.d/

    Upgrade php to a 5.2.x version (I set the repo to disabled by default)

    yum update –enablerepo c5-testing
    service httpd restart

    function SetFolderPerms {
    find $1 -type d -exec chmod 775 {} \;
    find $1 -type d -exec chown apache {} \;
    find $1 -type f -exec chmod 664 {} \;
    find $1 -type f -exec chown apache {} \;
    }

    SetFolderPerms /var/www/sugar/htdocs/config.php
    SetFolderPerms /var/www/sugar/htdocs/custom
    SetFolderPerms /var/www/sugar/htdocs/data/
    SetFolderPerms /var/www/sugar/htdocs/cache
    SetFolderPerms /var/www/sugar/htdocs/modules/

    Visit the site you setup in the virtaul host and run through the wizard.

    Very easy!


  • My offline Exchange 2010 install script

    As I mentioned in my previos two posts, I am creating an offline replica of our Windows environment in order to test migrating from Exchange 2003 to Exchange 2010.  Now that I had a replica of our Exchange 2003 server running, I wanted to add a new Exchange 2010 box. I already had a SCCM OSD with 2008 R2 that installs the box and adds it to the domain (in this case it is the fully functioning offline domain). I added the new SP1 to meet all the prerequisites. Then I used the following commands:

    #In powershell (I had to do it twice for some reason)
    Import-Module ServerManager
    Add-WindowsFeature NET-Framework,RSAT-ADDS,Web-Server,Web-Basic-Auth,Web-Windows-Auth,Web-Metabase,Web-Net-Ext,Web-Lgcy-Mgmt-Console,WAS-Process-Model,RSAT-Web-Server,Web-ISAPI-Ext,Web-Digest-Auth,Web-Dyn-Compression,NET-HTTP-Activation,RPC-Over-HTTP-Proxy -Restart
    
    Set-service NetTcpPortSharing -startuptype automatic
    
    .\setup.com /PrepareAD
    .\setup.com /mode:install /roles:mb,ht,ca
    

  • Creating an offline replica of our Windows Environment-Part 2

    In part one I setup an offline DC with DHCP, DNS, AND and a Windows 7 VM. Next I wanted to create a copy of our exchange server offline. Easy, right? Just install exchange 2003 with DisasterRecovery mode (setup.exe /DisasterRecovery). Easy.

    That is when the fun started.  I brought up one VM with Server 2003 R2 Enterprise, set the server name to the same as the production server EXCHANGESERVER01 (this is all offline so we are okay) and tried installing with the DisasterRecovery switch. Error.:

    The component “Microsoft Exchange Messaging and Collaboration Services” cannot be assigned the action “Disaster Recovery” because: – The server object for this server (“EXCHANGESERVER01”) is a clustered Exchange Virtual Server . You may not perform maintenance on this object from a standalone server.  Cluster Admin should be used to perform maintenance on this Exchange Virtual Server.

    Crap. Our production Exchange 2003 server is a cluster, and the installer found the AD record (offline) for the mail server. At least we know know what that the correct info is in AD! (note to self, look at EXCHDUMP to find the info that AD has). So I decided to try and trick Exchange 2003 that is being installed on a cluster, but with only one node.

    So I added a couple of drives to the 2003 server (and a rename) and changed the ESX SCSI controller to “Virtual”. Tried to boot the VM and . . . Error. Crap.

    Power On virtual machine:VMware ESX Server cannot open the virtual disk, “/vmfs/volumes/GUID/OEXCHANGESERVER01/EXCHANGESERVER01-02.vmdk” for clustering.  Please verify that the virtual disk was created using the ‘thick’ option.

    Turns out you have to create the VMDK drives images from the command line if you want them to act like a cluster and be shared!

    vmkfstools -d eagerzeroedthick -c 1G -a lsilogic EXCHANGESERVER01-02.vmdk

    I recreated all my drives, and got the VM to boot. Next, I went into Cluster administrator and setup a simple 1 node cluster. Now it was time to try and install exchange 2003 AGAIN. I fired up Exchange’s setup.exe /DisasterRecovery, AGAIN. Error. Crap.

    The component “Microsoft Exchange” cannot be assigned the action “Disaster Recovery” because: – Microsoft Exchange setup does not support the use of the DisasterRecovery action when running on cluster nodes.

    Seems like I am in a loop. Can’t install exchange via DisasterRecovery on a cluster, and I can’t install exchange on a single machine that has an AD record of it being a cluster. Crap.

    I decided to just go ahead and install exchange normally, no DisasterRecovery switch, on the one node cluster. While I went through the setup, I did some surfing. Turns out what I was trying to do is :

    How to Move All Exchange Virtual Servers from a Production Exchange 2003 Cluster to a Standby Exchange 2003 Cluster.

    Maybe it is just me, but that title does not sound like what I am trying to do – recover a cluster on a single  node. Anyway, I continued installing exchange 2003 normally, on my offline single node cluster. Applied service pack 2, and then added a couple of roles to the cluster acording to the article.

    1. Created an IP address and Network name on the cluster that matched the production server, and brought them online
    2. Created an Exchange System Attendant resource.

    Once I created an Exchange System Attendant resource, the Cluster Administrator tool found the AD records and everything was matched up.  All the Exchange system configuration was there. ESM looked like it did on our production servers. Perfect. I borough one of our Information stores online (no data so it just creates a new one)

    Now in theory, I can launch Outlook on my Windows  7 VM, and it should create a new mailbox in the right store (for this test, I did not try to restore our edbs – that is my next post.) .

    Worked. Very nice.

     

     


  • Creating an offline replica of our Windows Environment-Part 1

    I am working on my new project, upgrading our Exchange 2003 environment to Exchange 2010. I wanted to create an off line replica of our current environemnet. This is how I set about doing that

    • Before I started, I created a new workstation – Windows 7 on our ESX server. This machine is joined to the domain, but no one has ever logged on (deployed via SCCM OSD). I left it overnight to make sure it was in AD and AD had replicated.
    • Next I created a network in ESX that is not attached to any adapters (and no other machines are connected to) – called “offline network”
    • I then used the built in ESX function of cloning a VM, and created a clone of one of our Domain Controllers (DC).
    • This clone was assigned to the off line network, and the Windows 7 VM was moved to the offline network.
    • Since the DC has AD,DNS, and DHCP all running on it, I should be able to reboot the Windows 7 machine and I should be able to log in with my account.
    • Since I never have logged on to this Windows 7 VM before, I know it is not using a cached version of my account and the Windows 7 VM has to be communicating to the DC.
    • Finally, I seized the FSMO roles from the the other non existant DC (not on the offline network)

    That gets me a functioning DC and a functioning DNS with a test Windows 7 machine and Office 2010.

    Next up: Recovering an Exchange 2003 cluster to a single machine in an off line network.


  • Xnest, xdmcp and X11 on CentOS

    It has been a while since I have used XNest. It works. Slow, but it works. I can ssh into a box and bring back a full X session back to my Mac.

    In CentOS 5.5 I had to edit /etc/gdm/custom.conf and add:

    Enable=true under [xdmcp]. Restart X and now I can run:

    Xnest :1 -geometry 1024×768 -kb -query localhost

    which will bring a gnome session back to my X11 server.

    Very easy with out having to open any ports!


  • GNU date vs BSD date

    I usually develop and test my BASH scripts on my mac, mostly for use on RedHat systems. Occasionally I run into problems with this workflow. Recently I realized there was a differnce between the date command on RedHat and the date command in OS X. Turns out BDS date != GNU date. The workaround, install coreutils from Mac Ports, and add this alias to my .bashrc:

    alias date=”/opt/local/bin/gdate”

     

    Update: gdate is part of the GNU coreutils, and the MacPorts install command for gdate is: sudo port install coreutils


  • My mac ports cheat sheet

    These 3 commands will check for new ports, upgrade outdated ports, and remove older versions.
    • sudo port selfupdate
    • sudo port upgrade outdated
    • sudo port uninstall inactive

    To make sure you have a slimmed down install, use port_cutleaves to remove unnecessary ports. There are often “Build Dependencies” (like autoconf, automake, libtool, m4, help2man, p5-locale-gettext) that are no longer needed after a package is installed.

    • sudo port install port_cutleaves
    • sudo port_cutleaves (I run this a couple of times)

  • Check if a file exists on a remote server

    I was working on a copy WordPress site to a local machine script, and I wanted to check if the remote path was a WordPress site.
    Here is the code I used.

    CHECKCMD="ls /path/to/wp-config.php | grep wp-config.php > /dev/null; echo \$?"
    CHECKFILE=$(ssh $SRCSERVER $CHECKCMD)
    if [ $CHECKFILE -eq 0 ]; then
    	echo "file exists"
    fi