LinuxQuestions.org
Share your knowledge at the LQ Wiki.
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Software
User Name
Password
Linux - Software This forum is for Software issues.
Having a problem installing a new program? Want to know which application is best for the job? Post your question in this forum.

Notices


Reply
  Search this Thread
Old 01-15-2004, 01:59 PM   #1
cloids
LQ Newbie
 
Registered: Sep 2003
Posts: 10

Rep: Reputation: 0
execute sript?


I need to execute the script below which I found on a webpage. I am using RH9, your help is appreciated:

#!/bin/bash -e
#
# debtakeover
#
# $Id: debtakeover 103 2004-01-09 19:51:47Z guillem $
#
# Convert a new non-Debian distribution to Debian proper
#
# Copyright (C) 2003 Guillem Jover <guillem@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
#


#
# User modifiable variables
#

REMOVE_EXCLUDES="/etc/mtab /etc/fstab /etc/hostname /etc/hosts
/etc/resolv.conf /etc/lilo.conf /etc/modules /etc/modules.conf
/etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/ssh/ssh_host_*"

STD_EXCLUDES="/tmp /root /home /opt /dev /proc /sys"

DEBOOTSTRAP=./debootstrap
DEBOOTSTRAP_INCLUDES="ssh,grub,libssl0.9.6,zlib1g"
if [ "$DEBTAKEOVER_PROFILE" = "colo" ]; then
DEBOOTSTRAP_EXCLUDES="setserial,fdutils,ipchains,pcmcia-cs,ppp,pppconfig,\
pppoe,pppoeconf"
else
DEBOOTSTRAP_EXCLUDES=""
fi

WORKDIR=~

#
# Function definitions
#

logpipe()
{
if [ "$VERBOSE" = "yes" ]; then
tee -a $LOGFILE
else
cat >> $LOGFILE
fi
}

log()
{
echo -e "$@" | logpipe
}

msg()
{
echo -e "$@" | tee -a $LOGFILE
}

warning()
{
msg "warning: $@" >&2
}

error()
{
code=$1
shift
msg "error: $@" >&2
if [ $code != 0 ]; then
exit $code
fi
}

usage()
{
cat <<-HERE
usage: $PROGRAM [options]

options:

--profile=string Installation profile (default "$DEFAULT_PROFILE")
--suite=string Debian suite (default "$DEFAULT_SUITE")
--mirror=url Debian mirror (default "$DEFAULT_MIRROR")
--tarball=file Debian base tarball (default "$DEFAULT_TARBALL")
--force-purify Force the purification (non-interactive)
--verbose Be more verbose
--version Print program version
--help Print this help

HERE
exit 0
}

check_needed()
{
msg "Stage (Checking for needed components)"
msg "-----"

check_print() { msg -n "-> Checking for $@ ... "; }

check_print "superuser privileges"
if [ `id -u` = 0 ]; then
msg "ok."
else
msg "failed."
error 4 "You need superuser privileges to run this program."
fi

if [ -z "$TARBALL" ]; then
local DEBOOTSTRAP_NEEDED="$DEBOOTSTRAP wget ar"
fi
local DEBTAKEOVER_NEEDED="grep sed diff tar gzip bzip2"

for bin in $DEBOOTSTRAP_NEEDED $DEBTAKEOVER_NEEDED; do
check_print "$bin"
if which $bin >& /dev/null; then
msg "found."
else
msg "missing."
local CHECK_MISSING=yes
fi
done

if [ "$CHECK_MISSING" = yes ]; then
error 2 "Please install missing software and try again."
fi

if [ "$FORCE_PURIFY" != yes ]; then
REPLY_CHECK="Yes I am"
warning "Are you sure what are you going to do ? [$REPLY_CHECK]"
read
if [ "$REPLY" != "$REPLY_CHECK" ]; then
error 20 "Ok, you are not sure. Leaving $DISTRO system untouched."
fi
fi
}

