<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>

<div id='messageArea'></div> <div id='tiddlerDisplay'></div> </div> <!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
* Updated [[POE Solutions]] information.
* New [[Linux Topics]] of [[IP Cameras]]
* New [[Linux Topics]] of [[usplash on Debian]]
* New [[Linux Topics]] of [[Setup privoxy with tor]]
* [[ifetch-live]] tiddler updated and operations marked stable.
* New [[ifetch-tools]] release 0.11.14
[[Notes (ifetch-live)]] for [[ifetch-live]] users.
New release of [[ifetch-tools]] version 0.14.0 on 20081107.
* [[ifetch-tools]] with motion detection now available for testing with release ifetch-tools-0.12.1. 
Setup a [[Linux Topics]] for some of the opportunities I happen to encounter. Topics added today inlcude:

* Information on setting up a Cingular wireless data card on Debian Linux.
* Getting first look at some hardware that may be of value for a [[fyeox]] solution.
* New [[Linux Topics]] of [[DigiMemo]]
* Build it live: live-build cgi frontend, http://http://cgi.build.live-systems.org
* New [[Linux Topics]] of [[SSH Tunneling]]
* Site upgraded to the latest TiddlyWiki.
* Reporting back on [[5 February 2008]] [[Google AdSense|https://www.google.com/adsense]] trial.
A couple of updates:
* [[ifetch-tools]] now at 0.9.7
* New [[Linux Topics]] of [[POE Solutions]]  
* Updated the version of TiddlyWiki for the site.
* New release of [[ifetch-tools]] 0.9.5 
* Converting site to try out TiddlyWiki.
* New [[ifetch-tools]] release 0.11.2
If you are missing a key then you can attempt two operations both of which you need to be root or have root privileges :

1.) Pull key in from internet:
{{{
gpg --keyserver subkeys.pgp.net --recv $KEY
gpg --export --armor $KEY | apt-key add -
}}}

2. Download the ascii key and add:
{{{
wget http://some.server/key.asc
apt-key add key.asc
}}}
Recently I had to create some code to test with a perl and crypt call. I had a bit of trouble getting the call and my variable to work until I found this post:
{{{
http://www.mail-archive.com/plug-discuss@lists.plug.phoenix.az.us/msg18782.html
}}}

Below is a debug example:
{{{
USERID="someuser"
OLDPASSWD="somepass"
_PSALT1=$(grep "${USERID}" /etc/shadow | awk -F: '{split($2,myarray,"$"); print myarray[2]}')
_PSALT2=$(grep "${USERID}" /etc/shadow | awk -F: '{split($2,myarray,"$"); print myarray[3]}')
_PHASH=$(grep "${USERID}" /etc/shadow | awk -F: '{print $2}')
_PSALT='\$'${_PSALT1}'\$'${_PSALT2}'\$'
echo The salt is ${_PSALT}
echo The hash is ${_PHASH}
echo $(perl -e 'print crypt("'${OLDPASSWD}'", "'${_PSALT}'")')
if [ $(perl -e 'print crypt("'${OLDPASSWD}'", "'${_PSALT}'")') == ${_PHASH} ]
then
	echo True
else
	echo False
fi
}}}
{{{
#! /bin/sh
# Simple debmirror update script example

ARCHITECTURES="i386"
SECTIONS="main,contrib,non-free,main/debian-installer"
DISTS="lenny,squeeze,sid"
REMOTE_MIRROR="ftp.us.debian.org"
LOCAL_MIRROR="/path/to/mirror/"
OPT_SOURCES="--nosource" # put this as "--source" or leave blank to have sources included
LOCK="${LOCAL_MIRROR}/mirror.lock"

if [ -f "${LOCK}" ]; then
        echo "ERUNNING: \"`basename ${0}`\" is already running."
        exit 1
else
        trap "test -f ${LOCK} && rm -f ${LOCK}; exit 0" 0 2 15

        touch ${LOCK}

        debmirror --arch="${ARCHITECTURES}" --section="${SECTIONS}" \
                --method=rsync --root=":debian" ${OPT_SOURCES} \
                --host="${REMOTE_MIRROR}" \
                --di-dists="${DISTS}" --di-arch="${ARCHITECTURES}" \
                --dist="${DISTS}" --md5sums --getcontents \
                --progress "${LOCAL_MIRROR}/debian"

fi
}}}
Virgin Code Format Criteria:
{{{
___ Code must have a changelog file.
___ Sufficient notation of operations.
___ No whitespace in coded line or in blank lines.
___ Tabs for indention and formatting.
___ Blank lines to be used for organization (no more than 2 in sequence).
}}}

Modified Code Format Criteria:
{{{
___ Code modification must be submitted as a diff patch.
___ Sufficient notation of modified operations.
___ No whitespace in coded line or in blank lines.
___ Tabs for indention and formatting.
___ Blank lines to be used for organization (no more than 2 in sequence).
}}}

Other Format Criteria:
{{{
___ 








}}}

Bounty Submitter Agrees To:
{{{
___ Surrender all ownership and rights for submitted bounty project to RJ Ent.
___ Deductions of 2% of the total bounty for each error on submitted work.
___ Only submit completed work.
}}}

Bounty Hunter Name: {{{__________________________________}}}

Bounty Project Number: {{{________________________________}}}

Bounty amount offered of {{{$_______.___}}}

Bounty work with {{{_________}}} errors, resulting in a deduction of {{{$_______.___}}}.

Both parties agree to the modified amount of {{{$_______.___}}} to be paid on this Bounty. 

Bounty Hunter,  {{{__________________________________}}} on the date of {{{_____/_____/______}}} have read and understand that I am submitting my code for the modified amount as stated above and accepting all terms.

RJ Ent, {{{________________________________}}} on the date of {{{_____/_____/______}}} has agreed to accept the Bounty submission.
These are notes how I am building a .deb for ifetch-tools I had assistance on the matter of building the .deb
from Daniel Baumann on debian-live channel. 20090123 Nelson - Initial writing.

{{{___}}} 1. Make an up to date sid chroot via debbootstrap with the following command for me:

{{{
debootstrap sid ./sid-chroot http://debian.mgr3.k12.mo.us/debian/
}}}

{{{___}}} 2. Start the chroot session:

{{{
chroot ./sid-chroot
}}}

{{{___}}} 3. Install the tools you will need to make the .deb:

{{{
apt-get install debhelper dh-make fakeroot lintian build-essential
}}}

{{{___}}} 4. Move to a location to do the work. You should make a user account in the chroot for 
building. However in these notes I will move to the /root in the chroot:

{{{
cd /root
}}}

{{{___}}} 5. Copy in your source tarball and make sure it is in the following format ifetch-tools_0.15.0.tar.gz

{{{___}}} 6. Unpack the ifetch-tools_0.15.0.tar.gz and the directory needs to follow the format ifetch-tools-0.15.0

{{{___}}} 7. Now cd to ifetch-tools-0.15.0 and I ran the following command:

{{{
dh_make -e unixabg@gmail.com -f ../ifetch-tools_0.15.0.tar.gz
}}}

Note: The above command will ask you what type of package and in my case it is single.
The output of the command should return something:

 Maintainer name : root
 Email-Address   : unixabg@gmail.com 
 Date            : Some Date When You Ran The Command
 Package Name    : ifetch-tools
 Version         : 0.15.0
 License         : blank
 Using dpatch    : no
 Using quilt     : no
 Type of Package : Single

Now you should have a debian folder in the ifetch-tools-0.15.0 folder.

{{{___}}} 8. In my case I needed to remove some things:

{{{
rm README.Debian cron.d.ex ifetch-tools.default.ex dirs docs emacsen-install.ex emacsen-remove.ex emacsen-startup.ex ifetch-tools.doc-base.EX init.d.lsb.ex manpage.1.ex manpage.sgml.ex manpage.xml.ex menu.ex postinst.ex postrm.ex preinst.ex prerm.ex watch.ex
}}}

{{{___}}} 9. Now edit the ./debian/changelog and modify there is an entry for initial release of:

{{{
   * Initial release.
}}}

{{{___}}} 10. Now edit the ./debian/control file to match want you need. Note on the descriptions:

Description wise, there are two things: a short description, and a long description.
The short description is one sentence and on the same line as 'Description:'
The long description starts on the line after 'Description:', is wrapped to 80 chars a line,
and intendented by one blank. Empty lines need to be replaced with a . that is indented with one blank,
see e.g. the output of apt-cache show gnunet for an example.

Below is my example from ifetch-tools:
{{{
Source: ifetch-tools
Section: web
Priority: optional
Maintainer: Richard Nelson <unixabg@gmail.com>
Build-Depends: debhelper (>= 7)
Standards-Version: 3.8.0
Homepage: http://ifetch-tools.rubyforge.org/

Package: ifetch-tools
Architecture: all
Depends: ${misc:Depends}, adduser, ruby, librmagick-ruby
Description: Collect, monitor, and view images from ip cameras
A set of tools that can collect images from ip based cameras, monitor the
collection process, and provide an interface to view the collected history
}}}

{{{___}}} 11. Now edit copyright and below is an example of mine:

{{{
Author: Richard Nelson <unixabg@gmail.com> 
Download: http://ifetch-tools.rubyforge.org/
Files: *
Copyright: (C) 2005-2009 Richard Nelson <unixabg@gmail.com>
License: GPL-2+
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

On Debian systems, the complete text of the GNU General Public License
can be found in /usr/share/common-licenses/GPL-2 file.

}}}

{{{___}}} 12. Now edit the rules file and below is an example of mine:

{{{
#!/usr/bin/make -f

clean:
	dh_testdir
	dh_testroot

	dh_clean

build:

install:

binary: binary-indep

binary-arch:

binary-indep:
	dh_testdir
	dh_testroot
	dh_installchangelogs changelog
	dh_installdocs
	dh_installexamples
	dh_installman
	dh_installdirs
	dh_install
	dh_installinit
	dh_installlogrotate wwwifetch-logrotate.conf
	dh_strip
	dh_compress -Xifetch-tools.conf -Xcamera_number.conf
	dh_fixperms
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

.PHONY: clean build install binary binary-arch binary-indep
}}}

{{{___}}} 13. I want ifetch-tools to play nice at startup and follow information at http://wiki.debian.org/LSBInitScripts, so rename init.d.ex to ifetch-tools.init and below is my ifetch-tools.init

{{{
### BEGIN INIT INFO
# Provides:          ifetch-tools
# Required-Start:    $remote_fs $network $syslog
# Required-Stop:     $remote_fs $network $syslog
# Should-Start:      $local_fs 
# Default-Start:     2 3 4 5
# Default-Stop:      1
# Short-Description: Tools to collect IP Camera images. 
# Description:       Tools to collect, monitor, and view images from IP Cameras 
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/wwwifetch
DAEMON_CONFIG="/etc/ifetch-tools/ifetch-tools.conf"
NAME=ifetch-tools
DESC=ifetch-tools
_UID=ifetch-tools

# Test the the DAEMON 
test -x $DAEMON || exit 0

# Test for the ifetch-tools.conf
test -f $DAEMON_CONFIG || exit 0


LOGDIR=/var/log/ifetch-tools
PIDFILE=/var/run/$NAME.pid
DODTIME=10                   # Time to wait for the server to die, in seconds
                            # If this value is set too low you might not
                            # let some servers to die gracefully and
                            # 'restart' will not work

set -e

running_pid()
{
    # Check if a given process pid's cmdline matches a given name
    pid=$1
    name=$2
    [ -z "$pid" ] && return 1
    [ ! -d /proc/$pid ] &&  return 1
    cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|tail -n 1 |cut -d : -f 1`
    # Is this the expected child?
    [ "$cmd" != "$name" ] &&  return 1
    return 0
}

running()
{
# Check if the process is running looking at /proc
# (works for all users)

    # No pidfile, probably no daemon present
    [ ! -f "$PIDFILE" ] && return 1
    # Obtain the pid and check it against the binary name
    pid=`cat $PIDFILE`
    running_pid $pid $DAEMON || return 1
    return 0
}

start_daemon()
{
    echo -n "Starting $DESC: "
    start-stop-daemon --start --chuid $_UID --quiet --background --make-pidfile --pidfile $PIDFILE \
        --exec $DAEMON 
    echo "$NAME."
}

stop_daemon()
{
    signal=$1
    echo -n "Stopping $DESC: "
    kill -s $signal $(pgrep -u $_UID ifetch)
    [ -n "$DODTIME" ] && sleep "$DODTIME"s
    if running ; then
        echo "Cannot stop $NAME!"
        exit 1
    else
        echo "$NAME stopped."
        rm -f $PIDFILE
    fi
    return 0
}

case "$1" in
  start)
        if running ; then
            echo "$NAME appears to be already running."
        else
            start_daemon
        fi
        ;;
  stop)
        if running ; then
           stop_daemon INT
        else
            echo "$NAME is not running."
        fi
        ;;
  force-stop)
        if running ; then
            echo "Forcefully stopping $DESC and camera collecting."
            stop_daemon KILL
        else
            echo "$NAME is not running."
        fi
        ;;
  reload)
        stop_daemon INT
        start_daemon
        ;;
  force-reload)
        if running ; then
            echo "Forcefully reloading $DESC and camera collecting."
            stop_daemon KILL
            start_daemon
        else
            echo "$NAME is not running."
        fi
        ;;
  restart)
        echo "Restarting $DESC."
        if running ; then
           stop_daemon INT
           start_daemon
        else
           echo "No running process, try start."
        fi
        ;;
  status)
    echo -n "$NAME is "
    if running ;  then
        echo "running."
    else
        echo "not running."
        exit 1
    fi
    ;;
  *)
    N=/etc/init.d/$NAME
    # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $N {start|stop|restart|force-reload|status|force-stop}" >&2
    exit 1
    ;;
esac

exit 0
}}}

{{{___}}} 14. Now create a ifetch-tools.install file, below is an example of mine:

{{{
htdocs			/usr/share/ifetch-tools
templates			/usr/share/ifetch-tools
ifetch			/usr/bin
wwwifetch			/usr/bin
}}}

{{{___}}} 15. In my case I need ifetch-tools to have a user id to run under so I created two files ifetch-tools.postinst

{{{
#!/bin/sh

set -e

case "${1}" in
	configure)
		adduser --system --shell /bin/sh --disabled-password --no-create-home --gecos 'ifetch-tools account' --group ifetch-tools

		mkdir -p /var/lib/ifetch-tools
		chown ifetch-tools:ifetch-tools /var/run/ifetch-tools /var/lock/ifetch-tools /var/log/ifetch-tools /etc/ifetch-tools /var/lib/ifetch-tools -R
		chmod 700 /etc/ifetch-tools /etc/ifetch-tools/cameras

		if [ ! -e /etc/ifetch-tools/ifetch-tools.conf ]
		then
			cp /usr/share/doc/ifetch-tools/examples/ifetch-tools.conf /etc/ifetch-tools/ifetch-tools.conf
			chmod 600 /etc/ifetch-tools/ifetch-tools.conf
			chown ifetch-tools:ifetch-tools /etc/ifetch-tools/ifetch-tools.conf
		fi
		;;

	abort-upgrade|abort-remove|abort-deconfigure)

		;;

	*)
		echo "postinst called with unknown argument \`${1}'" >&2
		exit 1
		;;
esac

#DEBHELPER#

exit 0
}}}

and ifetch-tools.postrm

{{{
#!/bin/sh

set -e

case "${1}" in
	remove)
		if [ -x /usr/sbin/deluser ]
		then
			deluser --system ifetch-tools
		fi
		;;

	purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)

		;;

	*)
		echo "postrm called with unknown argument \`${1}'" >&2
		exit 1
		;;
esac

#DEBHELPER#

exit 0
}}}

{{{___}}} 16. Now when you think things are ready in the /root in the chroot I ran this command:

{{{
cd ifetch-tools-0.15.0 && dpkg-buildpackage -us -uc -rfakeroot && cd ../ && lintian -i *.changes
}}}

You will have to examine your output from here to see if you have missed anything. :)
Sample for Apexis camera:
{{{ffmpeg -f mjpeg -i http://ip.address/videostream.cgi -y output.avi -t 5}}}
Start script:
{{{
#!/bin/sh

# Set chroot patch
_CHROOT="/path/to/sid-chroot"

# Make dev and proc available to Sid Debian chroot.
mount -o bind /dev ${_CHROOT}/dev
mount -o bind /proc ${_CHROOT}/proc

# Some apps want devpts ready.
chroot ${_CHROOT} mount devpts /dev/pts -t devpts

# Start cron
chroot ${_CHROOT} /etc/init.d/cron start

# Startexim
chroot ${_CHROOT} /etc/init.d/exim4 start

# Start apache2
chroot ${_CHROOT} /etc/init.d/apache2 start

# Basic listing just as a test.
chroot ${_CHROOT} ls
}}}
__Update__: With the new ~NetworkManager Applet http://projects.gnome.org/NetworkManager/ in Gnome I do not use the below information anymore.

__Old Information Below__ 

I recently changed phones to a Razor V3 and I have modified the scripts to use with the device.

1. Plugged in phone and used the scripts. The device that it detected as was /dev/ttyACM0
2. Modified scripts
3. Ran the command 
{{{
pppd call cingular-razor
}}}

/etc/ppp/peers/cingular-razor - http://www.fyeox.com/downloads/info/cingular-razor
/etc/ppp/chat-razor-v3         - http://www.fyeox.com/downloads/info/chat-razor-v3
<html><hr></html>
Recently I had the opportunity to test out Cingular wireless data G3 card on [[Debian Linux]].  The steps I used to get the card detected and then connected are as follows:

1.) Inserted card and did an lspci to determine the card type of: Network controller: Option N.V. Qualcomm ~MSM6275 UMTS chip
2.) Did a brief bit of research and determined that I needed to add  nozomi module.
3.) Used module-assistant to add nozomi module.
4.) Setup ppp and used http://advantedgecomputing.com/opensource/gc83linux.html as a starting point. My specifics can be downloaded at:

/etc/ppp/peers/cingular - http://www.fyeox.com/downloads/info/cingular
/etc/ppp/chat-gt3g         - http://www.fyeox.com/downloads/info/chat-gt3g
Background: #f9f9f9
Foreground: #000
PrimaryPale: #f0f0f0
PrimaryLight: #BFBFBF
PrimaryMid: #06a
PrimaryDark: #009
SecondaryPale: #5ab3ff
SecondaryLight: #BFBFBF
SecondaryMid: #033
SecondaryDark: #00C
TertiaryPale: #f0f0f0
TertiaryLight: #BFBFBF
TertiaryMid: #39F
TertiaryDark: #008
Background: #f9f9f9
Foreground: #000
PrimaryPale: #e0e0e0
PrimaryLight: #d5d5d5
PrimaryMid: #676767
PrimaryDark: #A52A2A
SecondaryPale: #F7F7F7
SecondaryLight: #bfbfbf
SecondaryMid: #d0d0d0
SecondaryDark: #A52A2A
TertiaryPale: #f0f0f0
TertiaryLight: #e4e4e4
TertiaryMid: #e0e0e0
TertiaryDark: #A52A2A
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
!RGB hexadecimal 216-color "Web safe" palette
Source: Paul Petterson, revised by Eric Shulman
|bgcolor(#FFF):FFF |bgcolor(#CCC):CCC |bgcolor(#999):999 |bgcolor(#666):@@color(white):666@@ |bgcolor(#333):@@color(white):333@@ |bgcolor(#000):@@color(white):000@@ |bgcolor(#FC0):~FC0 |bgcolor(#F90):F90 |bgcolor(#F60):@@color(white):F60@@ |bgcolor(#F30):@@color(white):F30@@ |>|>|>|>|>| |
|bgcolor(#9C0):9C0 |>|>|>| |bgcolor(#C90):C90 |bgcolor(#FC3):~FC3 |bgcolor(#FC6):~FC6 |bgcolor(#F96):F96 |bgcolor(#F63):@@color(white):F63@@ |bgcolor(#C30):@@color(white):C30@@ |>|>|>| |bgcolor(#C03):@@color(white):C03@@ |
|bgcolor(#CF0):~CF0 |bgcolor(#CF3):~CF3 |bgcolor(#330):@@color(white):330@@ |bgcolor(#660):@@color(white):660@@ |bgcolor(#990):990 |bgcolor(#CC0):~CC0 |bgcolor(#FF0):~FF0 |bgcolor(#C93):C93 |bgcolor(#C63):@@color(white):C63@@ |bgcolor(#300):@@color(white):300@@ |bgcolor(#600):@@color(white):600@@ |bgcolor(#900):@@color(white):900@@ |bgcolor(#C00):@@color(white):C00@@ |bgcolor(#F00):@@color(white):F00@@ |bgcolor(#F36):@@color(white):F36@@ |bgcolor(#F03):@@color(white):F03@@ |
|bgcolor(#9F0):9F0 |bgcolor(#CF6):~CF6 |bgcolor(#9C3):9C3 |bgcolor(#663):@@color(white):663@@ |bgcolor(#993):993 |bgcolor(#CC3):~CC3 |bgcolor(#FF3):~FF3 |bgcolor(#960):@@color(white):960@@ |bgcolor(#930):@@color(white):930@@ |bgcolor(#633):@@color(white):633@@ |bgcolor(#933):@@color(white):933@@ |bgcolor(#C33):@@color(white):C33@@ |bgcolor(#F33):@@color(white):F33@@ |bgcolor(#C36):@@color(white):C36@@ |bgcolor(#F69):@@color(white):F69@@ |bgcolor(#F06):@@color(white):F06@@ |
|bgcolor(#6F0):6F0 |bgcolor(#9F6):9F6 |bgcolor(#6C3):6C3 |bgcolor(#690):690 |bgcolor(#996):996 |bgcolor(#CC6):~CC6 |bgcolor(#FF6):~FF6 |bgcolor(#963):@@color(white):963@@ |bgcolor(#630):@@color(white):630@@ |bgcolor(#966):@@color(white):966@@ |bgcolor(#C66):@@color(white):C66@@ |bgcolor(#F66):@@color(white):F66@@ |bgcolor(#903):@@color(white):903@@ |bgcolor(#C39):@@color(white):C39@@ |bgcolor(#F6C):@@color(white):~F6C@@ |bgcolor(#F09):@@color(white):F09@@ |
|bgcolor(#3F0):3F0 |bgcolor(#6F3):6F3 |bgcolor(#390):390 |bgcolor(#6C0):6C0 |bgcolor(#9F3):9F3 |bgcolor(#CC9):~CC9 |bgcolor(#FF9):~FF9 |bgcolor(#C96):C96 |bgcolor(#C60):@@color(white):C60@@ |bgcolor(#C99):C99 |bgcolor(#F99):F99 |bgcolor(#F39):@@color(white):F39@@ |bgcolor(#C06):@@color(white):C06@@ |bgcolor(#906):@@color(white):906@@ |bgcolor(#F3C):@@color(white):~F3C@@ |bgcolor(#F0C):@@color(white):~F0C@@ |
|bgcolor(#0C0):0C0 |bgcolor(#3C0):3C0 |bgcolor(#360):@@color(white):360@@ |bgcolor(#693):693 |bgcolor(#9C6):9C6 |bgcolor(#CF9):~CF9 |bgcolor(#FFC):FFC |bgcolor(#FC9):~FC9 |bgcolor(#F93):F93 |bgcolor(#FCC):FCC |bgcolor(#F9C):~F9C |bgcolor(#C69):@@color(white):C69@@ |bgcolor(#936):@@color(white):936@@ |bgcolor(#603):@@color(white):603@@ |bgcolor(#C09):@@color(white):C09@@ |bgcolor(#303):@@color(white):303@@ |
|bgcolor(#3C3):3C3 |bgcolor(#6C6):6C6 |bgcolor(#0F0):0F0 |bgcolor(#3F3):3F3 |bgcolor(#6F6):6F6 |bgcolor(#9F9):9F9 |bgcolor(#CFC):CFC |>|>| |bgcolor(#C9C):~C9C |bgcolor(#969):@@color(white):969@@ |bgcolor(#939):@@color(white):939@@ |bgcolor(#909):@@color(white):909@@ |bgcolor(#636):@@color(white):636@@ |bgcolor(#606):@@color(white):606@@ |
|bgcolor(#060):@@color(white):060@@ |bgcolor(#363):@@color(white):363@@ |bgcolor(#090):090 |bgcolor(#393):393 |bgcolor(#696):696 |bgcolor(#9C9):9C9 |>|>| |bgcolor(#FCF):FCF |bgcolor(#F9F):~F9F |bgcolor(#F6F):@@color(white):~F6F@@ |bgcolor(#F3F):@@color(white):~F3F@@ |bgcolor(#F0F):@@color(white):~F0F@@ |bgcolor(#C6C):@@color(white):~C6C@@ |bgcolor(#C3C):@@color(white):~C3C@@ |
|bgcolor(#030):@@color(white):030@@ |bgcolor(#0C3):0C3 |bgcolor(#063):@@color(white):063@@ |bgcolor(#396):396 |bgcolor(#6C9):6C9 |bgcolor(#9FC):9FC |bgcolor(#CFF):CFF |bgcolor(#39F):39F |bgcolor(#9CF):9CF |bgcolor(#CCF):CCF |bgcolor(#C9F):~C9F |bgcolor(#96C):@@color(white):96C@@ |bgcolor(#639):@@color(white):639@@ |bgcolor(#306):@@color(white):306@@ |bgcolor(#90C):@@color(white):90C@@ |bgcolor(#C0C):@@color(white):~C0C@@ |
|bgcolor(#0F3):0F3 |bgcolor(#3F6):3F6 |bgcolor(#093):093 |bgcolor(#0C6):0C6 |bgcolor(#3F9):3F9 |bgcolor(#9FF):9FF |bgcolor(#9CC):9CC |bgcolor(#06C):@@color(white):06C@@ |bgcolor(#69C):69C |bgcolor(#99F):99F |bgcolor(#99C):99C |bgcolor(#93F):@@color(white):93F@@ |bgcolor(#60C):@@color(white):60C@@ |bgcolor(#609):@@color(white):609@@ |bgcolor(#C3F):@@color(white):~C3F@@ |bgcolor(#C0F):@@color(white):~C0F@@ |
|bgcolor(#0F6):0F6 |bgcolor(#6F9):6F9 |bgcolor(#3C6):3C6 |bgcolor(#096):096 |bgcolor(#6FF):6FF |bgcolor(#6CC):6CC |bgcolor(#699):699 |bgcolor(#036):@@color(white):036@@ |bgcolor(#369):@@color(white):369@@ |bgcolor(#66F):@@color(white):66F@@ |bgcolor(#66C):@@color(white):66C@@ |bgcolor(#669):@@color(white):669@@ |bgcolor(#309):@@color(white):309@@ |bgcolor(#93C):@@color(white):93C@@ |bgcolor(#C6F):@@color(white):~C6F@@ |bgcolor(#90F):@@color(white):90F@@ |
|bgcolor(#0F9):0F9 |bgcolor(#6FC):6FC |bgcolor(#3C9):3C9 |bgcolor(#3FF):3FF |bgcolor(#3CC):3CC |bgcolor(#399):399 |bgcolor(#366):@@color(white):366@@ |bgcolor(#069):@@color(white):069@@ |bgcolor(#039):@@color(white):039@@ |bgcolor(#33F):@@color(white):33F@@ |bgcolor(#33C):@@color(white):33C@@ |bgcolor(#339):@@color(white):339@@ |bgcolor(#336):@@color(white):336@@ |bgcolor(#63C):@@color(white):63C@@ |bgcolor(#96F):@@color(white):96F@@ |bgcolor(#60F):@@color(white):60F@@ |
|bgcolor(#0FC):0FC |bgcolor(#3FC):3FC |bgcolor(#0FF):0FF |bgcolor(#0CC):0CC |bgcolor(#099):099 |bgcolor(#066):@@color(white):066@@ |bgcolor(#033):@@color(white):033@@ |bgcolor(#39C):39C |bgcolor(#36C):@@color(white):36C@@ |bgcolor(#00F):@@color(white):00F@@ |bgcolor(#00C):@@color(white):00C@@ |bgcolor(#009):@@color(white):009@@ |bgcolor(#006):@@color(white):006@@ |bgcolor(#003):@@color(white):003@@ |bgcolor(#63F):@@color(white):63F@@ |bgcolor(#30F):@@color(white):30F@@ |
|bgcolor(#0C9):0C9 |>|>|>| |bgcolor(#09C):09C |bgcolor(#3CF):3CF |bgcolor(#6CF):6CF |bgcolor(#69F):69F |bgcolor(#36F):@@color(white):36F@@ |bgcolor(#03C):@@color(white):03C@@ |>|>|>| |bgcolor(#30C):@@color(white):30C@@ |
|>|>|>|>|>| |bgcolor(#0CF):0CF |bgcolor(#09F):09F |bgcolor(#06F):@@color(white):06F@@ |bgcolor(#03F):@@color(white):03F@@ |>|>|>|>|>| |
On my older development notebook Gnome seemed to draw more resources than I want to share. So I switched to LXDE and setup Conky. Below is my config:
{{{

# Default colors and also border colors, grey90 == #e5e5e5
default_color white

own_window_colour black


# Create own window instead of using desktop (required in nautilus)
own_window yes
own_window_type desktop
#own_window_type normal
own_window_transparent yes
own_window_class Conky
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

# Text alignment, other possible values are commented
#alignment top_left
alignment top_right
#alignment bottom_left
#alignment bottom_right

# Gap between borders of screen and text
gap_x 4

gap_y 4

# stuff after 'TEXT' will be formatted on screen


TEXT
${color }$nodename ${hr}
${color #9fb6cd}Kernel:$alignr${color }$kernel
${color #9fb6cd}UpTime: $alignr${color }$uptime
${cpugraph 20,130 000000 ffffff}
${color #9fb6cd}Load: $alignr${color }$loadavg
${color #9fb6cd}Processes: $alignr${color }$processes
${color #9fb6cd}Running: $alignr${color }$running_processes
${color #9fb6cd}Highest CPU:
${color #ddaa00} ${top name 1}$alignr${top_mem cpu 1}
${color lightgrey} ${top name 2}$alignr${top cpu 2}
${color lightgrey} ${top name 3}$alignr${top cpu 3}
${color lightgrey} ${top name 4}$alignr${top cpu 4}
${color lightgrey} ${top name 5}$alignr${top cpu 5}
${color #9fb6cd}Highest MEM:
${color #ddaa00} ${top_mem name 1}$alignr${top_mem mem 1}
${color lightgrey} ${top_mem name 2}$alignr${top_mem mem 2}
${color lightgrey} ${top_mem name 3}$alignr${top_mem mem 3}
${color lightgrey} ${top_mem name 4}$alignr${top_mem mem 4}
${color lightgrey} ${top_mem name 5}$alignr${top_mem mem 5}
${color #9fb6cd}CPU TEMP:$alignr${color}${hddtemp /dev/sda}
${color #9fb6cd}MEM: $alignr${color } $memperc% $mem/$memmax
${membar 3,100}
${color #9fb6cd}ROOT: $alignr${color }${fs_free /}/${fs_size /}
${fs_bar 3,100 /}



${if_empty ${exec cat /proc/net/arp | grep eth0}}
	${alignc}${color white}wlan0: ${addr wlan0}$color
	${alignc}${wireless_essid wlan0} (${wireless_ap wlan0})
	${color 009900}${wireless_link_bar wlan0}$color
	down: ${downspeed wlan0}k/s ${alignr}up: ${upspeed wlan0}k/s
	total: ${totaldown wlan0} ${alignr} total: ${totalup wlan0}
	${downspeedgraph wlan0 15,150 000000 000099} ${alignr}${upspeedgraph wlan0 15,150 000000 990000}
${else}
	${alignc}${color white}eth0: ${addr eth0}$color
	down: ${downspeed eth0}k/s ${alignr}up: ${upspeed eth0}k/s
	total: ${totaldown eth0} ${alignr} total: ${totalup eth0}
	${downspeedgraph eth0 15,150 000000 000099} ${alignr}${upspeedgraph eth0 15,150 000000 990000}
${endif}


${color #9fb6cd}${time %a, } $alignr${color }${time %e %B %G}
${color #9fb6cd}${time %Z, }$alignr${color }${time %H:%M:%S}
${color lightgray}${execi 40000 cal}
${texeci 60 pymetar EGBB}

}}}
I had reason to need to count occurrences of denied requests by IP address on a  dansguardian log file and I used the following snippet:
{{{
grep DENIED /var/log/dansguardian/access.log | awk '{count[$4]++}END{for(j in count) print j,"("count[j]" DENIED Hits)"}'
}}}
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
<html><a href="http://ww.debian.org"><img src="http://www.fyeox.com/images/openlogo-50.png"></a> </html> [[Debian Linux]] offers rock solid stability and easy maintenance/upgrades. 

See [[Progress Linux]]
The Debian Live project aims to create Debian Live ~CDs, ~DVDs, ~USB-stick and netboot images for the Lenny release (and newer).

Information about the project can be found at http://live.debian.net/ .

Build your live ~CDs online with cgi-frontend web-front. Visit http://cgi.build.live-systems.org to see the interface to build your live CD.

[[RJ Ent]] can build custom Live ~CDs or netboot images to meet your needs.
{{{
#!/bin/sh

set -e

Lock ()
{
	LOCKFILE="/var/lock/$(basename ${0})"

	# Checking lock file
	if [ -f "${LOCKFILE}" ]
	then
		echo "system locked"
		exit 1
	fi

	# Creating lock trap
	trap 'ret=${?}; '"rm -f \"${LOCKFILE}\";"' exit ${ret}' EXIT

	# Creating lock file
	touch "${LOCKFILE}"
}

REPOSITORY="${1}"

TARGET="/srv/mirror/"

#SOURCE="ftp.ch.debian.org"
SOURCE="server1"

#SOURCE_CD="cdimage.debian.org"
SOURCE_CD="server1"

# ARCHITECTURES is an exclude variable. List what you do not want.
# alpha amd64 arm armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
ARCHITECTURES="alpha arm armel hppa hurd-i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc"

for ARCHITECTURE in ${ARCHITECTURES}
do
	DEBIAN_EXCLUDES="${DEBIAN_EXCLUDES} --exclude Contents-${ARCHITECTURE}* --exclude binary-${ARCHITECTURE} --exclude installer-${ARCHITECTURE} --exclude *_${ARCHITECTURE}.*deb --exclude *_${ARCHITECTURE}.*udeb"
	DEBIANCD_EXCLUDES="${DEBIANCD_EXCLUDES} --exclude ${ARCHITECTURE}"
done

DEBIAN_EXCLUDES="${DEBIAN_EXCLUDES} --exclude source --exclude /pool/*/*/*/*.dsc --exclude /pool/*/*/*/*.diff.gz --exclude /pool/*/*/*/*.tar.gz --exclude /pool/*/*/*/*/*.dsc --exclude /pool/*/*/*/*/*.diff.gz --exclude /pool/*/*/*/*/*.tar.gz"
DEBIANCD_EXCLUDES="${DEBIANCD_EXCLUDES} --exclude source --exclude multi-arch"

if [ -z "${REPOSITORY}" ]
then
	REPOSITORY="all"
fi

if [ "${REPOSITORY}" != "all" ]
then
	Lock
fi

case "${REPOSITORY}" in
	all)
		"${0}" debian
		"${0}" debian-security
		"${0}" debian-volatile
		"${0}" debian-cd
#		"${0}" debian-cdimage
		;;

	debian)
		rsync -aPv --delete --delete-excluded --progress --stats \
			${SOURCE}::debian \
			${DEBIAN_EXCLUDES} \
			${TARGET}/debian
		;;

	debian-security)
		rsync -aPv --delete --delete-excluded --progress --stats \
			${SOURCE}::debian-security \
			${DEBIAN_EXCLUDES} \
			${TARGET}/debian-security
		;;

	debian-volatile)
		rsync -aPv --delete --delete-excluded --progress --stats \
			${SOURCE}::debian-volatile \
			${DEBIAN_EXCLUDES} \
			${TARGET}/debian-volatile
		;;

	debian-cd)
		rsync -aPv --delete --delete-excluded --progress --stats \
			${SOURCE_CD}::debian-cd \
			${DEBIANCD_EXCLUDES} \
			--exclude debian-*-CD-*.iso --exclude debian-*-DVD-*.iso \
			--exclude debian-live-* \
			${TARGET}/debian-cd
		;;

	debian-cdimage)
		rsync -aPv --delete --delete-excluded --progress --stats \
			${SOURCE_CD}::cdimage \
			${DEBIANCD_EXCLUDES} \
			--exclude debian-*-CD-*.iso --exclude debian-*-DVD-*.iso \
			--exclude .debian-mirror --exclude archive --exclude release --exclude snapshot* \
			--exclude unofficial --include unofficial/non-free \
			--exclude lenny_live_beta1 \
			${TARGET}/debian-cdimage
		;;
esac
}}}
''preseed.cfg'' references:
http://www.debian.org/releases/stable/i386/apbs04.html.en

''Example 1 - Single Drive''
First let me describe the anticipated equipment: 
{{{__}}} i386 Processor
{{{__}}} 1 network card
{{{__}}} 1 sata drive.

{{{
# Locale sets language and country.
d-i debian-installer/locale string en_US

# Keyboard selection.
#d-i console-tools/archs select at
d-i console-keymaps-at/keymap select us
# Example for a different keyboard architecture
#d-i console-keymaps-usb/keymap select mac-usb-us

# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
d-i netcfg/choose_interface select auto

# To pick a particular interface instead:
#d-i netcfg/choose_interface select eth1

# If you have a slow dhcp server and the installer times out waiting for
# it, this might be useful.
#d-i netcfg/dhcp_timeout string 60

# If you prefer to configure the network manually, uncomment this line and
# the static network configuration below.
#d-i netcfg/disable_dhcp boolean true

# If you want the preconfiguration file to work on systems both with and
# without a dhcp server, uncomment these lines and the static network
# configuration below.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually

# Static network configuration.
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/confirm_static boolean true

# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain

# Disable that annoying WEP key dialog.
d-i netcfg/wireless_wep string
# The wacky dhcp hostname that some ISPs use as a password of sorts.
d-i netcfg/dhcp_hostname string radish

# If non-free firmware is needed for the network or other hardware, you can
# configure the installer to always try to load it, without prompting. Or
# change to false to disable asking.
#d-i hw-detect/load_firmware boolean true

# Use the following settings if you wish to make use of the network-console
# component for remote installation over SSH. This only makes sense if you
# intend to perform the remainder of the installation manually.
#d-i anna/choose_modules string network-console
#d-i network-console/password password r00tme
#d-i network-console/password-again password r00tme

# If you select ftp, the mirror/country string does not need to be set.
#d-i mirror/protocol string ftp
d-i mirror/country string manual
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# Suite to install.
#d-i mirror/suite string testing
# Suite to use for loading installer components (optional).
#d-i mirror/udeb/suite string testing

# Controls whether or not the hardware clock is set to UTC.
d-i clock-setup/utc boolean true

# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string US/Eastern

# Controls whether to use NTP to set the clock during the install
d-i clock-setup/ntp boolean true
# NTP server to use. The default is almost always fine here.
#d-i clock-setup/ntp-server string ntp.example.com

# If the system has free space you can choose to only partition that space.
#d-i partman-auto/init_automatically_partition select biggest_free

# Alternatively, you can specify a disk to partition. The device name must
# be given in traditional non-devfs format.
# Note: A disk must be specified, unless the system has only one disk.
# For example, to use the first SCSI/SATA hard disk:
#d-i partman-auto/disk string /dev/sda
d-i partman-auto/disk string /dev/sda
# In addition, you'll need to specify the method to use.
# The presently available methods are: "regular", "lvm" and "crypto"
#d-i partman-auto/method string lvm

# If one of the disks that are going to be automatically partitioned
# contains an old LVM configuration, the user will normally receive a
# warning. This can be preseeded away...
d-i partman-lvm/device_remove_lvm boolean true
# The same applies to pre-existing software RAID array:
d-i partman-md/device_remove_md boolean true
# And the same goes for the confirmation to write the lvm partitions.
d-i partman-lvm/confirm boolean true

# You can choose one of the three predefined partitioning recipes:
# - atomic: all files in one partition
# - home:   separate /home partition
# - multi:  separate /home, /usr, /var, and /tmp partitions
d-i partman-auto/choose_recipe select atomic

# Or provide a recipe of your own...
# The recipe format is documented in the file devel/partman-auto-recipe.txt.
# If you have a way to get a recipe file into the d-i environment, you can
# just point at it.
#d-i partman-auto/expert_recipe_file string /hd-media/recipe

# If not, you can put an entire recipe into the preconfiguration file in one
# (logical) line. This example creates a small /boot partition, suitable
# swap, and uses the rest of the space for the root partition:
d-i partman-auto/expert_recipe string                        \
      boot-root ::                                                      \
              4000 50 10000 ext3                                  \
                      $primary{ } $bootable{ }                    \
                      method{ format } format{ }                 \
                      use_filesystem{ } filesystem{ ext3 }   \
                      mountpoint{ / }                                 \
              .                                                            \
              500 10000 1000000000 ext3                     \
                      method{ format } format{ }                 \
                      use_filesystem{ } filesystem{ ext3 }   \
                      mountpoint{ /vz }                              \
              .                                                            \
              64 512 300% linux-swap                          \
                      method{ swap } format{ }                  \
              .

# This makes partman automatically partition without confirmation, provided
# that you told it what to do using one of the methods above.
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true

# Base system installation
d-i base-installer/kernel/image string linux-image-2.6-686

# Account setup
d-i passwd/root-login boolean true
# echo "password" | mkpasswd -s -m md5
d-i passwd/root-password-crypted password i$1$FkpCYlz/$OvZmd251FfQ5d9vw6lQ4v/
#d-i passwd/root-password-crypted password *

d-i passwd/make-user boolean false
#d-i passwd/user-fullname string Debian User
#d-i passwd/username string user
# echo "password" | mkpasswd -s -m md5
#d-i passwd/user-password-crypted password $1$k5eOqkIx$qHWDJHUF4BnbuCWRvxG441
#d-i passwd/user-password-crypted password *

#d-i passwd/user-uid string 1000
#d-i passwd/user-default-groups string admin audio cdrom dialout floppy video plugdev netdev powerdev

# Apt setup
d-i apt-setup/non-free boolean false
d-i apt-setup/contrib boolean false
d-i apt-setup/use_mirror boolean true
d-i apt-setup/services-select multiselect security, volatile
d-i apt-setup/security_host string systems
d-i apt-setup/volatile_host string systems
d-i apt-setup/source boolean false

# Package selection
tasksel tasksel/first multiselect
#tasksel tasksel/desktop multiselect

#d-i pkgsel/include string
d-i pkgsel/upgrade select full-upgrade

# Boot loader installation
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i grub-installer/password-crypted password $1$FkpCYlz/$OvZmd251FfQ5d9vw6lQ4v/
#d-i grub-installer/password-crypted password $1$k5eOqkIx$qHWDJHUF4BnbuCWRvxG441
# echo "password" | mkpasswd -s -m md5
#d-i grub-installer/password-crypted password *

### Finishing up the installation
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean true

# unfortunately, d-i doesn't clean up on itself
#d-i preseed/late_command string apt-get clean
}}}

''preseed.cfg'' references:
http://www.debian.org/releases/stable/i386/apbs04.html.en

''Example 2 - RAID''
First let me describe the anticipated equipment: 
{{{__}}} amd64 Processor
{{{__}}} 1 network card
{{{__}}} 2 sata drive of the same size.

{{{
# Locale sets language and country.
d-i debian-installer/locale string en_US

# Keyboard selection.
#d-i console-tools/archs select at
d-i console-keymaps-at/keymap select us
# Example for a different keyboard architecture
#d-i console-keymaps-usb/keymap select mac-usb-us

# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
d-i netcfg/choose_interface select auto

# To pick a particular interface instead:
#d-i netcfg/choose_interface select eth1

# If you have a slow dhcp server and the installer times out waiting for
# it, this might be useful.
#d-i netcfg/dhcp_timeout string 60

# If you prefer to configure the network manually, uncomment this line and
# the static network configuration below.
#d-i netcfg/disable_dhcp boolean true

# If you want the preconfiguration file to work on systems both with and
# without a dhcp server, uncomment these lines and the static network
# configuration below.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually

# Static network configuration.
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/confirm_static boolean true

# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain

# Disable that annoying WEP key dialog.
d-i netcfg/wireless_wep string
# The wacky dhcp hostname that some ISPs use as a password of sorts.
#d-i netcfg/dhcp_hostname string radish

# If non-free firmware is needed for the network or other hardware, you can
# configure the installer to always try to load it, without prompting. Or
# change to false to disable asking.
#d-i hw-detect/load_firmware boolean true

# Use the following settings if you wish to make use of the network-console
# component for remote installation over SSH. This only makes sense if you
# intend to perform the remainder of the installation manually.
#d-i anna/choose_modules string network-console
#d-i network-console/password password r00tme
#d-i network-console/password-again password r00tme

# If you select ftp, the mirror/country string does not need to be set.
#d-i mirror/protocol string ftp
d-i mirror/country string manual
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# Suite to install.
#d-i mirror/suite string testing
# Suite to use for loading installer components (optional).
#d-i mirror/udeb/suite string testing

# Controls whether or not the hardware clock is set to UTC.
d-i clock-setup/utc boolean true

# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string US/Eastern

# Controls whether to use NTP to set the clock during the install
d-i clock-setup/ntp boolean true
# NTP server to use. The default is almost always fine here.
#d-i clock-setup/ntp-server string ntp.example.com

# NOTE: this option is of beta release quality and should be used carefully

# The method should be set to "raid".
d-i partman-auto/method string raid
# Specify the disks to be partitioned. They will all get the same layout,
# so this will only work if the disks are the same size.
d-i partman-auto/disk string /dev/sda /dev/sdb

# Next you need to specify the physical partitions that will be used. 
d-i partman-auto/expert_recipe string        \
      multiraid ::                                        \
              10000 5000 10000 raid               \
                      $primary{ } method{ raid }   \
              .                                              \
              200% 512 300% raid                      \
                      method{ raid }                   \
              .                                              \
              500 10000 1000000000 raid       \
                      method{ raid }                   \
              .

# Last you need to specify how the previously defined partitions will be
# used in the RAID setup. Remember to use the correct partition numbers
# for logical partitions.
# Parameters are:
# <raidtype> <devcount> <sparecount> <fstype> <mountpoint> \
#          <devices> <sparedevices>
# RAID levels 0, 1, 5, 6 and 10 are supported; devices are separated using "#"
d-i partman-auto-raid/recipe string \
    1 2 0 ext3 /                             \
          /dev/sda1#/dev/sdb1          \
    .                                            \
    1 2 0 swap -                           \
          /dev/sda5#/dev/sdb5          \
    .                                            \
    0 2 0 ext3 /vz                         \
          /dev/sda6#/dev/sdb6          \
    .

# This makes partman automatically partition without confirmation.
d-i partman-md/confirm boolean true
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true


}}}

partman-auto-recipe: http://d-i.alioth.debian.org/svn/debian-installer/installer/doc/devel/partman-auto-recipe.txt
Advanced commands: http://d-i.alioth.debian.org/manual/en.i386/apbs05.html
[[GNU General Public License]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
A few months ago while doing some research on easy ways to get information from a notepad to the PC I discovered the DigiMemo http://www.acecad.com.tw/ . I read several opinions and what I found was that (IMHO) most people who did not like the DigiMemo did not understand what it was. So I decided to try one. I tested the http://www.acecad.com.tw/dm692.html and I also purchased the http://www.acecad.com.tw/pf100.html .

* The DigiMemo 692 get operates as described and I used links from http://www.acecad.com.tw/digimemo-dl.html to work with my Debian notebook. ''Rating: Cool!''

* The PF100 was ok, but it did not fit the device well due to what I would call workmanship defects. ''Rating: Weak''
[[RJ Ent]] is moving to FYEOX providing Linux operational consulting and solutions.

Copyright (C) 2007 Richard Nelson <unixabg@gmail.com>
http://www.gnu.org/copyleft/gpl.html

Information on this wiki is Copyright (C) 2007-2014 Richard Nelson <unixabg@gmail.com>

This information is free; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This work is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

On Debian systems, the complete text of the GNU General Public License
can be found in /usr/share/common-licenses/GPL file.
Recently I have switched to Gnome3 from LXDE and each person is entitled to their own opinion. Gnome3 is mostly ok but seems heavy switching from LXDE. So this is a placeholder for tips that I may need with Gnome3.

To truly edit network connections run:
{{{
nm-connection-editor
}}}
Encrypt the file and gpg will ask you for a passphrase:
{{{
gpg -c somefile.txt
# Note to specify a recipient use something like:
gpg --encrypt -r unixabg@gmail.com somefile.txt
}}}
The above command will generate a somefile.txt.gpg. Now to extract the information:
{{{
gpg -d somefile.txt.gpg
}}}
Now you could host on a web server and send output to stdout with something like:
{{{
wget http://somesite/somefile.txt.gpg -O - | gpg -o -
}}}
Last you could host on a web server and pull out specific data with something like:
{{{
wget http://somesite/somefile.txt.gpg -O - | gpg -o - | grep someDataPattern
}}}
* Setup and testing  [[Google AdSense|https://www.google.com/adsense]]. I have had a few people mention to me that some people like it. I will report back in some stretch of time to offer feedback with a rating of it.

* Update 20081231: Well it has not been a year but I had some time over the holidays and my report is that  [[Google AdSense|https://www.google.com/adsense]] is really cool. However, it is not worth my time to include. I made less than $5.00 in a year, so for me and people who look at my site it is not of value for me to put on my page.

* Update 20140119: I intend to attempt some video training and again it was recommended to me to put ads on. So I will test again and report back after some time of testing.

I am starting this tiddler to have a place to document potential hardware for ideas like [[fyeox]]. My first hardware for examination is from http://www.devonit.com/ . Look back here and at the fyeox tiddler for progress.
Image size: 640x480
Compression: lowest
This tiddler is for IP Cameras that I have tested, and believe to operate without issue using [[ifetch-tools]]. If you would like to donate a camera to the project for testing that would be nice. At this point I am only listing cameras here that I believe to operate without issue using [[ifetch-tools]]. (So please understand that just because you send me a camera does not mean it will be listed here.)
* ~TV-IP201 - Tested and works with default information as listed in the [[ifetch-tools]]/conf/example.conf.example
* Axis IP Cameras - Models I have tested inlcude 200, 206w, 207, 221, and 2100. All these cameras work with information as listed in the [[ifetch-tools]]/conf/example.conf.example
fyeox.com site management https://rjent.mtngrove.com:2096/webmail/x3/ or https://fyeox.com:2096/webmail/x3/
Create a container: {{{lxc-create -n $name -t debian}}}
Start a container: {{{lxc-start -n $name}}}
Start a container detached: {{{lxc-start -n $name -d}}}
Stop a container: {{{lxc-stop -n $name}}}
Access the serial console of a container: {{{lxc-console -n $name}}}

References:
 http://blog.foaa.de/2010/05/lxc-on-debian-squeeze/.
 http://wiki.progress-linux.org/software/lxc/
 http://www.kernel.org/doc/Documentation/devices.txt
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for  legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.1|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|

***/

//{{{

// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin)
	{
	version.extensions.LegacyStrikeThroughPlugin = true;

config.formatters.push(
{
	name: "legacyStrikeByChar",
	match: "==",
	termRegExp: /(==)/mg,
	element: "strike",
	handler: config.formatterHelpers.createElementAndWikify
});

} // end of "install only once"
//}}}
Recently I needed to upgrade an old ltsp session server that was setup as kiosk session server to offer only firefox. In the past I had installed kde which I locked down with the kiosktool. However upon this upgrade I tried only installing the gdm, metacity and iceweasel (along with the plugins I needed). Then I setup an .xsession script which looks as below:

{{{
metacity &
iceweasel
}}}
Linux Topics is a place to discuss recent research on various items I think need documented (alphabetic order).  

* [[Archive Keys]]
* [[LXContainers]]
* [[SSH Key Authentication]]
* [[Linux Kiosk Server]]
* [[Shell Tips]]
* [[Cingular wireless data connection on Linux]]
* [[DigiMemo]]
* [[Hardware for hacking]]
* [[IP Camera Setup]]
* [[IP Cameras]]
* [[iptables Example]]
* [[openssl]]
* [[POE Solutions]]
* [[Setup privoxy with tor]]
* [[SSH Tunneling]]
* [[Notes (ifetch-tools)]]
* [[usplash on Debian]]

[[fyeox]]

[[ifetch-live]]

[[ifetch-tools]]

[[Debian Linux]]

[[Progress Linux]]

[[Debian Live]]

[[Linux Topics]]

TiddlyWiki

[[Internal Links]]

[[Notes (ifetch-live)]]

[[Notes (ifetch-tools)]]

Netboot is a method booting workstations from the network. Netboot provides the versatility to provide many types of solutions.
* wireshark
* nmap
* dsniff (includes arpspoof)
* mtr
* bing

A sample use of bing and mtr for site 2 site diagnostics below:
{{{
#!/bin/sh -e -x
##############################################################################################
# 20090327 Nelson
# - Initial writing of the script that uses bing and mtr to gain diagnostics to resolve 
#   connection issue between provider and site.
##############################################################################################
NUMBER_OF_TESTS='3'			# Number of times you want to run the tool.
SLEEP_TIME='20'				# Time to sleep in seconds between runs
IP_ADDRESS_LOCAL='127.0.0.1'		# Local address best to be the router first.
IP_ADDRESS_REMOTE='a.b.c.d'		# a.b.c.d is the remote address
BING_SAMPLES='200'			# Number of samples see man.
MTR_COUNT='200'				# Number of count see man.
LOG_FILE='./diagnostic.log'		# Path to log file will be the current directory.
################################################################################################
i='0'				
while [ $i -lt $NUMBER_OF_TESTS ]
do
	date >> $LOG_FILE
	bing -P -e $BING_SAMPLES -z -w $IP_ADDRESS_LOCAL $IP_ADDRESS_REMOTE >> $LOG_FILE
	mtr -r -c $MTR_COUNT $IP_ADDRESS_REMOTE >> $LOG_FILE
	i=$[$i+1]
	sleep $SLEEP_TIME
done
}}}
Information at this site is provided under the [[GNU General Public License]].

Basic setup instructions:
* Procure compliant hardware
* Configure a .local-LOCAL_HOOK_VER config file
* Download ifetch-live CD
* Boot your system with the newly downloaded ifetch-live CD
* System prep the hard drives 
* Pull in your custom .local-LOCAL_HOOK_VER file
* Reboot the system

{{{____}}} * Procure compliant hardware:
{{{
Procure compliant hardware to the ifetch-live Debian-Live cd. Version listed relative to the time of writing, 
Current binary.iso are based on Lenny. If you buy a support contract, tested hardware will be recommended. 
}}}
{{{____}}} * Configure a .local-LOCAL_HOOK_VER config file:
{{{
# Make a scratch area.
mkdir scratch
cd scratch

# Download a copy of the latest customer-template.local. Version listed relative to the time of writing.
wget http://www.fyeox.com/ifetch-live/ifetch-tools-customer-template.tgz

# Extract the file
tar xzf  ifetch-tools-customer-template.tgz

# Now edit the appropriate files for your setup, then tar czf name.local-LOCAL_HOOK_VER (with appropriate files).
}}}
{{{____}}} * Download ifetch-live CD:
{{{
Download and burn http://www.fyeox.com/ifetch-live/iso/
}}}
{{{____}}} * Boot your system and login with the newly downloaded ifetch-live CD:
{{{
username: ifetch
password: live
}}}
{{{____}}} * System prep the hard drives:
{{{
#WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
#  ** Performing the below steps will cause data loss on your drive! **
#
# First become the root user.
sudo su

# Erase the drives mbr.
dd if=/dev/zero of=/dev/sda  bs=512  count=1

# Turn the entire drive in to an ext3 filesystem.
# This example assumes only 1 drive if you have more proceed accordingly.
mkfs.ext3 /dev/sda
}}}
{{{___}}} Load the Customer-File-DATE.local-LOCAL_HOOK_VER on the system:

{{{
# Pull in .local file.
wget http://www.fyeox.com/ifetch-live/Customer-File-DATE.local-LOCAL_HOOK_VER

# Set some permissions
chown -R ifetch-tools:ifetch-tools /data/sda
}}}
{{{____}}} * Reboot the system
{{{____}}} * Check your boot feedback if not on site at http://www.pastebin.ca
Information at this site is provided under the [[GNU General Public License]].

''Base ifetch-tools setup example with [[Debian Linux]] on the first sata drive (/dev/sda) and a  sata storage drive (/dev/sdb) .''
If at any time in this example you have trouble please use the forums at http://rubyforge.org/projects/ifetch-tools/ . If you need $$ support or consulting on ifetch-tools you are welcome to email the author at unixabg@gmail.com , which may elect to provide support and consulting for a fee. On a paid solicitation please include a subject line of **pay-support-ifetch-tools** to ensure that your email will not be filtered."
* Download netinstall cd of Debian Linux
* Perform a base install of Debian Linux with one user ifetch 
* Boot in to the base install of Debian Linux
* Log in as root
* Disable /etc/cron.daily/find by adding exit 0 after the top comments section
{{{____}}} * Install ifetch-tools required packages:
{{{
apt-get install librmagick-ruby ruby
}}}
{{{____}}} * Install ntpdate and setup a crontab to keep time correct:
{{{
# Install ntpdate
apt-get install ntpdate

# Have cron run ntpdate once a day. So open the crontab editor
crontab -e

# Now add the line
0 0 * * * /usr/sbin/ntpdate pool.ntp.org
}}}
{{{____}}}*  Prep /dev/sdb as follows:
{{{
# *** WARNING THIS WILL ERASE ALL DATA ON /dev/sdb ***
# Use fdisk to create primary partition 1 as the entire drive.
fdisk /dev/sdb

# Write changes to disk. 
# Format drive as ext3 with mkfs.ext3 (or your choice of file system).
mkfs.ext3 /dev/sdb1
}}}
{{{____}}}* Create the mount point, in our example case we will use a mount point of /data/device:
{{{
mkdir -p /data/sdb1
}}}
{{{____}}}* Add the drive in /etc/fstab, below is an example entry:
{{{
/dev/sdb1       /data/sdb1      ext3    defaults,noatime         0       0
}}}
{{{____}}}* Mount the drive and create our storage folders:
{{{
mount /dev/sdb1

# Check to see if it is mounted by viewing the list of mounted drives with the mount command
mount

# Beyond 0.15.x ifetch-tools will be shipping as a .deb and folder creations is now configured 
# in the camera.conf or in the global ifetch-tools.conf

# Make sure the ifetch user can write to the folders we just created
chown -R ifetch-tools:ifetch-tools /data/sdb1/*
}}}
{{{____}}}* Install ruby with:
{{{
apt-get install ruby
}}}
{{{____}}}* Install openssh-server for remote management.
{{{
apt-get install openssh-server
}}}
{{{____}}}* Change user to the root user:
{{{
su root
}}}
{{{____}}}* Confirm you are the root user:
{{{
whoami
}}}
{{{____}}}* Go to the http://rubyforge.org/projects/ifetch-tools/ to download the latest ifetch-tools as a .deb.
{{{____}}}* Install the ifetch-tools .deb file:
{{{
# Please note 0.15.4 is the latest version as of editing this section.
dpkg -i ifetch-tools_0.15.4-1_all.deb
}}}
{{{____}}}* Edit the /etc/ifetch-tools/ifetch-tools.conf file:
{{{
# Read the file when you open it. You will need to edit the path and other settings you may want to modify:
vim /etc/ifetch-tools/ifetch-tools.conf
}}}
{{{____}}}* Configure a conf file for each camera:
{{{
# In /etc/ifetch-tools/cameras is the location to put camera conf files. Configure one per camera.
}}}
{{{____}}}* Attempt to access the http://localhost:2000 page and then the http://localhost:2000 for more information of the status of you setup via a web browser.
{{{____}}}* If all ok to here the last thing to do is to make sure time is set correct then have [[ifetch-tools]] startup at boot time:
{{{
# Add the following to the /etc/rc.local
######################
## Set date at boot
/usr/sbin/ntpdate pool.ntp.org
}}}
OpenDNS is a really neat place that allows you the ability to filter based on DNS. I had kicked this idea around for some time and ironically I stumbled across it while trying to find a way to provide _good_ content filtering on a WRT54GL. Anyhow getting going was easy and the hardest part was getting my dynamic sites setup to work, so I elected to use ddclient and borrowed some config information from http://www.opendns.com/support/article/192 and in no time I was up at each site I work with.
OpenVZ is a tool to create Virtual Private Servers. More information on OpenVZ can be found at http://wiki.openvz.org and the user guide is available at http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf

''Limitations:'' I had need to build [[Debian Live]] images and this was fine for images other than usb-hdd due to vfat not being a virtualized filesystem present in /proc/filesystems in the container.

Below are some notes for myself with respect to the time of writing:

1. At the time of initial writing this wiki entry, the user guide suggests hardware raid and seem to frown on software raid saying "...software mirroring RAID might suit too as a last resort."

2. Note Choosing Virtual Private Server ID Section - "ID 0 is used for the Hardware Node itself. You cannot and should not try to create a Virtual
Private Server with ID 0. OpenVZ reserves the IDs ranging from 0 to 100. Though OpenVZ uses only ID 0, different versions might use additional Virtual Private Servers IDs for internal needs. To facilitate upgrading, please do not create Virtual Private Servers with IDs below 101."

3. Basic operations http://wiki.openvz.org/Basic_operations_in_OpenVZ_environment

__OpenVZ Cheat Sheet with CTID=101__

__Create:__  {{{vzctl create 101}}}
__Hostname:__ {{{vzctl set 101 --hostname test101.my.org --save}}}
__IP Address:__ {{{vzctl set 101 --ipadd 10.0.186.1 --save}}}
__Name Server:__ {{{vzctl set 101 --nameserver 10.0.2.1 --save}}}
__Start On Node Boot:__ {{{vzctl set 101 --onboot yes --save}}}
__Start:__ {{{vzctl start 101}}}
__Status:__ {{{vzctl status 101}}}
__Root Password:__ {{{vzctl set 101 --userpasswd root:test}}}
__Execute Command__: {{{vzctl exec 101 ps ax}}}
__Enter CTID__ {{{vzctl enter 101}}}
__Stop__: {{{vzctl stop 101}}} 
__Restart:__ {{{vzctl restart 101}}}
__Destroy:__: {{{vzctl destroy 101}}}
__List VPS:__ {{{vzlist 101}}}
__List Status of VPS:__ {{{cat /proc/vz/veinfo}}}
__Quoat:__ {{{vzctl set 101 --diskspace 245G:250G --save}}}
__Enable Time__ {{{vzctl set 101 --capability sys_time:on --save}}}
20080212 Update
* Tested ~WAPPOE by Linksys: The kit is good and works out of the box. Only does 5v.  ''Rating: Cool!'' 
* Tested ~DWL-P200 from ~D-Link: The kit is good and works out of the box with 5v and 12v selector on splitter. ''Rating: Cool!'' 
20070403 
* Tested ~USR5446 POE Kit: The kit is simple to installed and was tested with a ~TrendNet ~TV-IP201. Solution tested for usage in an [[ifetch-tools]] video deployment.  ''Rating: Cool!'' (Item has been discontinued.)
* Tested 3Com ~IntelliJack 3CNJ220 and POE injector 3CNJPSE: I did not test the management tools since they were not required on project. The device fit well in flush mount and external wall box. Both items functioned as described. ''Rating: Ok''
Add the DEBCONF_DEBUG=developer kernel parameter and you'll see it in syslog (in lines containing 'INPUT')
See output of: {{{debconf-get-selections --installer}}}
<html><a href="http://www.progress-linux.org"><img src="http://wiki.progress-linux.org/logo.png"></a> </html>is a preferred choice for solutions by [[RJ Ent]]. 
[[RJ Ent]] is the name that I use for my consulting services. I namely use <html><a href="http://ww.debian.org"><img src="http://www.fyeox.com/images/openlogo-50.png"></a> </html> to solve problems that are not easy to solve with an unnamed Operating System. :)
Notes I took for bad drive of /dev/sdb on server I replaced. These are not general instructions only notes for myself.
* Mark drive failed on array.
{{{
mdadm --manage /dev/md1 --fail /dev/sdb2
}}}
* Remove failed drive on array.
{{{
mdadm --manage /dev/md1 --remove /dev/sdb2
}}}
* Shutdown system.
{{{
halt
}}}
* Replace defective drive with new drive having capacity >= defective drive.
* Startup system.
* Copy partition table from sda to sdb.
{{{
sfdisk -d /dev/sda | sfdisk /dev/sdb
}}}
* Add drive to array.
{{{
mdadm --manage /dev/md1 --add /dev/sdb2
}}}
* Rebuild should start and you can see progress with /proc/mdstat.
{{{
cat /proc/mdstat
}}}
Notes on this topic came from conversation with from Daniel Baumann on debian-live channel securing server access.

1. Create a new ssh key on your client with:
{{{
ssh-keygen -t rsa -b 4096
}}}
It needs to be rsa and not dsa, since dsa is broken and cannot be used anymore.
It needs to be >=4096 otherwise it's too short and could be broken by brute force 'too' easily.

2. Since we want to use that newly generated ssh key for only one machine, for increased security, we don't use the same key for several machines,  you can place it somewhere in your .ssh, such as:
{{{
~/.ssh/identity.d/FQND
}}}
This means, you would have the following two files:
{{{
~/.ssh/identity.d/FQDN
~/.ssh/identity.d/FQDN.pub
}}}

3. Configure your ~/.ssh/config so that it knows what keyfile for what machine to use, like this:
{{{
Host FQDN
     Hostname FQDN
     User username
     IdentityFile ~/.ssh/identity.d/FQDN
}}}
Replace 'username' with the name of the unprivileged user that you created on the server.

4. You need to copy the keyfile to your server, with the following command:
{{{
ssh-copy-id -i ~/.ssh/idendity.d/FQDN username@FQDN
}}}

5. Disable password authentication on the server, so login to the server, with:
{{{
ssh username@FQDN
}}}
Become root, and edit /etc/ssh/sshd_config, there, you'll set:
{{{
PasswordAuthentication no
}}}
Disable root login with setting:
{{{
PermitRootLogin no
}}}
Additionally, you also have to disable usage of PAM, otherwise you can still login with password through the pam back end, therefore set:
{{{
UsePAM no
}}}

6. ''CAUTION:'' if you've did something wrong on the way, you're going to lock yourself out, means, make sure that keyauth is working before you disable password out. Otherwise you're going to need local admin support ;) If you are ok then restart ssh with:
{{{
/etc/init.d/ssh restart
}}}

Done.
Tunneling through firewalls to service equipment is easier with ssh if firewall is running ssh. As an example consider:
{{{
A - remote computer
B - ssh server
C - target machine, behind firewall
}}}
Now if you want to tunnel from A port 7777 <=> C port 22 you would do:
{{{
 ssh  -L 7777:C:22  userID@B 
}}}
Then in a new terminal try:
{{{
ssh -p 7777 userID@C
}}}
<<tag Linux>>
There are many ways to use udev and I wanted one to do hotplug backups based a devices disk label. And from the disk label a given action would take place. There are all kinds of ways to do this and if you search around the net there are many examples to start from this is just what I ended up with. Note that I did all my testing with ext2 formatted drives.

On the backup system, I first I created ''/etc/udev/rules.d/10-hotplug-sd-backup.rules''. I made 10 since I wanted to make sure it got ran first and I assume that will do it.
{{{
# General test for drive inserted
#ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/usr/sbin/hotplug-backup.sh $end{ID_FS_LABEL}"

# Custom - rule for the hard disk call test to perform backups
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/path/to/hotplug-script/hotplug-sd-backup.sh %k $env{ID_FS_LABEL}"
}}}

Next I created ''/etc/tools/hotplug-sd-backup.sh''
{{{
#!/bin/bash
#
###############################################################################
# This script is called from /etc/udev/rules.d/   and two params: device label
# 
###############################################################################
# Main script
# Send log information on backup start
logger "udev backup: started at `date` on device ${1} labeled ${2}."

# Do stuff here.

logger "udev backup: ended at `date` on device ${1} labeled ${2}."

}}}

Now if you encounter timeout issues with your media as I did then you may want to consider having the hotplug script just drop a trigger file out to be used as a test with a cron job.

{{{

#!/bin/bash
#
###############################################################################
# 20110623 Nelson
# - Have udev make a touch file that a cron job will run for.
# 20110615 Nelson
# - Initial writing.
#
###############################################################################
# This script is called from /etc/udev/rules.d/   and two params: device label
#
###############################################################################
# Main script
logger "udev backup: at `date` detected device ${1} labeled ${2}."

# Start case to select the drive label requested action
case "${2}" in
	full)
		# Send log information on what we are backing up
		logger "udev backup: writing backup trigger for ${2} ."
		echo "/dev/${1}" > /path/to/backup.full
		;;

	*)
		# Send log information on what we are backing up
		logger "udev backup: event triggered but no match found label ${2} action requtested."
		;;
esac

logger "udev backup: trigger setup attempt finished at `date`."


}}}

Now have a cron job for this script to test for the tigger file. Note that there is no run lock file so be careful on your cron time and time to complete. I set mine to test at midnight and my job only takes about 20 minutes to complete and only tests once per day.

{{{

#!/bin/bash
#
###############################################################################
# 20110623 Nelson
# - Initial writing.
#
###############################################################################
#

BACKUPTEST='/path/to/backup.full'

###############################################################################
# Main script
if [ -f ${BACKUPTEST} ]
then
	# Test for mount point directory.
	if [ ! -d /media/backup ]
	then
		echo "Creating mount point of /media/backup ."
		mkdir -p "/media/backup"
	else
		echo "Mount point of /media/backup already exists."
	fi

	# Mount the labeled device
	echo "Attempting mount -t auto $(cat ${BACKUPTEST}) /media/backup at `date`."
	mount -t auto $(cat ${BACKUPTEST}) "/media/backup/${2}"

	# See man rsync to know what is going on.
	rsync -av --del /path/to/backup "/media/backup/${2}"

	echo "Flushing data with sync at `date`."
	sync

	echo "Attempting unmount of /media/backup at `date`."
	umount "/media/backup"

	echo "Removing ${BACKUPTEST} ."
	rm "${BACKUPTEST}"

	echo "Attempt ending at `date`."
fi


}}}
Using find to ignore case:
{{{
find /path -type f -iname '*.txt'
}}}

Find email with mboxgrep:
{{{
#Search by date sent
mboxgrep '^Date:.*201(1|2|3|4)'

#Search to ignore case and <term>
mboxgrep -i -B <term>

# Script to step throught a bunch of folders
for i in `ls`
do
	if [ -d "${i}/owmail" ]
	then
		for mailbox in `ls ${i}/owmail/`
		do
			#echo "mboxgrep -i -B ${1} ${i}/owmail/${mailbox}"
			# First extract by date to file.
			mboxgrep '^Date:.*(Aug |Sep |Oct |Nov |Dec )2011' ${i}/owmail/${mailbox} -o ${i}_${mailbox}_tmp
			# Next extract by keyword to file.
			mboxgrep -i -B ${1} ${i}_${mailbox}_tmp -o ${i}_${mailbox}_${1}
		done
	fi
done

}}}
This is a basic example of the steps to setup an anonymous connection to the web using privoxy and tor, with Debian.

privoxy - Privacy Enhancing Proxy

tor - The second-generation onion router

Basic setup steps are below.

{{{___}}} * Install privoxy (which installs tor as well on Debian)
{{{
apt-get install privoxy
}}}

{{{___}}} * Modify the privoxy config file to use tor
{{{
vi /etc/privoxy/config
 - Then uncomment the line with forward-socks4a  /  127.0.0.1:9050 .
}}}

{{{___}}} * Restart privoxy
{{{
/etc/init.d/privoxy restart
}}}

{{{___}}} * To use you will need to ocnfigure your browser to proxy with privoxy
{{{
127.0.0.1:8118
}}}
Below are some tips that I get asked from time to time.

General prompt:
{{{
export PS1="\u@\h:\e[0;31m\w\e[m$ "
alias ll='ls -aFl'
}}}

Update Copyright from a project folder:
{{{
for file in $(rgrep '2005-2009' * | awk -F: '{ print $1 }'); do sed -i -e 's|2005-2009|2005-2010|g' "$file"; done
}}}
[[RJ Ent]] - Linux operational consulting.
<html><img src="http://www.fyeox.com/images/ifetch.png" width=100 heigth=100 ></html>
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
/* Adjust header height by editing the padding*/
.headerShadow {position:relative; padding:0.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:0.5em 0em 1em 1em; left:0px; top:0px;}
'TiddlyWiki' is a really neat self contained wiki availible at http://www.tiddlywiki.com which I am testing for web site operations. 

Editing information and documentation links below:

http://www.tiddlywiki.org/
http://tiddlywikiguides.org/index.php?title=TiddlyWiki_Guides
http://tiddlywikitips.com/
{{{

####################################################################
# Example provided by cody.somerville@canonical.com
####################################################################

####################################################################
# General 
####################################################################

# Once installation is complete, automatically power off.
d-i finish-install/reboot_in_progress note
d-i debian-installer/exit/poweroff boolean true

####################################################################
# Installation Sources
####################################################################

# Configure the sources.list
d-i mirror/country string manual
d-i mirror/http/hostname  string archive.ubuntu.com
d-i mirror/http/directory string /ubuntu/
d-i apt-setup/use_mirror boolean true
d-i apt-setup/mirror/error select Change mirror
d-i apt-setup/multiverse boolean true
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true

####################################################################
# Networking
####################################################################

# Network Configuration
d-i netcfg/choose_interface select auto
d-i netcfg/disable_dhcp boolean false
d-i netcfg/wireless_wep string
d-i netcfg/get_hostname string ubuntu
d-i netcfg/dhcp_options select Do not configure the network at this time
d-i netcfg/dhcp_failed note
d-i netcfg/dhcp_timeout string 3

####################################################################
# Disk Partitioning / Boot loader
####################################################################

### Disk Partitioning ###

# Configure auto partitioner
d-i partman-auto/automatically_partition select use_device
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman-auto/disk string /dev/sda

# Do not filter out disks with mounted partitions.
d-i partman/filter_mounted boolean false
# Remove existing software RAID partitions if they exist.
d-i partman-md/device_remove_md boolean true
# Do not encrypt user's home directory.
d-i user-setup/encrypt-home boolean false
# Do not require mount points for partitions with filesystems.
d-i partman-basicfilesystems/no_mount_point boolean false

# Partition without confirmation
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select Finish partitioning and write changes to disk
d-i partman/confirm boolean true

### Boot loader ###

# This one makes grub-installer install to the MBR even if it finds some other OS
d-i grub-installer/with_other_os boolean true
d-i grub-installer/only_debian boolean true
d-i grub-installer/bootdev string /dev/sda

####################################################################
# Localizations / Timezone
####################################################################

### Locale ###
d-i debian-installer/locale string en_US

### Timezone ###
d-i time/zone select US/Pacific
d-i clock-setup/utc boolean true
d-i clock-setup/ntp boolean false
d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string us

####################################################################
# User Creation
####################################################################

# Root User
d-i passwd/root-login boolean false

# Mortal User
d-i passwd/user-fullname string Ubuntu
d-i passwd/username string ubuntu
d-i user-setup/allow-password-empty boolean true
d-i passwd/user-password ubuntu
d-i passwd/user-password-again ubuntu
d-i passwd/auto-login boolean true
}}}
VirtualBox is a x86 virtualization solution.

To get usb to work correct I had to add the below to my /etc/fstab and you need to select an appropriate devgid, I selected the vboxusers gid which in my case was 113:
{{{
#vboxusers:x:113
none     /proc/bus/usb     usbfs      devgid=113,devmode=664    0    0
}}}
I had an opportunity to work on setting up a wireless bridge setup to offer network services at a remote building. I had recommended to me the hardware of  Linksys WRT54GL. And it was a very easy hardware to work with. This device is pretty popular and lots of various firmwares available. I really wanted to use the ~FreeWRT but I ended up using the dd-wrt which works well and easy to setup. The firmware I used for the WRT54GL was http://www.dd-wrt.com/dd-wrtv2/downloads/stable/dd-wrt.v24%20SP1/Consumer/Linksys/WRT54GL_1.1/dd-wrt.v24_mini_generic.bin , it was recommended to me on irc. I just followed the steps at http://dd-wrt.com/wiki/index.php/Wireless_Bridge site. I also setup with WAP for security. 
fyeox - For Your Eyes Only eXchange/eXperience

Originally I registered fyeox.com with the idea of making a web interface to openssl, but never got motivated, although I think there is still a need.  But, I am changing hosting providers and I need a name to follow the rest of my work I want to share. So for the unforeseen future I shall hence forward be using fyeox.com domain for all my research and work.

[[ifetch-tools]] is the most recent bits of work and it currently has my attention in conjunction with [[Debian Live]].

I recently made a mistake on a remote branch and I accidently deleted it with:
{{{
git push orgin :myRemoteBranch
}}}

I wanted to do:
{{{
git push orgin myRemoteBranch
}}}

I found this article http://stackoverflow.com/questions/4323886/how-to-undelete-a-deleted-remote-branch and the answer was:
{{{
git push origin myRemoteBranch:myRemoteBranch
}}}
I thought I would share how to git your code and I am using an alioth.debian.org account. I will refer to [[ifetch-tools]] for this example:

{{{___}}} 1. Unpack the ifetch-tools tarball to a directory named ifetch-tools .

{{{___}}} 2. Run the following command:

{{{
cd ifetch-tools && git init --shared && git add . && git commit -a -m "Initial import." && cd .. && git clone --bare ifetch-tools ifetch-tools.git
}}}

{{{___}}} 3. ssh to your account at alioth.debian.org and run this command:

{{{
mkdir ~/public_git
}}}

{{{___}}} 4. Logout of your alioth.debian.org account.

{{{___}}} 5. scp the ietch-tools.git to your alioth.debian.org account:

{{{
scp -r ifetch-tools.git your-account@alioth.debian.org:~/public_git/
}}}
<html>
<a href=http://www.fyeox.com/images/ifetch-live.png><img src="http://www.fyeox.com/images/ifetch-live.png" width="100" height="80" alt="ifetch-live" /></a>
<a href=http://www.fyeox.com/images/ifetch-tools-monitor.png><img src="http://www.fyeox.com/images/ifetch-tools-monitor.png" width="100" height="80" alt="ifetch-tools-monitor" /></a>
<a href=http://www.fyeox.com/images/ifetch-tools-history.png><img src="http://www.fyeox.com/images/ifetch-tools-history.png" width="100" height="80" alt="ifetch-tools-history" /></a>
</html>

''__ATTENTION: As of the 20130107-0-ifetch-live.iso no further releases are planned.__''

Q. Why are you not continuing to release ifetch-live?
A. iftech-live is a live CD based on [[Debian Live]] and [[Debian Live]] now has an install mode of ''live'' which can act as firmware. Installs from to the local machine are easy to preseed and allow for persistence.

Q. Can I still get support for ifetch-live or ifetch-tools?
A. Yes, but you will need to have a signed contract.

Q. What is ifetch-live?
A. iftech-live is a live CD based on [[Debian Live]] which integrates the ifetch-tools software.

Q. Why ifetch-live?
A. One of the issues with the use of ifetch-tools is that the setup requires more skill than many potential users possess. So the idea of a live CD that could be used in a controlled model was born. See Q. Why are you not continuing to release ifetch-live?

Q. What is the controlled model that ifetch-live is designed for?
A. The ifetch-live server can have several types of setups, but the general model was designed for the server to have two network cards. One network card for the private camera network, and the second network card for public network. The private camera network is for the cameras and the collection process. By segmenting this way the operations on the private camera network may be assumed. The public network is for public network access. Operations on the public network card are to be managed at the site by dhcp.

Q. Do I need a CUSTOMER#?
A. If you want to run ifetch-tools from ifetch-live with a service agreement, then yes you need a CUSTOMER#.

Q. How do I get a CUSTOMER#?
A. Email unixabg@gmail.com with a subject of:  Requesting ifetch-live CUSTOMER#, once the information is collected to determine which agreement is needed a contract can be sent out.

Q. Do I have to have two network cards?
A. See "Q. Can I run ifetch-live with one network card on my existing network?"

Q. Can I run ifetch-live with one network card on my existing network?
A. In general ifetch-live is designed for a specific purpose of a private network and public network, so two network cards in general. If you want to run on a single interface for a stand alone network, a custom CUSTOMER# CD could be created. Likewise if you want to run on existing network, a custom CUSTOMER# CD could be created. In both cases there is an element of complexity that is introduced beyond the original intent of the two interfaces for simplicity.

Q. How do I start the system?
A. Connect the server to the correct networks and power on with the ifetch-live CD in the cd-drive. 

Q. Can I run the system without a monitor and keyboard?
A. Yes, you only need a monitor and keyboard if you want to interact directly at the system.

Q. How do I access the system?
A. To access the main page of the system from the public network simply open your web browser to http://the_ip_of_the_network_card:2000  (note: The main page can be custom coded at each site).

Q. Can I watch my cameras live?
A. Yes, if the server is running, ports will be redirected for direct camera access. Camera ports ranges will generally be port 2000+C, for 1<=C<=N where N is the number of cameras. Hence port 2001 corresponding to camera 1 and so on.

Q. What do I get for my annual agreement?
A. The initial configuration and setup of ifetch-tools (not including html work, since some customers want to do their own), with said setup made available during the term of the support agreement. Email support on your configuration and setup. 

Q. Why do you charge an annual agreement for ifetch-live services?
A. The major reason is to fund the continuing work and operations related to the the project. 

Q. What is your current annual agreement pricing?
A. Pricing below is estimated and subject to change without notice:
{{{
                         K-12 Education          Other
                        ----------------------------------------
 0  < # of cameras < 15 = $1040.00 per year    $1500.00 per year
 14 < # of cameras < 22 = $1400.00 per year    $1900.00 per year
 21 < # of cameras < 29 = $1600.00 per year    $2100.00 per year
 28 < # of cameras      = Contact for a per year price

}}}

Q. What is the estimated cost for equipment?
A. Pricing below is estimated and for budget purpose only. Prices may change without notice:
{{{
 IP Camera(s)      - $200.00 x _________ = _________ 
 Lens Upgrade      -  $70.00 x _________ = _________ 
 Base Server Build - $750.00 x _________ = _________
 Storage Drives    - $130.00 x _________ = _________
 POE Switches      - $700.00 x _________ = _________
                                   Total = _________
* IP Camera(s) estimated price includes configuration.
* Lens Upgrades estimated price includes being installed on cameras.
* Base Server Build estimated price includes assembly. 
* No discounts on hardware.
* Estimated prices do not include shipping.
* Estimated prices do not include any cable plant operations or modifications.
}}}

Q. Why do you give better pricing for K-12 Educational?
A. Kids are the future and if a K-12 Educational site believes ifetch-live a good fit then I want to help out with a discount.

Q. How do I get the equipment?
A. At the time of writing, once you get a CUSTOMER# with support agreement, if you want to build the system yourself and do the initial setup of the equipment, I will send you the current build parts list (***ATTENTION*** You must use the specified parts on the build list for compatibility. The support agreement will only cover system builds that match the build parts list. ***END ATTENTION***). Or you may order a system pre-built and cameras configured for a cost of the equipment and configuration time. Pre-built system with setup will match the appropriate support agreement with your CUSTOMER#. It is preferred that you order a pre-built system for compatibility with the support agreement.

Q. Does the annual agreement cover hardware warranty?
A. No. The hardware warranty would depend on where the hardware is procured. If RJ Ent procures the hardware for client, RJ Ent will handle operations ala carte with time and materials on exchange.

Q. What does "ala carte with time and materials on exchange" mean?
A. If you have a defective piece of hardware, time, materials, and shipping costs will apply on getting corrected. As an example if a camera stops working and support believes the issue to be a defective camera, a replacement can be configured and sent out upon the request of the customer; the customer will be charged for the replacement item and shipping. If the item does not get warrantied, the customer will  be responsible for the replacement item, shipping, and the time attempting to get item warrantied. However, if the item gets warrantied then the customer will only be billed for time to get warrantied and the shipping costs associated with warranty and item replacement. 

Q. Who installs the equipment or components related to ifetch-live?
A. The customer or installer is expected to perform the installation of equipment.

Q. I do not wish to use ifetch-live anymore, what do I need to do?
A. Do not renew your annual agreement.

Q. I am not satisfied with my support, what can I do?
A. See "I do not wish to use ifetch-live anymore, what do I need to do?"

Q. Can I get a refund on my annual agreement?
A. You may stop using ifetch-live services at any time, but there are no refunds. See "I do not wish to use ifetch-live anymore, what do I need to do?"

Q. If I discontinue my annual agreement what do I do with equipment?
A. Anything you want it is your equipment.

Q. I have changed my mind about stopping my annual agreement and I want to start up again, what do I need to do?
A. Contact for details. 

Q. Can I use the ifetch-live CD for any thing else?
A. Yes, the CD is a [[Debian Live]] CD that is used for the preparing of the system and has many other uses.

Q. Why do I want to use ifetch-live or ifetch-tools instead of CCTV or something else for surveillance?
A. There are some places where CCTV or other products might be a better solution or fit what you want to achieve. In the end you should decide what is best for you. With respect to ifetch-live or ifetch-tools the main idea is that the system was designed to be web based and offer features such as live camera viewing (and some cameras offer live audio), remote monitoring of the collection status of all cameras, and remotely access the collection history. So know what you want to achieve, be informed, and select what is the best option for your situation/project.

<html><img src="http://ifetch-tools.rubyforge.org/ifetch.png" width="80" height="80" alt="ifetch-tools" /></html> ifetch-tools - A set of tools that can collect images from ip based cameras, monitor collection process, and provide an interface to view collected history. The software separates the configuration from the presentation layer for security. Hence the configuration and setup is expected to be performed in the console (with ifetch-live, pre-packaged .local files house the settings). 

Project is hosted at http://www.rubyforge.org with direct page of http://ifetch-tools.rubyforge.org/ 
Project git is hosted at http://alioth.debian.org/ with direct page of http://git.debian.org/?p=users/rjent-guest/ifetch-tools.git

ifetch-tools is now being tracked in [[Debian Linux]]:

 BTS (Bug Tracking System): http://bugs.debian.org/src:ifetch-tools
 PDO (packages.debian.org): http://packages.debian.org/src:ifetch-tools
 PTS (Package Tracking System): http://packages.qa.debian.org/ifetch-tools
 VCS (Version Control System): http://git.debian.org/?p=users/rjent-guest/ifetch-tools.git
{{{

#---------------------------------------------------------------
# This is the /etc/rc.local file and I am below going to secure the with
# iptables rules.

#---------------------------------------------------------------
# Load the NAT module
#
# Note: It is best to use the /etc/rc.local example in this
#       chapter. This value will not be retained in the
#       /etc/sysconfig/iptables file. Included only as a reminder.
#---------------------------------------------------------------
 
modprobe iptable_nat
 
#---------------------------------------------------------------
# Enable routing by modifying the ip_forward /proc filesystem file
#
# Note: It is best to use the /etc/sysctl.conf example in this
#       chapter. This value will not be retained in the
#       /etc/sysconfig/iptables file. Included only as a reminder.
#---------------------------------------------------------------
 
echo 1 > /proc/sys/net/ipv4/ip_forward


# Flush out anything we have

iptables -F
 
#---------------------------------------------------------------
# Drop all
#---------------------------------------------------------------
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD DROP 
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP 

#---------------------------------------------------------------
#Allow traffic in and out over the loopback address for local services on the firewall:
#---------------------------------------------------------------
#iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT

#---------------------------------------------------------------
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -d 172.16.0.1 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -p tcp --dport 137 -j ACCEPT
iptables -A FORWARD -p tcp --dport 138 -j ACCEPT
iptables -A FORWARD -p tcp --dport 139 -j ACCEPT
iptables -A FORWARD -p tcp --dport 631 -j ACCEPT
iptables -A FORWARD -p udp --dport 631 -j ACCEPT
iptables -A FORWARD -d 172.16.0.1 -p tcp --dport 3128 -j ACCEPT
#iptables -A FORWARD -d 172.16.0.6 -p tcp --dport 5901 -j ACCEPT
iptables -A FORWARD -d 172.16.0.6 -p icmp --icmp-type 8/0 -j ACCEPT

#---------------------------------------------------------------
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/16 -j SNAT --to-source 172.16.0.18
}}}
Everywhere you see _FIXME_ you need to edit with your information:

{{{
servers = (
  {
    address = "irc.freenode.net";
    chatnet = "freenode";
    port = "6667";
    autoconnect = "no";
  },
  {
    address = "irc.oftc.net";
    chatnet = "oftc";
    port = "6667";
    autoconnect = "yes";
  }
);

chatnets = {
  oftc = {
    type = "IRC";
    autosendcmd = "/msg nickserv identify FIXME_MY_PASSWORD";
  };
  freenode = {
    type = "IRC";
    autosendcmd = "/msg nickserv identify FIXME_MY_PASSWORD";
  };
};

channels = (
  {
    name = "#syslinux";
    chatnet = "freenode";
    autojoin = "Yes";
  },
  {
    name = "#debian,#debian-live";
    chatnet = "oftc";
    autojoin = "Yes";
  }
);

aliases = {
  J = "join";
  WJOIN = "join -window";
  WQUERY = "query -window";
  LEAVE = "part";
  BYE = "quit";
  EXIT = "quit";
  SIGNOFF = "quit";
  DESCRIBE = "action";
  DATE = "time";
  HOST = "userhost";
  LAST = "lastlog";
  SAY = "msg *";
  WI = "whois";
  WII = "whois $0 $0";
  WW = "whowas";
  W = "who";
  N = "names";
  M = "msg";
  T = "topic";
  C = "clear";
  CL = "clear";
  K = "kick";
  KB = "kickban";
  KN = "knockout";
  BANS = "ban";
  B = "ban";
  MUB = "unban *";
  UB = "unban";
  IG = "ignore";
  UNIG = "unignore";
  SB = "scrollback";
  UMODE = "mode $N";
  WC = "window close";
  WN = "window new hide";
  SV = "say Irssi $J ($V) - http://irssi.org/";
  GOTO = "sb goto";
  CHAT = "dcc chat";
  RUN = "SCRIPT LOAD";
  CALC = "exec - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
  SBAR = "STATUSBAR";
  INVITELIST = "mode $C +I";
  Q = "QUERY";
  "MANUAL-WINDOWS" = "set use_status_window off;set autocreate_windows off;set autocreate_query_level none;set autoclose_windows off;set reuse_unused_windows on;save";
  EXEMPTLIST = "mode $C +e";
  ATAG = "WINDOW SERVER";
  UNSET = "set -clear";
  RESET = "set -default";
};

statusbar = {
  # formats:
  # when using {templates}, the template is shown only if it's argument isn't
  # empty unless no argument is given. for example {sb} is printed always,
  # but {sb $T} is printed only if $T isn't empty.

  items = {
    # start/end text in statusbars
    barstart = "{sbstart}";
    barend = "{sbend}";

    topicbarstart = "{topicsbstart}";
    topicbarend = "{topicsbend}";

    # treated "normally", you could change the time/user name to whatever
    time = "{sb $Z}";
    user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}";

    # treated specially .. window is printed with non-empty windows,
    # window_empty is printed with empty windows
    window = "{sb $winref:$tag/$itemname{sbmode $M}}";
    window_empty = "{sb $winref{sbservertag $tag}}";
    prompt = "{prompt $[.15]itemname}";
    prompt_empty = "{prompt $winname}";
    topic = " $topic";
    topic_empty = " Irssi v$J - http://www.irssi.org";

    # all of these treated specially, they're only displayed when needed
    lag = "{sb Lag: $0-}";
    act = "{sb Act: $0-}";
    more = "-- more --";
  };

  # there's two type of statusbars. root statusbars are either at the top
  # of the screen or at the bottom of the screen. window statusbars are at
  # the top/bottom of each split window in screen.
  default = {
    # the "default statusbar" to be displayed at the bottom of the window.
    # contains all the normal items.
    window = {
      disabled = "no";

      # window, root
      type = "window";
      # top, bottom
      placement = "bottom";
      # number
      position = "1";
      # active, inactive, always
      visible = "active";

      # list of items in statusbar in the display order
      items = {
        barstart = { priority = "100"; };
        time = { };
        user = { };
        window = { };
        window_empty = { };
        lag = { priority = "-1"; };
        act = { priority = "10"; };
        more = { priority = "-1"; alignment = "right"; };
        barend = { priority = "100"; alignment = "right"; };
      };
    };

    # statusbar to use in inactive split windows
    window_inact = {
      type = "window";
      placement = "bottom";
      position = "1";
      visible = "inactive";
      items = {
        barstart = { priority = "100"; };
        window = { };
        window_empty = { };
        more = { priority = "-1"; alignment = "right"; };
        barend = { priority = "100"; alignment = "right"; };
      };
    };

    # we treat input line as yet another statusbar :) It's possible to
    # add other items before or after the input line item.
    prompt = {
      type = "root";
      placement = "bottom";
      # we want to be at the bottom always
      position = "100";
      visible = "always";
      items = {
        prompt = { priority = "-1"; };
        prompt_empty = { priority = "-1"; };
        # treated specially, this is the real input line.
        input = { priority = "10"; };
      };
    };

    # topicbar
    topic = {
      type = "root";
      placement = "top";
      position = "1";
      visible = "always";
      items = {
        topicbarstart = { priority = "100"; };
        topic = { };
        topic_empty = { };
        topicbarend = { priority = "100"; alignment = "right"; };
      };
    };
  };
};
settings = {
  core = {
    real_name = "RealName <real@email.address> FIXME";
    user_name = "YourUserName_FIXME";
    nick = "YourNick_FIXME";
    log_timestamp = "%F %H:%M:%S ";
    proxy_string = "\"\"";
    timestamp_format = "%H:%M:%S";
  };
  "fe-common/core" = {
    autolog = "yes";
    autolog_path = "~/Ircdir/$tag/%Y-%m/$0.log";
    autolog_colors = "no";
    #show_nickmode_empty = "no";
  };
  "fe-text" = { actlist_sort = "refnum"; scrollback_lines = "4096"; };
  logs = { };
};

hilights = (
  { text = "YourNick_FIXME"; nick = "yes"; word = "yes"; },
  { text = "YourUserName_FIXME"; nick = "yes"; word = "yes"; },
);

logs = { };
}}}
live-medium-install is now included in debian-next branch of live-tools.

http://live.debian.net/gitweb/?p=live-tools.git
http://live.debian.net/gitweb/?p=live-tools.git;a=shortlog;h=refs/heads/debian-next
Uploading to mentors.debian.net

{{{
# Copy source.
rsync -avC source  /dest/chroot/

# Create original source file.
tar czf ifetch-tools_0.xx.orig.tar.gz --exclude=debian* ifetch-tools-0.xx

# Build.
cd ifetch-tools-0.xx && dpkg-buildpackage -us -uc -rfakeroot && cd ../ && lintian -i *.changes

# Sign for upload.
debsign ifetch-tools_0.xx_arch.changes 

# Upload to mentors.
dput mentors ifetch-tools_0.xx_arch.changes

}}}
{{{
# encrypt file.txt to file.enc using 256-bit AES in CBC mode
openssl enc -aes-256-cbc -salt -in file.txt -out file.enc

# decrypt provide password on command line
openssl enc -d -aes-256-cbc -in file.end  -out nocrypt_file -pass pass:mySillyPassword
}}}
* Some notes on pfsense

{{{
cat /var/squid/logs/access.log | perl -p -e 's/^([0-9]*)/"[".localtime($1)."]"/e'
}}}
1.) Install usplash and libusplash-dev  
2.) Examine /usr/share/doc/libusplash-dev/examples
3.) Create your image and name /usr/share/doc/libusplash-dev/examples/eft_1024_768.png
4.) Change the resolution in /etc/usplash.conf to 1024x768
5.) Add splash vga=791 to the kernel line in /etc/boot/menu.lst
6.) sudo update-initramfs -u -k `uname -r`
7.) Reboot
8.) Enjoy
Vim [[Tips|http://vim.wikia.com/wiki/Vim_Tips_Wiki]] Wiki

vim is the editor I use and I am going to keep a short list of some of the settings I use. Below is my .vimrc:
{{{
highlight WhitespaceBOLEOL ctermbg=red guibg=red
call matchadd("WhitespaceBOLEOL", '\s\+$')
call matchadd("WhitespaceBOLEOL", '^ \+')
set printoptions=paper:letter,syntax:y,wrap:y,duplex:off
syntax on
}}}

On the printing part I specify set pdev=~ThePrinterName I want to print to when running vim.