Remove all ports
Bill Hernandez
ms at mac-specialist.com
Thu Sep 13 18:55:15 PDT 2007
On Sep 13, 2007, at 7:29 PM, AstroDrabb wrote:
> Is there a way to remove all installed ports? I want to start
> clean and before I install a port, I want to see if the port is the
> latest version of the software, if not, I want to try to upgrade
> the port.
You will have to re-install MacPorts from the dmg if you want to
remove everything and start from scratch.
I don't know if you've installed anything other than MacPorts in /opt
but if you have not, you could probably delete everything in the /opt
directory by doing :
I would probably do a
$ port installed > ~/installed_ports.txt
$ open -a /Applications/BBEdit.app ~/installed_ports.txt
This way you will have a record of the installed ports which you can
then convert into a shell script in order to automate the re-install
process
This next line will delete the entire MacPorts installation.
You WILL want to backup things like http.conf, my.cnf, php.ini, any
other configuration files, any databases, etc.
DO NOT DELETE EVERYTHING UNLESS YOU ARE SURE YOU HAVE BACKED UP
EVERYTHING YOU WILL NEED.
I don't keep any of the configs within the /opt directory, because
that way I can delete the entire thing, re-install the ports,
initialize and set the permissions for the databases (MySQL and
PostgreSQL), create some soft links to the configuration files, and
everything works very well.
WARNING : DO NOT DO ANY OF THIS UNLESS YOU UNDERSTAND THE IMPLICATIONS
$ sudo rm -R /opt
Once you get everything installed if you have a mysql database. You
can save this script as bh_mysql_perms in the shell path run this script
to have it either check or set the permissions, you can call it as
bh_mysql_perms "ck"
bh_mysql_perms "set"
Here's a shell script that you can save as bh_port_longdesc, or
bh_port_ldesc
#!/bin/bash
# Author - Bill Hernandez (Plano, Texas)
# ScriptName - bh_port_longdesc v_1.0.0
# Modified - Thursday, September 13, 2007 (7:59 PM)
#
# make sure you save this in your shell search path
# make sure you set the permissions so that the owner is executable
# something like chmod 700 /path/to/bin/folder/bh_port_longdesc
# This assumes you have BBEdit as a Text Editor, if you don't have it
www,barebones.com has a free version that is almost as powerful
# if you call it without passing it a port name, it will you give you
info on Apache
if [ $# -lt 1 ]; then
fsubj=apache ; apath=/Applications/BBEdit.app ; fpath=/tmp/${fsubj}
_port_long_desc.txt ; port info long_description:$fsubj >> $fpath ;
open -a $apath $fpath
else
fsubj=$1 ; apath=/Applications/BBEdit.app ; fpath=/tmp/${fsubj}
_port_long_desc.txt ; port info long_description:$fsubj >> $fpath ;
open -a $apath $fpath
fi
# -------- Script End ------------
Here's a shell script that you can save as bh_mysql_perms
#!/bin/bash
# Author - Bill Hernandez (Plano, Texas)
# ScriptName - bh_mysql_perms v_1.0.0
# Modified - Thursday, September 13, 2007 (7:59 PM)
# make sure you save this in your shell search path
# make sure you set the permissions so that the owner is executable
# something like chmod 700 /path/to/bin/folder/bh_mysql_perms
# +---------+---------+---------+---------+---------+---------
+---------+---------+
# bh_mysql_perms
# +---------+---------+---------+---------+---------+---------
+---------+---------+
sudo echo
echo argc is $#. argv is "$*"
echo
if [ $# = 0 ]; then
choice="ck";
elif [ "$*" = "check" ]; then
choice="ck";
else
choice="$*";
fi
divider="---------------------------------------------------------------
------------"
if [ $choice = "ck" ]; then
echo $divider
echo "Checking [MySQL] Permissions..."
echo $divider
echo "$ sudo ls -Rls /opt/local/bin/mysql5"
sudo ls -Rls /opt/local/bin/mysql5
echo "$ sudo ls -Rls /opt/local/etc/mysql5"
sudo ls -Rls /opt/local/etc/mysql5
echo "$ sudo ls -Rls /opt/local/include/mysql5"
sudo ls -Rls /opt/local/include/mysql5
echo "$ sudo ls -Rls /opt/local/lib/mysql5"
sudo ls -Rls /opt/local/lib/mysql5
echo "$ sudo ls -Rls /opt/local/share/mysql5"
sudo ls -Rls /opt/local/share/mysql5
echo "$ sudo ls -Rls /opt/local/var/db/mysql5"
sudo ls -Rls /opt/local/var/db/mysql5
echo "$ sudo ls -Rls /opt/local/var/run/mysql5"
sudo ls -Rls /opt/local/var/run/mysql5
else
echo $divider
echo "Setting [MySQL] Permissions..."
echo $divider
echo "$ sudo chown -R root:wheel /opt/local/bin/mysql5"
sudo chown -R root:wheel /opt/local/bin/mysql5
echo "$ sudo chown -R root:wheel /opt/local/etc/mysql5"
sudo chown -R root:wheel /opt/local/etc/mysql5
echo "$ sudo chown -R mysql:mysql /opt/local/include/mysql5"
sudo chown -R mysql:mysql /opt/local/include/mysql5
echo "$ sudo chown -R root:wheel /opt/local/lib/mysql5"
sudo chown -R root:wheel /opt/local/lib/mysql5
echo "$ sudo chown -R mysql:mysql /opt/local/share/mysql5"
sudo chown -R mysql:mysql /opt/local/share/mysql5
echo "$ sudo chown -R mysql:mysql /opt/local/var/db/mysql5"
sudo chown -R mysql:mysql /opt/local/var/db/mysql5
echo "$ sudo chown -R root:wheel /opt/local/var/run/mysql5"
sudo chown -R root:wheel /opt/local/var/run/mysql5
echo $divider
echo "$ sudo chmod -R 755 /opt/local/bin/mysql5"
sudo chmod -R 755 /opt/local/bin/mysql5
echo "$ sudo chmod -R 755 /opt/local/etc/mysql5"
sudo chmod -R 755 /opt/local/etc/mysql5
echo "$ sudo chmod -R 755 /opt/local/include/mysql5"
sudo chmod -R 755 /opt/local/include/mysql5
echo "$ sudo chmod -R 755 /opt/local/lib/mysql5"
sudo chmod -R 755 /opt/local/lib/mysql5
echo "$ sudo chmod -R 755 /opt/local/share/mysql5"
sudo chmod -R 755 /opt/local/share/mysql5
echo "$ sudo chmod -R 755 /opt/local/var/db/mysql5"
sudo chmod -R 755 /opt/local/var/db/mysql5
echo "$ sudo chmod -R 755 /opt/local/var/run/mysql5"
sudo chmod -R 755 /opt/local/var/run/mysql5
echo $divider
fi
# +---------+---------+---------+---------+---------+---------
+---------+---------+
Here's a shell script that you can save as bh_mysql_backup
THIS WORKS REALLY WELL FOR BACKUPS OF MySQL
THIS NEXT SCRIPT WILL BACKUP ALL THE MySQL databases, which you can
then re-import back at any time.
Make sure you put your actual values for mysql_username, and
mysql_password in the script
Doesn't require any parameters.
#!/bin/bash
# Author - Bill Hernandez (Plano, Texas)
# ScriptName - bh_mysql_backup v_1.0.0
# Modified - Thursday, September 13, 2007 (7:59 PM)
#
# make sure you save this in your shell search path
# make sure you set the permissions so that the owner is executable
# something like chmod 700 /path/to/bin/folder/bh_mysql_backup
# THIS WILL BACKUP ALL THE MySQL databases
# SEE : http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html
# SEE : http://safari.oreilly.com/0596526784/
date_and_time_string_formatting_with_strftime
#
# Improved by Bill Hernandez (Plano, Texas) on Tuesday, August 21,
2007 (12:55 AM)
# ( 1 ) Backs up all info to time stamped individual directories,
which makes it easier to track
# ( 2 ) Now maintains a single log that contains additional information
# ( 3 ) Includes a file comment header inside each compressed file
# ( 4 ) Used more variables instead of hard-code to make routine
easier to use for something else
# ( 5 ) Where I have mysql5, you may have to replace it with mysql
#
# Buggy Version Posted by Ryan Haynes on July 11 2007 6:29pm
# +---------+---------+---------+---------+---------+---------
+---------+---------+
# bh_mysql_backup
# +---------+---------+---------+---------+---------+---------
+---------+---------+
# DO NOT DELETE AUTOMATICALLY FOR NOW, MAYBE LATER
DELETE_EXPIRED_AUTOMATICALLY="FALSE"
# DELETE EXPIRED BACKUPS THAT ARE MORE THAN
# expire_minutes=$(( 1 * 30 )) # 30 minutes old
# expire_minutes=$(( 60 * 24 )) # 1 day old
# expire_minutes=$(( 60 * 24 * 7 )) # 7 days old
# expire_minutes=$(( 60 * 24 * 30 )) # 30 days old
expire_minutes=$(( 60 * 24 * 30 )) # 7 days old
if [ $expire_minutes -gt 1440 ]; then
expire_days=$(( $expire_minutes /1440 ))
else
expire_days=0
fi
function pause(){
read -p "$*"
}
# pause "HIT RETURN, and then enter your sudo password..."
echo "Please enter your sudo password..."
sudo echo
mysql_username="your_mysql_username"
mysql_password="your_mysql_password"
current_dir=`pwd`
echo -n "Current working directory is : "
echo $current_dir
echo
"-----------------------------------------------------------------------
-"
TIME_1=`date +%s`
TS=$(date +%Y.%m.%d\-%I.%M.%p)
BASE_DIR=/backups/mysql
BACKUP_DIR=${BASE_DIR}/$TS
BACKUP_LOG_NAME=mysql_dump_runtime.log
BACKUP_LOG=${BASE_DIR}/${BACKUP_LOG_NAME}
sudo mkdir -p $BACKUP_DIR
sudo chown mysql:admin $BACKUP_DIR
sudo chmod 775 $BASE_DIR
sudo chmod -R 777 $BACKUP_DIR
cd $BACKUP_DIR
echo -n "Changed working directory to : "
pwd
echo "Saving the following backups..."
echo
"-----------------------------------------------------------------------
-"
DBS="$(mysql5 --user=${mysql_username} --password=${mysql_password} -
Bse 'show databases')"
for db in ${DBS[@]}
do
normal_output_filename=${db}.sql
compressed_output_filename=${normal_output_filename}.bz2
echo $compressed_output_filename
# remember to add the options you need with your backups here.
echo "-- $compressed_output_filename - $TS" > $normal_output_filename
echo "-- Logname : `logname`" >> $normal_output_filename
# mysqldump5 --user=${mysql_username} --password=${mysql_password}
$db --single-transaction -R | bzip2 -c > $compressed_output_filename
mysqldump5 --user=${mysql_username} --password=${mysql_password} $db
--single-transaction -R >> $normal_output_filename
bzip2 -c $normal_output_filename > $compressed_output_filename
rm $normal_output_filename
done
echo
"-----------------------------------------------------------------------
-"
TIME_2=`date +%s`
elapsed_seconds=$(( ( $TIME_2 - $TIME_1 ) ))
elapsed_minutes=$(( ( $TIME_2 - $TIME_1 ) / 60 ))
# just a sanity check to make sure i am not running a dump for 4 hours
cd $BASE_DIR
echo -n "Changed working directory to : "
pwd
echo "Making log entries..."
if [ ! -f $BACKUP_LOG ]; then
echo
"-----------------------------------------------------------------------
-" > ${BACKUP_LOG_NAME}
echo "THIS IS A LOG OF THE MYSQL DUMPS..." >> ${BACKUP_LOG_NAME}
echo "DATE STARTED : [${TS}]" >> ${BACKUP_LOG_NAME}
echo
"-----------------------------------------------------------------------
-" >> ${BACKUP_LOG_NAME}
echo "[BACKUP DIRECTORY ] [ELAPSED
TIME]" >> ${BACKUP_LOG_NAME}
echo
"-----------------------------------------------------------------------
-" >> ${BACKUP_LOG_NAME}
fi
echo "[${TS}] This mysql dump ran for a total of $elapsed_seconds
seconds." >> ${BACKUP_LOG_NAME}
echo
"-----------------------------------------------------------------------
-" >> ${BACKUP_LOG_NAME}
# delete old databases. I have it setup on a daily cron so anything
older than 60 minutes is fine
if [ $DELETE_EXPIRED_AUTOMATICALLY == "TRUE" ]; then
counter=0
for del in $(find $BASE_DIR -name '*-[0-9][0-9].[0-9][0-9].[AP]M' -
mmin +${expire_minutes})
do
counter=$(( counter + 1 ))
echo "[${TS}] [Expired Backup - Deleted] $del" >> ${BACKUP_LOG_NAME}
done
echo
"-----------------------------------------------------------------------
-"
if [ $counter -lt 1 ]; then
if [ $expire_days -gt 0 ]; then
echo There were no backup directories that were more than $
{expire_days} days old:
else
echo There were no backup directories that were more than $
{expire_minutes} minutes old:
fi
else
echo
"-----------------------------------------------------------------------
-" >> ${BACKUP_LOG_NAME}
if [ $expire_days -gt 0 ]; then
echo These directories are more than ${expire_days} days old and
they are being removed:
else
echo These directories are more than ${expire_minutes} minutes old
and they are being removed:
fi
echo
"-----------------------------------------------------------------------
-"
echo "\${expire_minutes} = ${expire_minutes} minutes"
counter=0
for del in $(find $BASE_DIR -name '*-[0-9][0-9].[0-9][0-9].[AP]M' -
mmin +${expire_minutes})
do
counter=$(( counter + 1 ))
echo $del
rm -R $del
done
fi
fi
echo
"-----------------------------------------------------------------------
-"
cd `echo $current_dir`
echo -n "Restored working directory to : "
pwd
# +---------+---------+---------+---------+---------+---------
+---------+---------+
I GOT TIRED OF DOING THIS MANUALLY
THIS IS BASICALLY HOW I AUTOMATICALLY INSTALLED THE PORTS
THE LAST COUPLE OF MACHINES AND IT WORKED VERY WELL FOR MY SETUP
THERE'S SOME MISSING PIECES THAT DEAL WITH THE DATABASES
WARNING - DO NOT USE IT UNLESS YOU UNDERSTAND WHAT IS HAPPENING
#!/bin/bash
# SEE : bh_port_install_all
# SEE : port_installed_2007_08_19.txt
# SEE : port_complete_install_log.txt
# SEE : port_pgsql_install_log.txt
# SEE : port_install_notes.txt
# [2007.19.08](03:52PM) -> [josh] ~
# $ port list installed
#
# apache2 @2.2.4 www/apache2
# apr @1.2.9 devel/apr
# apr-util @1.2.8 devel/apr-util
# bison @2.3 devel/bison
# curl @7.16.4 net/curl
# cyrus-sasl2 @2.1.21 security/cyrus-sasl2
# db44 @4.4.20 databases/db44
# expat @2.0.1 textproc/expat
# fontconfig @2.4.2 graphics/fontconfig
# freetype @2.3.5 print/freetype
# gd2 @2.0.35 graphics/gd2
# gettext @0.16.1 devel/gettext
# jpeg @6b graphics/jpeg
# libiconv @1.11 textproc/libiconv
# libmcrypt @2.5.8 devel/libmcrypt
# libpng @1.2.18 graphics/libpng
# libtool @1.5.24 devel/libtool
# libxml2 @2.6.28 textproc/libxml2
# libxslt @1.1.20 textproc/libxslt
# m4 @1.4.9 devel/m4
# mhash @0.9.9 devel/mhash
# mysql5 @5.0.45 databases/mysql5
# ncurses @5.6 devel/ncurses
# ncursesw @5.6 devel/ncursesw
# openldap @2.3.35 databases/openldap
# openssl @0.9.8e devel/openssl
# pcre @7.2 devel/pcre
# perl5.8 @5.8.8 lang/perl5.8
# php5 @5.2.3 www/php5
# pkgconfig @0.22 devel/pkgconfig
# postgresql82 @8.2.4 databases/postgresql82
# readline @5.2.001 devel/readline
# rpl @1.4.0 textproc/rpl
# sqlite3 @3.4.2 databases/sqlite3
# tidy @20051026 www/tidy
# tiff @3.8.2 graphics/tiff
# zlib @1.2.3 archivers/zlib
#
# +---------+---------+---------+---------+---------+---------
+---------+---------+
# MACPORTS INSTALLATION ORDER - THIS IS HOW I INSTALLED THEM
# +---------+---------+---------+---------+---------+---------
+---------+---------+
sudo port -v install zlib
sudo port -v install openssl
sudo port -v install gd2
sudo port -v install libxml2
sudo port -v install perl5.8
sudo port -v install rpl
sudo port -v install curl
sudo port -v install apr
sudo port -v install apr-util
sudo port -v install bison
sudo port -v install cyrus-sasl2
sudo port -v install libmcrypt
sudo port -v install libxslt
sudo port -v install mhash
sudo port -v install openldap
sudo port -v install pcre
sudo port -v install tiff
sudo port -v install postgresql82 +darwin_8
sudo port -v install postgresql82-server
sudo port -v install mysql5 +darwin_8 +server
sudo port -v install php5 +darwin_8 +macosx +apache2 +fastcgi +tidy
+mysql5 +postgresql +sqlite +ipc +pcntl +pear
# Warning: php5 requests to install files outside the common
directory structure!
# ---> Installing php5 5.2.3_0+apache2+darwin_8+fastcgi+ipc+macosx
+mysql5+pcntl+pear+postgresql+sqlite+tidy
#
# If this is your first install, you might want
# cd /opt/local/apache2/modules
# /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
#
# * copy /opt/local/etc/php.ini-dist to /opt/local/etc/php.ini
# ---> Activating php5 5.2.3_0+apache2+darwin_8+fastcgi+ipc+macosx
+mysql5+pcntl+pear+postgresql+sqlite+tidy
# ---> Cleaning php5
# ---> Removing build directory for php5
#
# [2007.19.08](10:15PM) -> [josh] ~
# $
if [ ! -f /opt/local/apache2/conf/httpd.conf ]; then
sudo cp /opt/local/apache2/conf/httpd.conf.sample /opt/local/apache2/
conf/httpd.conf
fi
cd /opt/local/apache2/modules
/opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
cd ~
sudo mkdir -p /opt/local/apache2/conf/_previous
sudo mv /opt/local/apache2/conf/httpd.conf /opt/local/apache2/conf/
_previous/
if [ ! -f /opt/local/etc/php.ini ]; then
sudo cp /opt/local/etc/php.ini-dist /opt/local/etc/php.ini
fi
sudo mv /opt/local/etc/php.ini /opt/local/apache2/conf/_previous/
if [ ! -f /opt/local/etc/my.cnf ]; then
sudo cp /opt/local/share/mysql5/mysql/my-small.cnf /opt/local/etc/
my.cnf
fi
sudo mv /opt/local/etc/my.cnf /opt/local/apache2/conf/_previous/
sudo ln -s /CONF/apache_2.0/active_vh/php.ini /opt/local/etc/php.ini
sudo ln -s /CONF/apache_2.0/active_vh/mysql/my.cnf /opt/local/etc/my.cnf
sudo ln -s /CONF/apache_2.0/active_vh/httpd.conf /opt/local/apache2/
conf/httpd.conf
sudo ln -s /CONF/apache_2.0/active_vh/httpd-php.conf /opt/local/
apache2/conf/httpd-php.conf
sudo ln -s /CONF/apache_2.0/active_vh/php.ini /opt/local/apache2/conf/
php.ini
sudo ln -s /CONF/apache_2.0/active_vh/mysql/my.cnf /opt/local/apache2/
conf/my.cnf
sudo mv /opt/local/etc/LaunchDaemons /CONF/apache_2.0/active_vh/
sudo ln -s /CONF/apache_2.0/active_vh/LaunchDaemons /opt/local/etc/
LaunchDaemons
sudo /opt/local/apache2/bin/apachectl -S
sudo /opt/local/apache2/bin/apachectl -k start
ps aux | grep httpd
# +---------+---------+---------+---------+---------+---------
+---------+---------+
I didn't cover the re-install for MySQL and PostgreSQL, but maybe
these shell scripts will help you or others on the forum.
I will try to do a complete tutorial, and upload several scripts that
automate a lot of stuff.
Best Regards,
Bill Hernandez
Plano, Texas
More information about the macports-users
mailing list