distro_detect()
{
msg "Stage (Detecting current Distro)"
msg "-----"

if [ -e /etc/redhat-release -o -e /etc/mandrake-release -o \
-e /etc/fedora-release ]
then
DISTRO=redhat
NETWORK_TYPE=redhat
NETWORK_REDHAT_CONF_DIR=/etc/sysconfig/network-scripts
elif [ -e /etc/SuSE-release ]
then
DISTRO=suse
NETWORK_TYPE=redhat
# SuSE version < 8.0 used /etc/rc.config
NETWORK_REDHAT_CONF_DIR=/etc/sysconfig/network
elif [ -e /etc/slackware-version ]
then
DISTRO=slackware
elif [ -e /etc/gentoo-release ]
then
DISTRO=gentoo
elif [ -e /etc/cobalt-release ]
then
DISTRO=cobalt
fi

if [ -e /etc/debian_version ]
then
if [ "$DISTRO" = unknown ]; then
error 1 "You already have a Debian system"
else
warning "You have a mixed system, trying to continue"
DISTRO_MIXED=yes
fi
fi

msg $DISTRO
}

generic_exclusion_list()
{
msg "Stage (Building the generic exclusion list)"
msg "-----"

msg "-> Generating exclusion file list"
echo ${REMOVE_EXCLUDES} ${STD_EXCLUDES} ${DISTRO_EXCLUDES} \
| xargs -n1 > $WORKDIR/debianize-exclude.list
sed -e 's:^/::' $WORKDIR/debianize-exclude.list > $WORKDIR/debianize-tar-exclude.list
STD_FIND_EXCLUDES=`for e in $STD_EXCLUDES; do echo "-path $e -prune -o "; done`
}

