automating openssh/openssl installation

jjohn on 2005-05-18T19:42:39

Warning: technical content ahoy!

Here's a handy shell hack I use to update openssh/openssl on various machine under my care. Further hacks could be made to determine the latest version numbers of the ssl/ssh to fetch. Become one with the primative shell hacking vestiges in your modern Perl brain, oh Perlescent Brethren!

  #!/bin/sh

  build=/tmp
  dest=/opt
  lynx=/usr/bin/lynx
  wget=/usr/bin/wget
  
  ssl_url="http://www.openssl.org/source/openssl-0.9.7g.tar.gz"
  ssh_url="ftp://ftp.tux.org/bsd/openbsd/OpenSSH/portable/openssh-4.0p1.tar.gz"
  ssl_version=`basename $ssl_url ".tar.gz"`
  ssh_version=`basename $ssh_url ".tar.gz"`
  ssl_dir="$build/$ssl_version"
  ssh_dir="$build/$ssh_version"
 
  cd $build;

  echo "Finding $ssl_version and $ssh_version...";
  if [ -e $wget ];
  then
    for url in $ssl_url $ssh_url;
    do
      file=`basename $url`
      if [ -e $file ] ;
      then
        echo "Using existing $file";
      else
        echo `$wget $url`
      fi
    done;

  else
    if [ -e $lynx ];
    then

      for url in $ssl_url $ssh_url;
      do
        file=`basename $url`
        if [ -e $file ] ;
        then
          echo "Using existing $file";
        else
          echo `$lynx -source $url > $file`
        fi
      done;

    else
      echo "Oops.  No URL fetchers!";
    exit 1;
    fi
  fi

  # unpacking
  echo "Unpacking archives";
  tar xzvf `basename $ssl_url`;
  tar xzvf `basename $ssh_url`;

  echo "Cleaning";
  cd $ssl_dir && make clean;
  cd $ssh_dir && make clean;

  echo "Building SSL";
  # build ssl first; sshd depends on it
  cd $ssl_dir && ./config --prefix=$dest && make install
 
  echo "Building SSH";
  cd $ssh_dir && ./configure --prefix=$dest --with-ssl=$dest \
     --with-sysconfig=/usr/local/etc && make install

  # adjust ?
  if [ -e "/etc/rc.d/init.d/sshd" ];
  then
    echo "You may need to adjust your sshd" 
  fi