Difference between revisions of "User:Diggernet/Sandbox"
(→<code>gramps.sh</code>) |
|||
Line 74: | Line 74: | ||
# END OF SETTINGS | # END OF SETTINGS | ||
− | + | export GRAMPSHOME=`$DIRNAME_COMMAND "$0"` | |
− | cd "$ | + | cd "$GRAMPSHOME" |
− | + | "$GRAMPS_COMMAND" & | |
− | |||
− | |||
− | |||
</pre> | </pre> | ||
Revision as of 04:27, 23 March 2008
Run GRAMPS from a portable drive
Some users want to keep their GRAMPS data on a removable drive, either for portability between computers or for security. This document describes how to accomplish that, and should work whether using a floppy disk, a flash drive, or an external hard drive. Unfortunately, there are no easy instructions for installing GRAMPS and its dependencies on a removable drive, so these instructions assume and require that GRAMPS be installed on any computer to which you connect the drive.
Contents
What this does
The magic is done in scripts that you use to start GRAMPS. The scripts trick GRAMPS into thinking that your user home directory is on the removable drive instead of in the usual place, so that GRAMPS will read and write its configuration and data there.
Installation
Save the scripts below in the directory you want to use as your GRAMPS home directory on the removable drive. When run, the scripts will direct GRAMPS to the directory they are installed in. Edit the SETTINGS section of the scripts you will use, so that the values there are correct for your computer.
You will probably need to change the media base path setting in GRAMPS each time you run it on a different computer. You may also need to edit some settings in the scripts for different computers. If there are certain computers which you use regularly that need different settings in the scripts, you can easily make separate script copies for each one, to avoid the need to reedit them.
Windows
gramps.bat
@echo off REM Make changes to environment variables local to this block setlocal REM START OF SETTINGS set PYTHON_COMMAND="C:\Python25\pythonw.exe" set GRAMPS_DIR="C:\Program Files\gramps" REM END OF SETTINGS REM Set USERPROFILE to the drive and path of this script set USERPROFILE="%~dp0" REM Go to this script location for good measure %~d0 cd "%~p0" "%PYTHON_COMMAND" "%GRAMPS_DIR\gramps.py" REM End the local environment block endlocal
Usage
- Make sure GRAMPS is installed and working on the target computer.
- Attach your drive to the target computer.
- If necessary, edit the settings in the batch file (or a copy of it) to match the target computer.
- Double click the batch file to run GRAMPS.
How it works
The setlocal
command tells Windows that you want to use a temporary copy of the environment that will be discarded later. The endlocal
command tells Windows to go ahead and throw away that temporary environment. What this does is ensure that any changes made to the environment in the script (especially to USERPROFILE
) do not carry on past the end of the script.
Batch files use %0
to refer to the drive, path and name of the batch file itself. You can also insert codes to reference specific parts of the batch file location. For example, %~d0
refers to just the drive letter, and %~p0
refers to just the path. These codes can be combined. Thus, %~dp0
refers to the drive letter and path where the batch file is located. We use these to change drive to the removable drive, change directory to the directory which contains the script, and set the value of USERPROFILE
USERPROFILE
is the environment variable that Windows programs use to locate your user home directory. Here we set it to point to the drive and directory where this script lives, in order to trick GRAMPS into thinking that is your home directory.
Once everything is set up, the script simply runs GRAMPS.
Linux
gramps.sh
#!/bin/bash # You MUST use the full path to this script when you run it. # START OF SETTINGS GRAMPS_COMMAND="/usr/bin/gramps" DIRNAME_COMMAND="/usr/bin/dirname" # END OF SETTINGS export GRAMPSHOME=`$DIRNAME_COMMAND "$0"` cd "$GRAMPSHOME" "$GRAMPS_COMMAND" &
Usage
- Make sure GRAMPS is installed and working on the target computer.
- Attach your drive to the target computer and mount it.
- If necessary, edit the settings in the script (or a copy of it) to match the target computer.
- If necessary, edit .gramps/keys.ini and adjust database-path to match your mount point.
- Run the script using its full path to run GRAMPS.
- If necessary, edit the media base path in GRAMPS to match your mount point.
How it works
This is a little less forgiving than the Windows version, because bash doesn't have the equivalent of the Windows %0 modifiers. $0 only contains exactly what was used to start the script, so if you don't use the full path to the script (for example, if it's on the search path), the script has no way to determine where it is located.
The script uses "dirname $0
" to determine the directory it is in, then changes directory to that location.
HOME
is the environment variable that Linux programs use to locate your user home directory. We need to set it to point to the directory where the script lives, in order to trick GRAMPS into thinking that is your home directory. But Linux programs also need the file .Xauthority
in your home directory to gain permission to open a window. So first we need to set XAUTHORITY
to point to that file so that it can still be found, and then we can go ahead and set HOME
to $PWD
, which indicates the directory the script changed to earlier.
Once those values are set up, the script runs GRAMPS. Because the values of XAUTHORITY
and HOME
are set on the same line as the command to run GRAMPS, those values are only used for that command and do not carry on past the end of the script.
Maemo
If Don gets GRAMPS ported to his Nokia N810, a variation of this script ought to work there, too. That would allow keeping the data on a flash drive, and switching back and forth between PC and N810 GRAMPS. Please, Don? :)
GRAMPS 2.2
The instructions and scripts here are intended for use with GRAMPS 3.0. A similar technique could be used with GRAMPS 2.2, but doing so is discouraged due to the risk of database corruption, especially on Linux.