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. Thanks, Jim
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
On Sep 13, 2007, at 19:29, 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.
I'm not sure if there's a good way to remove all ports, but keep the MacPorts infrastructure. You could try: sudo port -f uninstall installed but I haven't tried that myself because I'd like to keep my ports installed. :-) There are instructions however for removing all of MacPorts here: http://trac.macosforge.org/projects/macports/wiki/ FAQ#HowdoIremoveoruninstallMacPorts Then you can download the MacPorts 1.5.0 disk image, install it, and "sudo port selfupdate" to the latest 1.5.2 version and be on your way.
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.
-> I got in a hurry to send this, and realized I had moved some things around and it no longer made any sense. -> PLEASE THROW AWAY THE PREVIOUS VERSION I SENT A FEW MINUTES AGO 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. I would first backup anything you might need. You WILL want to backup things like http.conf, my.cnf, php.ini, any other configuration files, any databases, etc. If you any MySQL databases you can use the shell script below bh_mysql_backup 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. You can then do : $ 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 You can look at my installer at the bottom. WARNING ( 1 ) : DO NOT DELETE EVERYTHING UNLESS YOU ARE SURE YOU HAVE BACKED UP EVERYTHING YOU WILL NEED. WARNING ( 2 ) : DO NOT DO ANY OF THIS UNLESS YOU UNDERSTAND THE IMPLICATIONS This next line will delete the entire MacPorts installation. $ sudo rm -R /opt Once you get everything installed if you have a mysql database. After you create the database structure, if you have any problems with the permissions, you can run bh_mysql_perms "set" below. 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 Make sure you save it in the shell path in order to run it To have it either check or set the permissions, you can call it as bh_mysql_perms "ck" bh_mysql_perms "set" #!/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 # +---------+---------+---------+ ( SCRIPT END ) +---------+--------- +---------+ 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 # +---------+---------+---------+ ( SCRIPT END ) +---------+--------- +---------+ 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 # +---------+---------+---------+ ( SCRIPT END ) +---------+--------- +---------+ I didn't cover the re-install for MySQL and PostgreSQL, I also did not include the commands to start the daemons, but maybe these shell scripts will help you or others on the forum. I will try to do a complete tutorial with complete details, and upload several scripts that automate a lot of this stuff. Best Regards, Bill Hernandez Plano, Texas
Bill Hernandez:
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.
I would first backup anything you might need. You WILL want to backup things like http.conf, my.cnf, php.ini, any other configuration files, any databases, etc. If you any MySQL databases you can use the shell script below bh_mysql_backup
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.
The default MacPorts prefix is *not* /opt, it is "/opt/local". If you delete the entire /opt, you risk throwing away other third-party software that (rightfully) gets installed there... (nothing by Apple though, in a clean Mac OS X / Xcode install) Both of /usr/local and /opt are traditional install locations. So while removing /opt also "works", it's safer using /opt/local. --anders
On 2007-09-13 21:16:16 -0500, Bill Hernandez wrote:
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.
ports also install things outside /opt, e.g. symlinks in /Library/LaunchDaemons. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
On Sep 14, 2007, at 1:18 AM, Anders F Björklund wrote:
The default MacPorts prefix is *not* /opt, it is "/opt/local".
If you delete the entire /opt, you risk throwing away other third-party software that (rightfully) gets installed there... (nothing by Apple though, in a clean Mac OS X / Xcode install) Both of /usr/local and /opt are traditional install locations.
So while removing /opt also "works", it's safer using /opt/local.
--anders
GOOD POINT ! You are absolutely correct, that's why I asked him to make sure nothing else was installed there...
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.
I should have said :
I don't know if you've installed anything other than MacPorts in / opt/local but if you have not, you could probably delete everything in the /opt/local directory.
In my case there's nothing else in /opt other than MacPorts Best Regards, Bill Hernandez Plano, Texas
On Sep 14, 2007, at 7:19 AM, Vincent Lefevre wrote:
ports also install things outside /opt, e.g. symlinks in /Library/LaunchDaemons.
GOOD POINT ! The way I interpreted his message was that : In his case he wanted to re-install his ports from scratch, so the symlinks would be created again. It sounded like he wanted to do a one for one replacement. But you are correct, I should have added with a note to remove whichever symlinks were related to MacPorts. $ open /Library/LaunchDaemons Best Regards, Bill Hernandez Plano, Texas
On Sep 14, 2007, at 08:16, Bill Hernandez wrote:
On Sep 14, 2007, at 7:19 AM, Vincent Lefevre wrote:
ports also install things outside /opt, e.g. symlinks in /Library/LaunchDaemons.
GOOD POINT !
The way I interpreted his message was that :
In his case he wanted to re-install his ports from scratch, so the symlinks would be created again.
It sounded like he wanted to do a one for one replacement.
But you are correct, I should have added with a note to remove whichever symlinks were related to MacPorts.
$ open /Library/LaunchDaemons
The FAQ has uninstall instructions, so we should be pointing people to that. If the instructions are incomplete or incorrect, they should be amended. http://trac.macosforge.org/projects/macports/wiki/ FAQ#HowdoIremoveoruninstallMacPorts
participants (5)
-
Anders F Björklund
-
AstroDrabb
-
Bill Hernandez
-
Ryan Schmidt
-
Vincent Lefevre