debian_tarball_build()
{
msg "Stage (Building the base-tarball)"
msg "-----"

msg "-> Debootstrapping"
$DEBOOTSTRAP --include="$DEBOOTSTRAP_INCLUDES" \
--exclude="$DEBOOTSTRAP_EXCLUDES" \
$DEBIAN_VERSION $DEBIAN_DIR $DEBIAN_MIRROR/debian 2>&1 | logpipe

msg "-> Removing unneeded files"
rm -f $DEBIAN_DIR/var/lib/apt/lists/*_{Sources,Packages,Release}
rm -f $DEBIAN_DIR/var/cache/apt/{*.bin,archives/*.deb}
rm -rf $DEBIAN_DIR/dev

msg "-> Setting up APT sources.list"
cat > $DEBIAN_DIR/etc/apt/sources.list <<-EOF
deb $DEBIAN_MIRROR_SECURITY/debian-security $DEBIAN_VERSION/updates main
deb $DEBIAN_MIRROR/debian $DEBIAN_VERSION main
deb $DEBIAN_MIRROR/debian-non-US $DEBIAN_VERSION/non-US main

deb-src $DEBIAN_MIRROR_SECURITY/debian-security $DEBIAN_VERSION/updates main
deb-src $DEBIAN_MIRROR/debian $DEBIAN_VERSION main
deb-src $DEBIAN_MIRROR/debian-non-US $DEBIAN_VERSION/non-US main
EOF

msg "-> Generating Debian files list"
chroot $DEBIAN_DIR find / $STD_FIND_EXCLUDES -print \
| sort > $WORKDIR/debianize-debian.list

msg "-> Packaging Debian chroot"
( cd $DEBIAN_DIR; \
tar cf $DEBIAN_TARBALL $DEBIAN_TARBALL_COMPRESSOR \
-X $WORKDIR/debianize-tar-exclude.list * )

msg "-> Cleaning Debian chroot"
rm -rf $DEBIAN_DIR
}

debian_tarball_prebuilt()
{
msg "Stage (Setting up pre-built base-tarball)"
msg "-----"

msg "-> Generating Debian files list from pre-built tarball"
tar tf $DEBIAN_TARBALL $DEBIAN_TARBALL_COMPRESSOR \
| sort | sed -e 's,^,/,' > $WORKDIR/debianize-debian.list
}

distro_remove_list()
{
msg "Stage (Building the remove list)"
msg "-----"

msg "-> Generating distro files list"
find / \
$STD_FIND_EXCLUDES \
-path '/boot' -prune \
-o -path '/var/run' -prune \
-o -path '/var/log' -prune \
-o -path '/var/local' -prune \
-o -path '/usr/local' -prune \
-o -path '/lib/modules' -prune \
-o -print | sort > $WORKDIR/debianize-$DISTRO.list

msg "-> Generating distro files removal list"
diff -u $WORKDIR/debianize-$DISTRO.list $WORKDIR/debianize-debian.list \
| tail +2 | grep '^-' | sed -e 's,^-,,' \
| grep -vxf $WORKDIR/debianize-exclude.list > $WORKDIR/debianize-remove.list
}

setup_network_redhat()
{
if [ -f /etc/sysconfig/network ]; then
. /etc/sysconfig/network
fi

for f in $NETWORK_REDHAT_CONF_DIR/ifcfg-*; do
unset DEVICE BROADCAST BOOTPROTO IPADDR NETMASK NETWORK ONBOOT GATEWAY \
|| true

. $f

[ "$ONBOOT" = yes -o "$STARTMODE" = onboot ] && echo "auto $DEVICE"
if [ -z "$BOOTPROTO" -o "$BOOTPROTO" = static -o "$BOOTPROTO" = none ]; then
NET_METHOD=static
elif [ "$DEVICE" = lo ]; then
NET_METHOD=loopback
else
NET_METHOD=$BOOTPROTO
fi
echo "iface $DEVICE inet $NET_METHOD"
if [ "$NET_METHOD" = static ]; then
[ -n "$IPADDR" ] && echo " address $IPADDR"
[ -n "$BROADCAST" ] && echo " broadcast $BROADCAST"
[ -n "$NETMASK" ] && echo " netmask $NETMASK"
[ -n "$NETWORK" ] && echo " network $NETWORK"
[ -n "$GATEWAY" ] && echo " gateway $GATEWAY"
fi
echo
done
}

setup_network_gentoo()
{
cat /etc/conf.d/net | grep -v '^ *#' | while read line
do

:
done
}

setup_network_bsd()
{
# /etc/rc.d/rc.inet1
:
}

setup_network_none()
{
warning "Distro $DISTRO does not have yet a network conversion scripts."
}

debian_configure()
{
msg "Stage (Configuring)"
msg "-----"

msg "-> Updating device nodes"
cd /dev
MAKEDEV update
cd -

msg "-> Setting up network"
setup_network_${NETWORK_TYPE} > /etc/network/interfaces
if [ ! -f /etc/hostname ]; then
hostname -s > /etc/hostname
fi
update-inetd --multi --disable discard,daytime,time

if [ "$DEBTAKEOVER_PROFILE" = colo ]; then
msg "-> Setting up specific colo configurations"
# TODO: Add a kernel paramater "panic=30"

sed -e 's/^FSCKFIX=no/FSCKFIX=yes/;s/^TMPTIME=0/TMPTIME=15/' \
< /etc/default/rcS > /tmp/rcS && mv -f /tmp/rcS /etc/default/

msg "-> Converting halt to behave as reboot"
rm /etc/rc0.d/S??halt
cp -d /etc/rc6.d/S??reboot /etc/rc0.d
mv -f /etc/rc1.d /etc/rc1.d.disabled
ln -s /etc/rc2.d /etc/rc1.d

rmdir /cdrom /floppy
fi

msg "-> Sanitizing user databases"
update-passwd

msg "-> Setting up module configurations"
if [ -f /etc/conf.modules ]; then
cat /etc/conf.modules >> /etc/modutils/$DISTRO
fi
if [ -f /etc/modules.conf ] &&
! grep update-modules /etc/modules.conf &> /dev/null; then
cat /etc/modules.conf >> /etc/modutils/$DISTRO
fi
if [ ! -f /etc/modules ]; then
> /etc/modules
fi
update-modules force

msg "-> Setting up remaining configurations"
dpkg --configure -a

msg "-> Sanitizing root PATH environment variable"
cat >> ~/.bash_profile <<-EOF
# Begin: automatically added by debtakeover
PATH=/sbin:/usr/sbin:/usr/local/sbin:\$PATH
# End
EOF
}

debian_dump()
{
msg "Stage (Dump the tarball)"
msg "-----"

cd /

msg "-> Making backups of important data"
tar czvf $WORKDIR/$DISTRO-etc.tgz /etc 2>&1 | logpipe
tar czvf $WORKDIR/$DISTRO-log.tgz /var/log 2>&1 | logpipe

msg "-> Removing symlinks to directories"
find / $STD_FIND_EXCLUDES -type l -xtype d -print | xargs rm -f || true

msg "-> Dumping Debian over $DISTRO"
tar xvf $DEBIAN_TARBALL $DEBIAN_TARBALL_COMPRESSOR --numeric-owner \
-p -U -X $WORKDIR/debianize-tar-exclude.list 2>&1 | logpipe || true

msg "-> Regenerating linker configuration"
ldconfig
}

distro_trash()
{
msg "Stage (Trash the old system)"
msg "-----"

msg "-> Removing remaining $DISTRO files"
cat $WORKDIR/debianize-remove.list | xargs rm -f 2> /dev/null \
| logpipe || true

msg "-> Regenerating linker configuration"
ldconfig

msg "-> Removing remaining $DISTRO directories"
cat $WORKDIR/debianize-remove.list | sort -r | xargs rmdir 2> /dev/null \
| logpipe || true
}


#
# Main program
#

export LC_ALL=C

PROGRAM=debtakeover
VERSION=0.5

DEFAULT_MIRROR=http://ftp.no.debian.org
DEFAULT_MIRROR_SECURITY=http://security.debian.org
DEFAULT_SUITE=woody
DEFAULT_TARBALL=debian-$DEFAULT_SUITE.tar.bz2
DEFAULT_PROFILE=colo

# Process command line arguments

for args do
case $args in
--verbose)
VERBOSE=yes
;;
--profile=*)
PROFILE=`echo $1 | sed 's/--profile=//'`
;;
--mirror=*)
MIRROR=`echo $1 | sed 's/--mirror=//'`
;;
--suite=*)
SUITE=`echo $1 | sed 's/--suite=//'`
;;
--tarball=*)
TARBALL=`echo $1 | sed 's/--tarball=//'`
case $TARBALL in
*.tar.gz|*.tgz)
TARBALL_COMPRESSOR=--gzip
;;
*.tar.bz2)
TARBALL_COMPRESSOR=--bzip2
;;
*.tar.Z|*.taz)
TARBALL_COMPRESSOR=--compress
;;
*)
error 10 "Tarball extension not recognized."
;;
esac
;;
--force-purify)
FORCE_PURIFY=yes
;;
--version)
echo "$PROGRAM $VERSION"
exit 0
;;
--help)
usage
;;
*)
error 0 "Unrecognized options."
usage
;;
esac
shift
done

# Initialize some variables

LOGFILE=$WORKDIR/$PROGRAM.log

DISTRO=unknown
DISTRO_MIXED=no
NETWORK_TYPE=none

DEBIAN_MIRROR=${MIRROR:-$DEFAULT_MIRROR}
DEBIAN_MIRROR_SECURITY=${MIRROR_SECURITY:-$DEFAULT_MIRROR_SECURITY}
DEBIAN_VERSION=${SUITE:-$DEFAULT_SUITE}
DEBIAN_TARBALL=${TARBALL:-$WORKDIR/debian-$DEBIAN_VERSION.tar.bz2}
DEBIAN_TARBALL_COMPRESSOR=${TARBALL_COMPRESSOR:---bzip2}
DEBIAN_DIR=debian-$DEBIAN_VERSION-chroot

DEBTAKEOVER_PROFILE=${PROFILE:-$DEFAULT_PROFILE}

# Impure non-Debian system

log "-> $PROGRAM started on `date -Iseconds | tr 'T' ' '`"

msg "-> Disable bash executable path hashing."
set +h

distro_detect
check_needed

if [ "$DISTRO_MIXED" = no ]; then
generic_exclusion_list
if [ "$TARBALL" -a -e "$TARBALL" ]; then
debian_tarball_prebuilt
else
debian_tarball_build
fi
distro_remove_list
debian_dump
fi

# Mixed system

debian_configure
distro_trash

# Pure Debian system

msg "Congratulations, you have now a Debian $DEBIAN_VERSION system !"
log "-> $PROGRAM finished on `date -Iseconds | tr 'T' ' '`"

exit 0
 
Old 01-15-2004, 02:03 PM   #2
david_ross
Moderator
 
Registered: Mar 2003
Location: Scotland
Distribution: Slackware, RedHat, Debian
Posts: 12,047

Rep: Reputation: 66
Juast dave it as a text file then make it executable:
chmod 700 /path/to/file
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
How to execute c++ program Daz_Man2803 Programming 8 06-09-2005 12:28 PM
need shell backup sript maxut Linux - Software 2 10-12-2004 11:54 AM
command execute without ./ kaon Slackware 11 09-15-2004 06:14 PM
Cannot execute '/etc/rc.S' jmartinph Slackware 2 03-15-2004 02:39 AM
g++ how do i execute? neon Linux - Newbie 5 08-14-2003 04:51 AM


All times are GMT -5. The time now is 06:46 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration