March 4th, 2008
While upgrading my server, I had to create a new version of Cyrus-SASL packages with the crypt patch. This turned out to be more difficult as I thought as just patching the raw source would conflict with debian patches applied after that and the package building would fail. Fortunately, I learned about (dpatch)[http://www.tuxmaniac.com/blog/2008/01/25/dpatch-just-superb-a-short-how-to/], which is a standard mechanism for patching stuff in Debian.
Once I figured out how to do it, it tunred out to be very simple:
- Unpack the original orig.tar.gz
- Apply the Debian diff (this would create a debian subdirectory)
- Edit changelog file to add a new release (so that we can keep track of it).
- Run
dpatch-edit-patch fixing_foo to create a patch. This will create a shell with mounted source package and any changes you make there will be included in the diff.
- Exit the shell without changing anything. You will change things after making sure that the patch is applied in the correct order.
- Edit
00list to set the patch ordering.
- Run
dpatch-edit-patch again now, with all the previous patches applied.
- Make the necessary changes.
- Build the target package with
debuild-pbuilder (this will download all the dependencies too).
- Install the pakcages with
dpkg -i (I could also create my private apt-repository for this. I wrote about in in a blog entry about pbuilder).
- Pin the packages so that they will not get upgraded
echo "package hold" | dpkg --set-selection
Posted in Linux | 11 Comments »
January 13th, 2008
I found this essay on Slashdot yesterday: how to recognize a good programmer. Some of the comments were quite insightful, but many followed the following pattern.
"I am a good programmer myself and I match X% of the qualities you mentioned. Therefore, your article is excellent/good/not so good/crap (depending on the value of X)
I also read two other articles on the topic:
Posted in Personal | No Comments »
November 22nd, 2007
I just came across this website: http://md5.rednoize.com, http://md5.cryptobitch.de, http://passcracking.com They have a large dictionaries of unsalted MD5/SHA passwords. I played with it for a little bit. It’s amazing and scary how little entropy there is in a simple dictionary-based passwords with few modifications! Another conclusion is that you should never use unsalted passwords in your programs.
Posted in Security | No Comments »
September 30th, 2007
Writing some shell scripts I needed to do some a little fancier variable substitution than the standard shell offers. The heavyweight solution would be to write a perl one-liner, but this is, well…, heavyweight?
Here’s a couple of patterns I used:
--parameter=$(sed -re 's/ /,/g' -e 's/(^|,)/\1file:/g' <<<$INPUT) - replaces spaces with commas and prepends file to every file.
--parameter=$(awk '{split($0, a, /@/); printf "%s-?????-of-%05d", a[1], a[2]} <<<$INPUT)' - replaces file@5 with file-?????-of-00005
--parameter=$(awk '{sub(/.*:/, ""); print $0}' <<<$INPUT) - removes everything before the colon.
Posted in Linux, Shell, Tips&Tricks | No Comments »
August 16th, 2007
Writing some bash scripts that parse command lines, I wrote this handy template with getopt. It is easy to apply even for simplest scripts.
OPTION_SPEC="help,flag1,flag2_params:"
PARSED_OPTIONS=$(getopt -n "$0" -a -o h --long $OPTION_SPEC -- "$@")
OPTIONS_RET=$?
eval set -- "$PARSED_OPTIONS"
Parsing error or no flags
if [ $OPTIONS_RET -ne 0 ] || [ $# -le 0 ]; then
usage;
die;
fi
while [ $# -ge 1 ]; do
case $1 in
--help | -h ) usage; die;;
--flag1 ) FLAG1=1;;
--flag2_params ) shift; FLAG2_PARAMS="$1";;
-- ) shift;;
* ) echo "ERROR: unknown flag $1"; usage; die;;
esac
shift
done
No more unannotated $ns in my scripts!
Posted in Shell, Tips&Tricks | 1 Comment »
August 16th, 2007
I recently had to hack a small shell script that would read files in a directory structure generated based on the date, something like 2007/08/16. The trick was that the script would look at yesterday’s file or files generated a few days ago.
A quick search on info and here’s the magic command
FILE="...$(date -d 'yesterday' +%Y/%m/%d)"
Interestingly, you can also use things like 3 days ago, next Monday, 2 months etc.
Cool!
Posted in Shell, Tips&Tricks | No Comments »
July 4th, 2007
How to (approximately) generate a top-N items list without counting the number of occurrences of all instances?
Two interesting papers I found on the topic: http://citeseer.ist.psu.edu/charikar02finding.html and http://citeseer.ist.psu.edu/jin03dynamically.html. I also somebody’s seminar powerpoint presentation explaining it.
Posted in Progs/Tools/Libs | 4 Comments »
July 4th, 2007
While playing with OSX I was wondering how to find out all the networks connections a particular process owns. On Linux I’d use netstat -p for this, which does not work on OSX.
It turns out that the solution is quite simple – lsof -i does the job and works on both Linux and OSX. Two other useful commands:
lsof -ai -p PID # all connections/sockets owned by PID
lsof -i:PORT # lists all connections/sockets with a particular PORT.
Posted in Linux, Tips&Tricks | 1 Comment »
May 2nd, 2007
Interesting link on surviving traffic storms with WordPress: not that I currently need it, but maybe in the future…
In a nutshell:
- fine tuning of Apache (adjusting #processes, keep alives and ListenBacklog to values that match your machine’s constraints).
- fine tuning of MySQL query caching
- installing WP-Cache plugin + adaptive switching on of WP-cache plugin (only in heavy-load condition)
- disabling some plugins (the ones that take up a lot of resources)
- enabling Squid caching for static content.
Posted in Linux, Tips&Tricks | 1 Comment »
May 1st, 2007
Having extensively used Linux before I found GUI configuration of OSX firewall somewhat lacking. In particular, I wanted to limit outgoing access to some IP addresses (but I can imagine you may want to play with other things as well).
I found that I could buy Flying Buttress which should allow me to do this, but I really don’t need a graphical ipfw frontend, especially the one I’d have to pay for
All I needed was to write some ipfw rules and make them persistent.
Here’s what I did:
mkdir /Library/StartupItems/CustomIPFWRules
cd !$
Created a file called StatupParameters.plist containing:
{
Description = "Custom Tadek's IPFW Rules";
Provides = ("CustomIPFWRules");
Uses = ("Network");
}
Created a file called CustomIPFWRules (the name has to match the directory name) containing a simple shell script:
#!/bin/sh
. /etc/rc.common
case "$1" in
start)
ConsoleMessage "applying tadek's ipfw rules"
ipfw add 2045 deny tcp from any to "ip_I_want_to_block" out
;;
esac
exit 0
Voila!
BTW: a useful link on playing with Firewall in OSX.
Posted in Progs/Tools/Libs, Tips&Tricks | 1 Comment »