Difference between revisions of "Dev Maintenance"

From Dreamwidth Notes
Jump to: navigation, search
(Syncing code to live: Replacing instances of the "Deleting removed files" code with the snippet Dre made.)
(transition from hg to git)
Line 1: Line 1:
 
== Updating the Dreamwidth code ==
 
== Updating the Dreamwidth code ==
  
{{Warn|text='''VERY IMPORTANT:''' If you have custom changes that you have not committed or patched out, you want to do that first!  If you follow these steps without doing so, you will likely muck things up.}}
+
{{Warn|text='''VERY IMPORTANT:''' If you have custom changes that you have not committed or patched out, you want to do that first!  This is very easy. Just use <tt>git stash</tt> to save your work before you start, and recover it after you're done.}}
 
+
{{Warn|text=If you are using <tt>dw-nonfree</tt> code, see [[Keeping your site configs from wiping during updates]] to keep updates from wiping your site configs.}}
+
  
 
It is best to shut your Apache instance down before doing the update process, to make sure that everything, especially scripts in cgi-bin/ are reloaded properly:
 
It is best to shut your Apache instance down before doing the update process, to make sure that everything, especially scripts in cgi-bin/ are reloaded properly:
Line 12: Line 10:
 
Okay.  Let's say you've been running your Dreamwidth install and you want to pull down the latest and greatest in fixes.  This is pretty easy.
 
Okay.  Let's say you've been running your Dreamwidth install and you want to pull down the latest and greatest in fixes.  This is pretty easy.
  
{{Snippets/Updating_code|description=1}}
+
    cd $LJHOME
  
If you accidentally write over your config-local.pl file, and you're using a [[Dreamhacks|Dreamhack]], you will get a DB connect error when you try to run the above update-db.pl commands. In that case, you'll need to [[change config-private.pl to fix DBINFO|fix DBINFO in config-private.pl]] so that you can connect to the database.
+
If you have any changes, first save them:
  
Now you can restart Apache:
+
    git stash
  
start-apache                    # for Dreamhacks
+
Then grab updates from the development branch of Dreamwidth's repository:
sudo /etc/init.d/apache2 start  # for people running their own
+
  
Of course, in a production environment, this whole process is not too recommended as you never know what kind of code you're going to get.  But for the most part, it's fairly straightforward.  (And if you're doing development, this is generally safe.)
+
    git pull dreamwidth develop
 +
    cd ext/dw-nonfree
 +
    git pull dreamwidth develop
  
If your installation was before 2010-10-01, you will also want to [[Upgrading/Data Version 9|upgrade it to data version 9]].
+
Update your database:
  
=== Updating to the correct branch ===
+
    # order of commands is important
 +
    $LJHOME/bin/upgrading/update-db.pl -r -p --innodb
 +
    $LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
 +
    $LJHOME/bin/upgrading/texttool.pl load
  
Work is being done on the 'default' branch.  When you create a new copy of the repository, it automatically updates to the tip of the default branch.  This <i>should</i> be the correct tip.  You can also sync to the tip by using:
+
Now you can restart Apache:
  
  cd $LJHOME/cvs/dw-free
+
  start-apache                    # for Dreamhacks
  hg update -C tip
+
  sudo /etc/init.d/apache2 start  # for people running their own
  
{{Warn|text=The 'production' branch has been closed. All work is being done on the default branch. This should simplify things for everyone.}}
+
Of course, in a production environment, this whole process is not too recommended as you never know what kind of code you're going to get. But for the most part, it's fairly straightforward.  (And if you're doing development, this is generally safe.)
 
+
If for some reason the active branch is not pointing to 'default', then you can sync to 'default' manually by doing 'hg update -C default'. Be careful: the '-C' option will revert any modified files, and you may need to do another tip update after switching branches.
+
 
+
=== Syncing code to live ===
+
 
+
To be running production code, you also need to sync to your live code from the repository copy:
+
 
+
bin/cvsreport.pl -sync -cvsonly
+
 
+
You will also want to delete files from your live code that have been deleted from the repository:
+
 
+
{{Snippets/Deleting removed files}}
+
  
 
== Updating your system ==
 
== Updating your system ==
Line 72: Line 62:
  
 
<source lang="bash">#!/bin/bash
 
<source lang="bash">#!/bin/bash
hg -R $LJHOME/cvs/dw-free qpop -a && \
+
oldpwd=$PWD && \
$LJHOME/bin/cvsreport.pl -u && \
+
cd $LJHOME && \
hg -R $LJHOME/cvs/dw-free qpush -a</source>
+
git pull dreamwidth develop && \
 +
cd $oldpwd
 +
</source>
  
Now, when you type 'dwu', this script will pop out any MQ patches you may have currently in dw-free, update the code to the latest available, and push your dw-free MQ patches back.
+
Now, when you type 'dwu', this script will update dw-free. If you need to update dw-nonfree as well, then use this code:
 
+
If you need support for dw-nonfree too, just duplicate the lines mentioning dw-free and edit them to say dw-nonfree and make sure that all the lines apart from the first and last end with '&& \':
+
  
 
<source lang="bash">#!/bin/bash
 
<source lang="bash">#!/bin/bash
hg -R $LJHOME/cvs/dw-free qpop -a && \
+
oldpwd=$PWD && \
hg -R $LJHOME/cvs/dw-nonfree qpop -a && \
+
cd $LJHOME && \
$LJHOME/bin/cvsreport.pl -u && \
+
git pull dreamwidth develop && \
hg -R $LJHOME/cvs/dw-free qpush -a && \
+
cd $LJHOME/ext/dw-nonfree && \
hg -R $LJHOME/cvs/dw-nonfree qpush -a</source>
+
git pull dreamwidth develop && \
 
+
cd $oldpwd
=== dws - Syncing the live code ===
+
</source>
 
+
Put this code in a file called '''$LJHOME/bin/dws''' and make it executable with '''chmod ugo+x $LJHOME/bin/dws''':
+
 
+
<source lang="bash">#!/bin/bash
+
$LJHOME/bin/cvsreport.pl -s -c && \
+
$LJHOME/bin/cvsreport.pl -s -c
+
cd $LJHOME; for i in `bin/cvsreport.pl -n -1`; do echo "Removing $i" && rm $i; done</source>
+
  
This script will synchronise the live code twice when you type 'dws', and then remove any stale files that remain in the live code.
 
  
 
=== dwdb - Updating the database ===
 
=== dwdb - Updating the database ===
Line 108: Line 90:
  
 
This will update the database when you type 'dwdb'.
 
This will update the database when you type 'dwdb'.
 
=== tocvs - Switch between /cvs and live directories ===
 
 
As of Jan 13, this is already in the default .bashrc in dreamhacks, so you shouldn't need to add it.
 
 
If you don't see the line "alias tocvs="source ~/bin/tocvs.real"" in your ~/.bashrc, you can add the following function yourself:
 
 
<source lang="bash">
 
tocvs() {
 
  DIR=$PWD
 
  REPO=${1-'dw-free'}
 
 
 
  if  [[ "$REPO" == "f" ]]; then REPO="dw-free";    fi
 
  if  [[ "$REPO" == "n" ]]; then REPO="dw-nonfree"; fi
 
 
 
  if [[ "$DIR" =~ ^$LJHOME ]]; then
 
    if [[ "$DIR" =~ ^$LJHOME/cvs/([^\/]+) ]]; then
 
      FROMREPO=${BASH_REMATCH[1]}
 
      if [[ "$1" == "" ]]; then
 
        DIR=${DIR/#$LJHOME\/cvs\/$FROMREPO/$LJHOME}
 
      else
 
        DIR=${DIR/#$LJHOME\/cvs\/$FROMREPO/$LJHOME\/cvs\/$REPO}
 
      fi
 
    else
 
      DIR=${DIR/#$LJHOME/$LJHOME\/cvs\/$REPO}
 
    fi
 
  fi
 
  cd $DIR
 
}
 
</source>
 
 
Then, start a new shell or log in again for the change to take effect. Now, whenever you're in a code directory, you can use 'tocvs' to switch back and forth from the live directory and the corresponding /cvs directory. It defaults to 'dw-free'; if you wish to go to another repository instead (for example, 'dw-nonfree'), give it as a parameter. (for example, 'tocvs dw-nonfree'). If you specify a repo name while you're already in a repository, it will switch to the named repository.
 
 
The repositories 'dw-free' and 'dw-nonfree' are aliased as 'f' and 'n' respectively.
 
  
 
==Cleaning up your directories==
 
==Cleaning up your directories==
Line 147: Line 95:
 
If you do any amount of work, you'll find that your directories get cluttered with .orig and .rej files everywhere. This script will clean those up:
 
If you do any amount of work, you'll find that your directories get cluttered with .orig and .rej files everywhere. This script will clean those up:
  
<source lang="bash">find -name *.orig -o -name *.rej | xargs rm</source>
+
<source lang="bash">git clean -f "*.rej" "*.orig"</source>
  
 
You can run it from the command line, or put it in a file called ~/bin/tidy and make it executable with "chmod +x ~/bin/tidy". If you do that, you'll be able to just type "tidy" to clean house.
 
You can run it from the command line, or put it in a file called ~/bin/tidy and make it executable with "chmod +x ~/bin/tidy". If you do that, you'll be able to just type "tidy" to clean house.
  
 
[[Category: Development]]
 
[[Category: Development]]

Revision as of 06:49, 26 July 2012

Updating the Dreamwidth code

Warning: VERY IMPORTANT: If you have custom changes that you have not committed or patched out, you want to do that first! This is very easy. Just use git stash to save your work before you start, and recover it after you're done.

It is best to shut your Apache instance down before doing the update process, to make sure that everything, especially scripts in cgi-bin/ are reloaded properly:

stop-apache                     # for Dreamhacks
sudo /etc/init.d/apache2 stop   # for people running their own

Okay. Let's say you've been running your Dreamwidth install and you want to pull down the latest and greatest in fixes. This is pretty easy.

   cd $LJHOME

If you have any changes, first save them:

   git stash

Then grab updates from the development branch of Dreamwidth's repository:

   git pull dreamwidth develop
   cd ext/dw-nonfree
   git pull dreamwidth develop

Update your database:

   # order of commands is important
   $LJHOME/bin/upgrading/update-db.pl -r -p --innodb
   $LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
   $LJHOME/bin/upgrading/texttool.pl load

Now you can restart Apache:

start-apache                     # for Dreamhacks
sudo /etc/init.d/apache2 start   # for people running their own

Of course, in a production environment, this whole process is not too recommended as you never know what kind of code you're going to get. But for the most part, it's fairly straightforward. (And if you're doing development, this is generally safe.)

Updating your system

On Ubuntu, you can update the packages on your system with:

apt-get update
apt-get upgrade

Or, if you want an easy command to run on your dw account in one swoop:

sudo apt-get update && sudo apt-get upgrade

(Note, you may not need to do this step if you're on a Dreamhack and Sophie or Afuna has already done it for everyone.)

Scripting

You can, of course, use scripts to make it easier for you to do most of this.

There is an "omnibus" script available at http://dw-dev.dreamwidth.org/94822.html which incorporates all the individual scripts listed here and some other functions, and includes help information.

Some simpler example scripts are given below.

dwu - Updating the repos

Put this code in a file called ~/bin/dwu and make it executable with chmod ugo+x ~/bin/dwu:

#!/bin/bash
oldpwd=$PWD && \
cd $LJHOME && \
git pull dreamwidth develop && \
cd $oldpwd

Now, when you type 'dwu', this script will update dw-free. If you need to update dw-nonfree as well, then use this code:

#!/bin/bash
oldpwd=$PWD && \
cd $LJHOME && \
git pull dreamwidth develop && \
cd $LJHOME/ext/dw-nonfree && \
git pull dreamwidth develop && \
cd $oldpwd


dwdb - Updating the database

Put this code in a file called ~/bin/dwdb and make it executable with chmod ugo+x ~/bin/dwdb:

#!/bin/bash
$LJHOME/bin/upgrading/update-db.pl -r -p --innodb && \
$LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb && \
$LJHOME/bin/upgrading/texttool.pl load

This will update the database when you type 'dwdb'.

Cleaning up your directories

If you do any amount of work, you'll find that your directories get cluttered with .orig and .rej files everywhere. This script will clean those up:

git clean -f "*.rej" "*.orig"

You can run it from the command line, or put it in a file called ~/bin/tidy and make it executable with "chmod +x ~/bin/tidy". If you do that, you'll be able to just type "tidy" to clean house.