<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Text* Snippets: TextDrive Snippets courtesy of Peter Coopers handy little app</title>
    <link>http://textsnippets.com/rss</link>
    <pubDate>Thu, 28 Feb 2008 07:58:14 GMT</pubDate>
    <description>Text* Snippets: TextDrive Snippets courtesy of Peter Coopers handy little app</description>
    <item>
      <title>Add missing empty directories in .svn</title>
      <link>http://textsnippets.com/posts/show/1416</link>
      <description>Fix errors like&lt;br /&gt;svn: Your .svn/text-base directory may be missing or corrupt; run 'svn cleanup' and try again&lt;br /&gt;svn: Can't open file 'blabla/.svn/text-base/entries': No such file or directory&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'pathname'&lt;br /&gt;&lt;br /&gt;def recurse(dir)&lt;br /&gt;  for child in dir.children&lt;br /&gt;    next unless child.directory?              # ignore files&lt;br /&gt;    next if child.basename.to_s == '.svn'     # ignore .svn directory&lt;br /&gt;    next unless (child + '.svn').exist?       # ignore unadded directories&lt;br /&gt;    text_base_dir = child + '.svn/text-base'  # path to text-base dir&lt;br /&gt;    next if text_base_dir.exist?              # ignore existing text-base dirs&lt;br /&gt;    text_base_dir.mkdir&lt;br /&gt;    puts text_base_dir&lt;br /&gt;    recurse child&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;recurse Pathname.new('.')&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 28 Feb 2008 07:58:14 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1416</guid>
      <author>steveh (Steve Hoeksema)</author>
    </item>
    <item>
      <title>moving subversion server to another machine</title>
      <link>http://textsnippets.com/posts/show/1415</link>
      <description>dump the repository to a text file&lt;br /&gt;&lt;code&gt;&lt;br /&gt;svnadmin dump repositoryPath &gt; repository.dumpfile&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;create the new repository on the new machine&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /path/to/new-repository-parent-directory&lt;br /&gt;svnadmin create repository-name&lt;br /&gt;svnadmin load repository-name &lt; repository.dumpfile&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;transfer your local svn project to the new machine. Use absolute paths!&lt;br /&gt;&lt;code&gt;&lt;br /&gt;svn switch --relocate oldurl newurl&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;svn switch --relocate http://myoldcrapserver.com/svn/myfunkyproj svn+ssh://mykickingnewserver.com/var/svn/myfunkyproj</description>
      <pubDate>Wed, 27 Feb 2008 14:28:10 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1415</guid>
      <author>deckard ()</author>
    </item>
    <item>
      <title>Tomcat connector for lighttpd:</title>
      <link>http://textsnippets.com/posts/show/1414</link>
      <description>To connect Tomcat to lighttpd use the following code:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;server.modules  += ( "mod_proxy_backend_ajp13" )&lt;br /&gt;$HTTP["url"] =~ "^/tomcat/" {&lt;br /&gt;  proxy-core.balancer = "round-robin"&lt;br /&gt;  proxy-core.protocol = "ajp13"&lt;br /&gt;  proxy-core.backends = ( "localhost:8009" )&lt;br /&gt;  proxy-core.max-pool-size = 16&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 25 Feb 2008 11:04:32 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1414</guid>
      <author>mork554 ()</author>
    </item>
    <item>
      <title>export certain revision of file from svn</title>
      <link>http://textsnippets.com/posts/show/1413</link>
      <description>Easier to just cat the revision you want and copy it over rather than try to check out a certain revision.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;svn cat -r [REV] mydir/myfile &gt; mydir/myfile&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 22 Feb 2008 14:08:47 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1413</guid>
      <author>deckard ()</author>
    </item>
    <item>
      <title>sort installed packages by size</title>
      <link>http://textsnippets.com/posts/show/1412</link>
      <description>// sort installed packages by size&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;rpm -qa --queryformat="%{size} %{name}-%{version}-%{release}\n" | sort -rn | less&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 22 Feb 2008 09:08:17 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1412</guid>
      <author>hostmaster (hostmaster)</author>
    </item>
    <item>
      <title>Django and Open-flash-charts</title>
      <link>http://textsnippets.com/posts/show/1411</link>
      <description>// Found this on the django-users mailing list, need to test&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ok, I finally got open-flash-chart to work.&lt;br /&gt;&lt;br /&gt;1. create an xhtml-file and insert (something like) this:&lt;br /&gt;&lt;br /&gt;    &lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"&lt;br /&gt;        codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/&lt;br /&gt;flash/swflash.cab#version=8,0,0,0"&lt;br /&gt;        width="600"&lt;br /&gt;        height="400"&lt;br /&gt;        id="graph-2"&lt;br /&gt;        align="middle"&gt;&lt;br /&gt;    &lt;param name="allowScriptAccess" value="sameDomain" /&gt;&lt;br /&gt;    &lt;param name="movie" value="/media/site/chart/open-flash-chart.swf?&lt;br /&gt;width=600&amp;height=400&amp;data=/chart_data/" /&gt;&lt;br /&gt;    &lt;param name="quality" value="high" /&gt;&lt;br /&gt;    &lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;br /&gt;    &lt;embed src="/media/site/chart/open-flash-chart.swf?&lt;br /&gt;width=600&amp;height=400&amp;data=/chart_data/"&lt;br /&gt;        quality="high"&lt;br /&gt;        bgcolor="#FFFFFF"&lt;br /&gt;        width="600"&lt;br /&gt;        height="400"&lt;br /&gt;        name="open-flash-chart"&lt;br /&gt;        align="middle"&lt;br /&gt;        allowScriptAccess="sameDomain"&lt;br /&gt;        type="application/x-shockwave-flash"&lt;br /&gt;        pluginspage="http://www.macromedia.com/go/getflashplayer"; /&gt;&lt;br /&gt;    &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;2. define the url for the chart, eg: (r'^chart/$',&lt;br /&gt;'www.views.charts.chart'),&lt;br /&gt;&lt;br /&gt;3. define the url for the chart-data, e.g.: (r'^chart_data/$',&lt;br /&gt;'www.views.charts.chart_data'),&lt;br /&gt;&lt;br /&gt;4. the views:&lt;br /&gt;&lt;br /&gt;def chart(request):&lt;br /&gt;&lt;br /&gt;   ### nothing really required. whatever you want to do here. points&lt;br /&gt;to the html-file created above&lt;br /&gt;&lt;br /&gt;    return render_to_response('site/charts/chart.html', {&lt;br /&gt;        'var': 'var',&lt;br /&gt;    }, context_instance=RequestContext(request) )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def chart_data(request):&lt;br /&gt;&lt;br /&gt;    import random&lt;br /&gt;&lt;br /&gt;    g = graph()&lt;br /&gt;&lt;br /&gt;    data_1 = []&lt;br /&gt;    data_2 = []&lt;br /&gt;    data_3 = []&lt;br /&gt;    for i in range(12):&lt;br /&gt;      data_1.append( random.randint(14,19) )&lt;br /&gt;      data_2.append( random.randint(8,13) )&lt;br /&gt;      data_3.append( random.randint(1,7) )&lt;br /&gt;&lt;br /&gt;    g.title('PageViews (2007)', '{color: #999999; font-size: 16; text-&lt;br /&gt;align: center}' );&lt;br /&gt;    g.bg_colour = '#ffffff'&lt;br /&gt;&lt;br /&gt;    # we add 3 sets of data:&lt;br /&gt;    g.set_data( data_1 )&lt;br /&gt;    g.set_data( data_2 )&lt;br /&gt;    g.set_data( data_3 )&lt;br /&gt;&lt;br /&gt;    # we add the 3 line types and key labels&lt;br /&gt;    g.line_dot( 3, 5, '#333333', 'Page views', 10 )&lt;br /&gt;    g.line_dot( 3, 5, '#666666', 'Visits', 10)    # &lt;-- 3px thick +&lt;br /&gt;dots&lt;br /&gt;    g.line_hollow( 2, 4, '#999999', 'Unique visitors', 10 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;g.set_x_labels( &lt;br /&gt;'J&#228;nner,Februar,M&#228;rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember'.split(',')&lt;br /&gt; )&lt;br /&gt;    g.set_x_label_style( 11, '0x666666', 2, 1)&lt;br /&gt;&lt;br /&gt;    g.set_y_max(20)&lt;br /&gt;    g.y_label_steps(4)&lt;br /&gt;    g.set_y_label_style( 10, '0x666666')&lt;br /&gt;&lt;br /&gt;    return HttpResponse(g.render())&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 21 Feb 2008 17:55:56 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1411</guid>
      <author>knmurphy ()</author>
    </item>
    <item>
      <title>script for migrating from UW-IMAP to Dovecot [PATCHED]</title>
      <link>http://textsnippets.com/posts/show/1410</link>
      <description>&lt;code&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;# A script for migrating from UW-IMAP to Dovecot&lt;br /&gt;#&lt;br /&gt;# By Andrew Ziem&lt;br /&gt;# Copyright (c) 2007 Springs Rescue Mission.  All rights reserved.&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;# Moves UW-IMAP mboxes from two locations to ~/mail so that Dovecot&lt;br /&gt;# can easily convert mboxes to Maildirs.  Mailboxes with whitespace&lt;br /&gt;# should be handled properly, and IMAP subscriptions should be preserved.&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Edit the below variables&lt;br /&gt;&lt;br /&gt;#HOME_USERS=/home&lt;br /&gt;HOME_USERS=/home/users&lt;br /&gt;&lt;br /&gt;#MAIL_SPOOL=/var/mail&lt;br /&gt;MAIL_SPOOL=/var/spool/mail&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# to this function pass the user name&lt;br /&gt;function move_mailboxlist&lt;br /&gt;{&lt;br /&gt;	if [ ! -d "$HOME_USERS/$1" ];&lt;br /&gt;	then&lt;br /&gt;		echo "Error: $HOME_USERS/$1 does not exist"&lt;br /&gt;		return 0&lt;br /&gt;	fi&lt;br /&gt;&lt;br /&gt;	# make ~/mail&lt;br /&gt;	cd "$HOME_USERS/$1"&lt;br /&gt;	mkdir mail&lt;br /&gt;	chown "$1" mail&lt;br /&gt;&lt;br /&gt;	# find each mbox and move it to ~/mail&lt;br /&gt;	if [ ! -f ".mailboxlist" ];&lt;br /&gt;	then&lt;br /&gt;		echo "Warning: .mailboxlist does not exist for $1"&lt;br /&gt;		return 0&lt;br /&gt;	fi&lt;br /&gt;	&lt;br /&gt;	# cat .mailboxlist | while read line; do mv "${line}" ./mail/; done&lt;br /&gt;	cat .mailboxlist | tr '\n' '\0' | xargs -0 mv -t ./mail/&lt;br /&gt;&lt;br /&gt;	# preserve subscriptions (to prevent manual resubscriptions)&lt;br /&gt;	mkdir Maildir&lt;br /&gt;	chown "$1" Maildir&lt;br /&gt;	cp -a .mailboxlist Maildir/subscriptions&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# move inbox from $MAIL_SPOOL to ~/mail/inbox&lt;br /&gt;function move_inbox&lt;br /&gt;{&lt;br /&gt;	if [ ! -f "${MAIL_SPOOL}/$1" ];&lt;br /&gt;	then&lt;br /&gt;		echo "Error: ${MAIL_SPOOL}/$1 does not exist"&lt;br /&gt;		return 0&lt;br /&gt;	fi&lt;br /&gt;	cp "${MAIL_SPOOL}/$1" "${HOME_USERS}/$1/mail/inbox"&lt;br /&gt;	chown "$1" "${HOME_USERS}/$1/mail/inbox"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if [ $# -eq 0 ];&lt;br /&gt;then&lt;br /&gt;	echo "First, did you edit the directory names in the script?"&lt;br /&gt;	echo "Then, if you want to do a dry run, prefix mv and cp with echo."&lt;br /&gt;	echo "Then, invoke $0 by passing one or more user names."&lt;br /&gt;	exit&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;for user in $@&lt;br /&gt;do&lt;br /&gt;	echo "*** Processing user $user"&lt;br /&gt;	move_mailboxlist $user&lt;br /&gt;	move_inbox $user&lt;br /&gt;done&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 21 Feb 2008 15:32:33 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1410</guid>
      <author>hostmaster (hostmaster)</author>
    </item>
    <item>
      <title>import data into mysql</title>
      <link>http://textsnippets.com/posts/show/1409</link>
      <description>Things to note:&lt;br /&gt;Mysql may not have access to the directory you've put the datafile. Use /tmp to overcome this problem.&lt;br /&gt;Datafile name must be the same as the mysql table you're importing to.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mysqlimport -u username -p --columns=column_1,column_2 --fields-terminated-by=',' databasename /tmp/data_file_same_as_mysql_table_name&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 20 Feb 2008 11:41:14 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1409</guid>
      <author>deckard ()</author>
    </item>
    <item>
      <title>add apache to users group</title>
      <link>http://textsnippets.com/posts/show/1408</link>
      <description>// this handy one liner is used on any new webserver..&lt;br /&gt;// puts apache into the users group to allow dev teams etc..&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sed -i 's/users:x:1000:admin/users:x:1000:admin,wwwrun/' /etc/group&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 19 Feb 2008 03:57:43 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1408</guid>
      <author>dallas (dallas)</author>
    </item>
    <item>
      <title>Run ClamAV from a system service agent account</title>
      <link>http://textsnippets.com/posts/show/1406</link>
      <description>The following instructions on how to run &lt;a href="http://www.clamav.net"&gt;ClamAV&lt;/a&gt; from a system service agent account (non-root) require an admin user account, a &lt;a href="http://www.clamav.net"&gt;ClamAV&lt;/a&gt; setup as described &lt;a href="/posts/show/1357"&gt;here&lt;/a&gt; and the creation of a clamavadmin system service agent account as described &lt;a href="/posts/show/1405"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Use at your own risk!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;First uncomment the following lines of code in the first script at http://textsnippets.com/posts/show/1405:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# create further subdirectories if necessary&lt;br /&gt;...&lt;br /&gt;#fi&lt;br /&gt;#&lt;br /&gt;#fi&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then save the file, start the script and enter the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;You are going to create a system service agent account!&lt;br /&gt;&lt;br /&gt;Enter first name: clamavadmin&lt;br /&gt;&lt;br /&gt;Note: The last name is optional and defaults to "agent" if you just press &lt;return&gt;!&lt;br /&gt;Enter last name: &lt;br /&gt;&lt;br /&gt;Note: The user shell is optional and defaults to "/usr/bin/false" if you just press &lt;return&gt;!&lt;br /&gt;Enter user shell: /bin/bash&lt;br /&gt;&lt;br /&gt;Note: The home directory is optional and defaults to "/private/var/empty" if you just press &lt;return&gt;!&lt;br /&gt;Enter home directory: /private/var/clamavadmin&lt;br /&gt;&lt;br /&gt;System service agent account:  clamavadmin  successfully created!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# test&lt;br /&gt;&lt;br /&gt;dscl . list /Groups GroupMembership&lt;br /&gt;dscl . -read /Users/clamavadmin&lt;br /&gt;dscl . -read /Groups/clamavadmin&lt;br /&gt;sudo ls -ld /private/var/clamavadmin&lt;br /&gt;sudo ls -l /private/var/clamavadmin/log/clamd.log&lt;br /&gt;sudo ls -ld /private/var/clamavadmin/tmp&lt;br /&gt;#sudo ls -l /private/var/clamavadmin/tmp/clamd   # will be created later by man clamd&lt;br /&gt;sudo find /private/var/clamavadmin \( -type f -or -type d -or -type s \) -print0 | xargs -0 sudo ls -ldG&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# add clamavadmin to group admin and group $(logname)&lt;br /&gt;# add $(logname) to group clamavadmin&lt;br /&gt;sudo dscl . -append /Groups/admin GroupMembership clamavadmin&lt;br /&gt;sudo dscl . -append /Groups/$(logname) GroupMembership clamavadmin&lt;br /&gt;sudo dscl . -append /Groups/clamavadmin GroupMembership $(logname)&lt;br /&gt;&lt;br /&gt;#sudo dscl . -delete /Groups/admin GroupMembership clamavadmin &lt;br /&gt;#sudo dscl . -delete /Groups/$(logname) GroupMembership clamavadmin  &lt;br /&gt;#sudo dscl . -delete /Groups/clamavadmin GroupMembership $(logname)   &lt;br /&gt;&lt;br /&gt;# cf. http://textsnippets.com/posts/show/1402&lt;br /&gt;dirmodes ~/Documents/ClamAV/Downloads/QueueDirectory&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# copy update_clamd_db.sh&lt;br /&gt;sudo cp /usr/local/sbin/update_clamd_db.sh /private/var/clamavadmin/update_clamd_db.sh&lt;br /&gt;sudo chown clamavadmin:clamavadmin /private/var/clamavadmin/update_clamd_db.sh&lt;br /&gt;sudo chmod 0750 /private/var/clamavadmin/update_clamd_db.sh&lt;br /&gt;ls -l /private/var/clamavadmin/update_clamd_db.sh&lt;br /&gt;&lt;br /&gt;# then change the following line in sudo nano  /private/var/clamavadmin/update_clamd_db.sh&lt;br /&gt;/opt/local/bin/freshclam -u root&lt;br /&gt;# ... to read ...&lt;br /&gt;/opt/local/bin/freshclam -u clamavadmin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# get an overview of your ClamAV file &amp; folder permissions in /opt&lt;br /&gt;sudo find /opt \( -type f -or -type d \) -iregex ".*clam.*" -print0 | xargs -0 sudo ls -ldG&lt;br /&gt;&lt;br /&gt;# set new ClamAV file &amp; folder permissions&lt;br /&gt;sudo find /opt  \( -type f -or -type d \) -iregex ".*clam.*" -print0 | xargs -0 sudo chown clamavadmin:clamavadmin&lt;br /&gt;sudo find /opt  \( -type f -or -type d \) -iregex ".*clam.*" -print0 | xargs -0 sudo chmod 0750&lt;br /&gt;&lt;br /&gt;# reset permissions&lt;br /&gt;#sudo find /opt  \( -type f -or -type d \) -iregex ".*clam.*" -print0 | xargs -0 sudo chown root:wheel  &lt;br /&gt;#sudo find /opt  \( -type f -or -type d \) -iregex ".*clam.*" -print0 | xargs -0 sudo chmod 0755&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# test&lt;br /&gt;sudo find /opt \( -type f -or -type d \) -iregex ".*clam.*" -print0 | xargs -0 sudo ls -ldG&lt;br /&gt;sudo find /opt -not -user clamavadmin \( -type f -or -type d \) -iregex ".*clam.*" -print0 | xargs -0 sudo ls -ldG&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# then modify clamd.conf&lt;br /&gt;sudo nano /opt/local/etc/clamd.conf&lt;br /&gt;&lt;br /&gt;LogFileMaxSize 10M&lt;br /&gt;LogTime yes&lt;br /&gt;FixStaleSocket yes&lt;br /&gt;TCPAddr 127.0.0.1&lt;br /&gt;MaxConnectionQueueLength 30&lt;br /&gt;MaxThreads 20&lt;br /&gt;ExitOnOOM yes&lt;br /&gt;ScanOLE2 yes  # Microsoft Office documents and .msi files&lt;br /&gt;ScanPDF yes&lt;br /&gt;ArchiveMaxFileSize 100M&lt;br /&gt;ArchiveMaxCompressionRatio 0&lt;br /&gt;#VirusEvent echo virus: %v &gt;&gt; /path/to/file.txt&lt;br /&gt;&lt;br /&gt;DatabaseDirectory /opt/local/share/clamav    # hardcoded&lt;br /&gt;#LogFile /private/var/log/clamd.log&lt;br /&gt;#TemporaryDirectory /private/var/tmp&lt;br /&gt;#DatabaseDirectory /opt/local/share/clamav&lt;br /&gt;#LocalSocket /tmp/clamd&lt;br /&gt;&lt;br /&gt;#DatabaseDirectory /private/var/clamavadmin/share/clamav&lt;br /&gt;LogFile /private/var/clamavadmin/log/clamd.log&lt;br /&gt;TemporaryDirectory /private/var/clamavadmin/tmp&lt;br /&gt;LocalSocket /private/var/clamavadmin/tmp/clamd&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# modify net.clamav.clamd.plist&lt;br /&gt;&lt;br /&gt;sudo launchctl unload -w /Library/LaunchDaemons/net.clamav.clamd.plist 2&gt;/dev/null&lt;br /&gt;sudo cp -p /Library/LaunchDaemons/net.clamav.clamd.plist /Library/LaunchDaemons/net.clamav.clamd.root-wheel&lt;br /&gt;&lt;br /&gt;sudo nano /Library/LaunchDaemons/net.clamav.clamd.plist&lt;br /&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.$&lt;br /&gt;&lt;plist version="1.0"&gt;&lt;br /&gt;&lt;dict&gt;&lt;br /&gt;        &lt;key&gt;Disabled&lt;/key&gt;&lt;br /&gt;        &lt;true/&gt;&lt;br /&gt;        &lt;key&gt;GroupName&lt;/key&gt;&lt;br /&gt;        &lt;string&gt;clamavadmin&lt;/string&gt;&lt;br /&gt;        &lt;key&gt;Label&lt;/key&gt;&lt;br /&gt;        &lt;string&gt;net.clamav.clamd&lt;/string&gt;&lt;br /&gt;        &lt;key&gt;ProgramArguments&lt;/key&gt;&lt;br /&gt;        &lt;array&gt;&lt;br /&gt;                &lt;string&gt;/opt/local/sbin/clamd&lt;/string&gt;&lt;br /&gt;                &lt;string&gt;-c&lt;/string&gt;&lt;br /&gt;                &lt;string&gt;/opt/local/etc/clamd.conf&lt;/string&gt;&lt;br /&gt;        &lt;/array&gt;&lt;br /&gt;        &lt;key&gt;RunAtLoad&lt;/key&gt;&lt;br /&gt;        &lt;true/&gt;&lt;br /&gt;        &lt;key&gt;UserName&lt;/key&gt;&lt;br /&gt;        &lt;string&gt;clamavadmin&lt;/string&gt;&lt;br /&gt;&lt;/dict&gt;&lt;br /&gt;&lt;br /&gt;sudo launchctl load -w /Library/LaunchDaemons/net.clamav.clamd.plist 2&gt;/dev/null&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# modify net.clamav.update.clamd.db.plist&lt;br /&gt;&lt;br /&gt;sudo launchctl unload -w /Library/LaunchDaemons/net.clamav.update.clamd.db.plist 2&gt;/dev/null&lt;br /&gt;sudo cp -p /Library/LaunchDaemons/net.clamav.update.clamd.db.plist /Library/LaunchDaemons/net.clamav.update.clamd.db.plist.root-wheel&lt;br /&gt;&lt;br /&gt;sudo nano /Library/LaunchDaemons/net.clamav.update.clamd.db.plist&lt;br /&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.$&lt;br /&gt;&lt;plist version="1.0"&gt;&lt;br /&gt;&lt;dict&gt;&lt;br /&gt;        &lt;key&gt;Disabled&lt;/key&gt;&lt;br /&gt;        &lt;true/&gt;&lt;br /&gt;        &lt;key&gt;GroupName&lt;/key&gt;&lt;br /&gt;        &lt;string&gt;clamavadmin&lt;/string&gt;&lt;br /&gt;        &lt;key&gt;Label&lt;/key&gt;&lt;br /&gt;        &lt;string&gt;net.clamav.update.clamd.db&lt;/string&gt;&lt;br /&gt;        &lt;key&gt;ProgramArguments&lt;/key&gt;&lt;br /&gt;        &lt;array&gt;&lt;br /&gt;                &lt;string&gt;/private/var/clamavadmin/update_clamd_db.sh&lt;/string&gt;&lt;br /&gt;        &lt;/array&gt;&lt;br /&gt;        &lt;key&gt;RunAtLoad&lt;/key&gt;&lt;br /&gt;        &lt;true/&gt;&lt;br /&gt;        &lt;key&gt;StartInterval&lt;/key&gt;&lt;br /&gt;        &lt;integer&gt;20000&lt;/integer&gt;&lt;br /&gt;        &lt;key&gt;UserName&lt;/key&gt;&lt;br /&gt;        &lt;string&gt;clamavadmin&lt;/string&gt;&lt;br /&gt;&lt;/dict&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sudo launchctl load -w /Library/LaunchDaemons/net.clamav.update.clamd.db.plist 2&gt;/dev/null&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# watch clamd.log in a second Terminal window&lt;br /&gt;open /bin/bash&lt;br /&gt;sudo tail -n 50 -f /private/var/clamavadmin/log/clamd.log&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# now restart clamd&lt;br /&gt;if [[ -e "/private/var/clamavadmin/tmp/clamd" ]]; then sudo /bin/rm -f "/private/var/clamavadmin/tmp/clamd" ; fi&lt;br /&gt;sudo /opt/local/sbin/clamd -c /opt/local/etc/clamd.conf&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# test&lt;br /&gt;(sleep 3; echo PING; sleep 3; echo exit) | sudo telnet -u /private/var/clamavadmin/tmp/clamd&lt;br /&gt;echo PING | /opt/local/bin/socat - /private/var/clamavadmin/tmp/clamd    # requires: sudo port install socat&lt;br /&gt;sudo find /private/var/clamavadmin \( -type f -or -type d -or -type s \) -print0 | xargs -0 sudo ls -ldG   # /private/var/clamavadmin/tmp/clamd&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 15 Feb 2008 20:54:31 GMT</pubDate>
      <guid>http://textsnippets.com/posts/show/1406</guid>
      <author>jv ()</author>
    </item>
  </channel>
</rss>
