<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8274187644747833387</id><updated>2011-04-21T21:50:29.903-07:00</updated><category term='Reviews'/><category term='Jobs'/><category term='Software'/><category term='Feature'/><category term='How To'/><category term='News'/><title type='text'>Linux Tomorrow</title><subtitle type='html'>We provide information about Linux . Let Support Linux for better future !!! Long live Open Source</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://linuxtomorrow.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>88</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-9170485284811815443</id><published>2008-09-28T11:37:00.001-07:00</published><updated>2008-09-29T11:48:42.391-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>Easy essay with Standoutessay.com</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;Sometimes converting your ideas to paper can be really hard, ideas is very important but you will never get excellent essay if you not doing any deep research on it and beside that you need good writing instinct to make your essay more interesting to read, what the point you have great essay if there is no one read. So the point is if you have more time or you are experience writer you can make good essay, but if you not have two things above, just try professional custom writing.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;Why must use professional custom writing? Off course for better result, you don’t want to get bad grade on essay don’t you ? They have better experience on writing and would be doing research for essay or paper to get better result. Manny custom writing company this day but there is some company that has good reputation and one of them Is standoutessay.com, you can &lt;a href="http://www.standoutessay.com/buy-essays"&gt;order essay online&lt;/a&gt; at this website. Why I like this company more than other is because they can make their essay writing similar like yours, not too over quality, but a bit better. They also give &lt;a href="http://www.standoutessay.com/"&gt;essay editing service&lt;/a&gt;, if you have writing essay and feel it need more improvement you can use their services.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;Their custom writing also &lt;a href="http://www.standoutessay.com/"&gt;free essay&lt;/a&gt; plagiarism 100%, this mean you don’t need to worry there is any copy of your essay in the world, except you and off course standoutessay.com. Well what are you waiting for ? Just bring your ideas to standoutessay.com and get your excellent essay.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-9170485284811815443?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9170485284811815443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9170485284811815443'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/09/easy-essay-with-standoutessaycom.html' title='Easy essay with Standoutessay.com'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2246470088619841249</id><published>2008-09-27T10:33:00.000-07:00</published><updated>2008-09-29T10:38:07.980-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>Custom-essay.org make your essay easier</title><content type='html'>&lt;p style="text-align: justify;" class="MsoNormal"&gt;Writing essay always difficult task, even for professional, you need&lt;span style=""&gt;  &lt;/span&gt;to doing some research before you can write good and excellent essay and that can wasting your time especially when your time is limited and there is another top priority task or activity you need to finish and also if your essay is &lt;a href="http://custom-essay.org/custom-term-paper-writing"&gt;term paper&lt;/a&gt;, its little difficult to finish, you need to know the topic very well and it’s also usually has short deadline. So you need some professional essay writing, yup you need hire a professional essay writer to make excellent essay. Well if you try to find the best one, I recommend you custom-essay.org&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;Custom-essay.org is one of many places where you can &lt;span style="color: red;"&gt;&lt;a href="http://custom-essay.org/blog/2008/03/27/5-reasons-to-buy-online-essays/"&gt;buy an essay online&lt;/a&gt;&lt;/span&gt;, but what make them different from another company? Because they begin their custom essay writing from school until universities, so they has many experience as custom essay writers, you don’t need to worry about the quality of their essay.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;Their job is excellent you don’t need to worry that you would find another copy of your essay out there except you give them because they don’t resold your essay and your essay are original because they has zero tolerance policy for plagiarized paper and you can check by yourself. So if you want the best place to&lt;a href="http://custom-essay.org/blog/2007/10/01/reasons-to-buy-a-college-essay/"&gt; buy essays&lt;/a&gt; &lt;span style=""&gt; &lt;/span&gt;just visiting Custom-essay.org &lt;span style=""&gt; &lt;/span&gt;for the first step and find how excellent their work .&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-2246470088619841249?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2246470088619841249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2246470088619841249'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/09/custom-essayorg-make-your-essay-easier.html' title='Custom-essay.org make your essay easier'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-4993705823211817829</id><published>2008-07-25T02:09:00.000-07:00</published><updated>2008-12-10T10:18:38.998-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reviews'/><title type='text'>Zenni Optical Review</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VjzGym6MKg/SIxETZ725CI/AAAAAAAAATM/ZoaA8kYMjeA/s1600-h/zenniOP.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 433px; height: 230px;" src="http://2.bp.blogspot.com/_5VjzGym6MKg/SIxETZ725CI/AAAAAAAAATM/ZoaA8kYMjeA/s400/zenniOP.JPG" alt="" id="BLOGGER_PHOTO_ID_5227628367640454178" border="0" /&gt;&lt;/a&gt;If you’re looking for new stylish glasses not like common old glasses , maybe bit difficult. Because not many shop even online shop that sell that kind of glasses. If you search trough internet you will find the resuly but to find the best and suite to your taste, you must to surf their website one by one until you find one. Well, if you want the fastest way just visit zennioptical.com.  &lt;p class="MsoNormal" style="text-align: justify;"&gt;Zennioptical.com offers many and great design of glasses like &lt;a href="http://zennioptical.com/cart/home.php?cat=29"&gt;Incredible Stylish New Frames From Zenni&lt;/a&gt;. The price at zennioptical also competitive like this one, &lt;a href="http://zennioptical.com/cart/home.php"&gt;Zenni Optical $ 8 Rx Eyeglasses&lt;/a&gt;, how do you think ? &lt;a href="http://www.myfoxwghp.com/myfox/pages/Home/Detail;jsessionid=7AC86B4EE9EEC0FA4750BC35C68C8A25?contentId=5835241&amp;amp;version=3&amp;amp;locale=EN-US&amp;amp;layoutCode=VSTY&amp;amp;pageId=1.1.1&amp;amp;sflg=1"&gt;Zenni Optical was on FOX news!&lt;/a&gt; This prove that zenni optical is famous and well known among glasses shop around the world&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-4993705823211817829?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4993705823211817829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4993705823211817829'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/07/zenni-optical-review.html' title='Zenni Optical Review'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5VjzGym6MKg/SIxETZ725CI/AAAAAAAAATM/ZoaA8kYMjeA/s72-c/zenniOP.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-5296994719743100190</id><published>2008-07-16T04:59:00.000-07:00</published><updated>2008-07-16T05:01:59.517-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>Quick Payday Loans</title><content type='html'>One day my brother Joe called to me and said that he needs some time to talk to me in private. So I tell him to come over and tell me what’s wrong. So after he arrived he said that he needs my help and asked me to lend him some money to pay his car fines from impound. He barely has any cash at all till the end of the month, and he needs his car for his daily job. He promised me that he would pay me back first thing after he received his paycheck next month. I soon see his problem, but not that don’t want to help my brother Joe, but right now I’m in some short of myself so I can’t help him by my own hand.&lt;br /&gt;&lt;br /&gt;But however, I might be able to help him in other way. I tell him about cash advanced and payday loans. Cash advance or payday loans is a short terms loans backed by your paycheck. It’s so easy to get it. No faxes and no hassles. It usually only requires that you’re 18 years of age, have a regular source of income, receive at least $1000/month, and have direct deposit in your bank account. They money will be transferred right in your checking or saving bank accounts once you’re approved. It’s so easy to get a quick  &lt;a href="http://www.personalcashadvance.com"&gt;quick payday loans&lt;/a&gt;. So after he hears my explanation he rushed back to his house to apply his first payday loans.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-5296994719743100190?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/5296994719743100190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/5296994719743100190'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/07/quick-payday-loans.html' title='Quick Payday Loans'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1830353178535405423</id><published>2008-07-16T04:50:00.003-07:00</published><updated>2008-07-16T05:46:05.359-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>Insurance Portal Online</title><content type='html'>To find any insurance policies that can cover you is not so difficult to find. Today’s there are so many insurance offers comes right in our front doors or mails. You should never find any difficulties to find insurance policies, whether it’s life insurance, auto insurance, education insurance, even disability insurance. You can find it anywhere. And along came the internet era there goes also the insurance industry. Many of the insurance providers are aware by the power of this new media and take advantage on it. You can find so many insurance policies offers online almost everyday.&lt;br /&gt;&lt;br /&gt;But perhaps finding any insurance policies is not an issue anymore, since you can easily finds it anywhere, but the essential issues right now maybe, among so many offers that comes to our mails everyday, how can we find the right insurance policies that suits us the best? With so many different offers and different terms that come to our mail, sometimes we find it difficult for us to decide which one that would suit us the best. But I would like to recommend you with a great &lt;a href="http://www.insurancerate.com"&gt;insurance online&lt;/a&gt;  portal that can help you decide which insurance policies that suit you the best, if you should ever need one. You get your free quote in any insurance types that you would like to know for free. With their help, I hope; that you shouldn’t find any difficulties in finding one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1830353178535405423?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1830353178535405423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1830353178535405423'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/07/to-find-any-insurance-policies-that-can.html' title='Insurance Portal Online'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-474837514437632235</id><published>2008-07-05T05:35:00.000-07:00</published><updated>2008-07-07T06:01:34.141-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reviews'/><title type='text'>Farsi Translation Online</title><content type='html'>You want to &lt;a href="http://www.iaflindia.com/"&gt;Farsi translation&lt;/a&gt; ? Farsi language is pretty complex language, if you try to find people to translate that will be difficult, even if you try to find it trough internet, there is not many translation online for the language, the other reason is about the grammar and vocabulary, pronounce and letters, even if you studied this language it's will be difficult.&lt;br /&gt;&lt;br /&gt;Now if you find direct to search engine you may found people who offers  for this service, but how about their work, how good their translation ? There is one company you can trusted, my friend use to doing &lt;a href="http://www.iaflindia.com/"&gt;Hindi translation&lt;/a&gt;, and the result is amazing they give their best, the best &lt;a href="http://www.iaflindia.com/"&gt;India translation&lt;/a&gt; my friend ever get he said that, even Hindi is one of difficult language in the world, they can made it perfectly,  and also they offers a Farsi translation the best one at translation business online in the world, just go to iaflindia.com beside that language above they also the best one in &lt;a href="http://www.iaflindia.com/"&gt;Arabic translation&lt;/a&gt;. So what you waiting for just go to their website and give them your article that want to translate to Farsi language. They will respond you very quick and also they give it without quote, this is may be the best offers you can get on the net.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-474837514437632235?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/474837514437632235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/474837514437632235'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/07/farsi-translation-online.html' title='Farsi Translation Online'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1484216187125124818</id><published>2008-05-02T00:55:00.001-07:00</published><updated>2008-05-02T00:58:00.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Upgrade Your Desktop From Mandriva One 2008.0 To Mandriva One 2008.1 (Spring)</title><content type='html'>&lt;p&gt;Author :  Author: Oliver Meyer &lt;o&gt;&lt;/o&gt;&lt;/p&gt;This document describes how to upgrade your desktop from Mandriva One 2008.0 to Mandriva One 2008.1 via online upgrade. &lt;p&gt;This howto is a practical guide without any warranty - it doesn't cover the theoretical backgrounds. There are many ways to set up such a system - this is the way I chose.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;1 Preparation&lt;/h3&gt; &lt;p&gt;Install the latest updates on the 2008.0 system to prevent problems related to the upgrade that we'll accomplish in a few moments. Please note, that the Mandriva One 2008.1 Spring install/live media has no upgrade mechanism - so we have to run an online upgrade which is not riskless. You should back up all important data before you proceed. Please close all running applications, open a terminal and switch to the root account.&lt;/p&gt; &lt;p class="command"&gt;su -&lt;br /&gt;%root_password%&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;2 Old Repositories&lt;/h3&gt; &lt;p&gt;First delete all existing repositories.&lt;/p&gt; &lt;p class="command"&gt;urpmi.removemedia -a&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;3 New Repositories&lt;/h3&gt; &lt;p&gt;Now we add the repositories for the 2008.1 system.&lt;/p&gt; &lt;p class="command"&gt;urpmi.addmedia --distrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586&lt;br /&gt;urpmi.addmedia --distrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/plf/mandriva/cfg/2008.1/i586&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;4 Upgrade&lt;/h3&gt; &lt;p&gt;Next we start the upgrade process.&lt;/p&gt; &lt;p class="command"&gt;urpmi --auto-update -v&lt;/p&gt; &lt;p&gt;At the beginning there'll be only a few packages upgraded (urpmi, rpm...) - later, when the needed upgrades for the rest of the upgrade have been installed, the system will upgrade about 1220 packages. During the upgrade you'll be asked a few questions, for example which icon set you want to use for OpenOffice or which Java version you want to use - choose your preferred settings/packages and proceed. The upgrade will take a while - so be patient. Sometimes it can happen that the upgrade process stops (while downloading packages) - simply abort it via "&lt;span class="system"&gt;CTRL+C&lt;/span&gt;" ("&lt;span class="system"&gt;STRG+C&lt;/span&gt;" for german users) and start it again (&lt;span class="system"&gt;urpmi --auto-update -v&lt;/span&gt;), it'll resume where it stopped before. When the upgrade is finished reboot into your new 2008.1 system.&lt;/p&gt; &lt;p&gt;Please note that the grub entry still says "2008.0" - edit it if you want.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;5 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Mandriva: &lt;a title="http://www.mandriva.com/" target="_blank" href="http://www.mandriva.com/"&gt;http://www.mandriva.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="copyright-footer"&gt;Copyright © 2008 Oliver Meyer&lt;br /&gt;All Rights Reserved. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1484216187125124818?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1484216187125124818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1484216187125124818'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/upgrade-your-desktop-from-mandriva-one.html' title='Upgrade Your Desktop From Mandriva One 2008.0 To Mandriva One 2008.1 (Spring)'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7173327316153119042</id><published>2008-05-01T12:37:00.000-07:00</published><updated>2008-05-02T23:57:12.065-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06</title><content type='html'>&lt;h3 style="font-weight: normal;"&gt;Author : Rocky&lt;/h3&gt;&lt;h3&gt;10 Install and Configure SPF&lt;/h3&gt; &lt;p&gt;The &lt;span class="system"&gt;postfix-policyd-spf-perl&lt;/span&gt; package depends on the &lt;span class="system"&gt;Mail::SPF&lt;/span&gt; and the &lt;span class="system"&gt;NetAddr::IP&lt;/span&gt; Perl modules.&lt;/p&gt; &lt;p&gt;We need to download &lt;span class="system"&gt;postfix-policyd-spf-perl&lt;/span&gt; from &lt;a href="http://www.openspf.org/Software" target="_blank"&gt;http://www.openspf.org/Software&lt;/a&gt; to the &lt;span class="system"&gt;/usr/src/&lt;/span&gt; directory and install it to the &lt;span class="system"&gt;/usr/lib/postfix/&lt;/span&gt; directory like this:&lt;/p&gt; &lt;p class="command"&gt;cd /usr/src&lt;br /&gt;wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.005.tar.gz&lt;br /&gt;tar xvfz postfix-policyd-spf-perl-2.005.tar.gz&lt;br /&gt;cd postfix-policyd-spf-perl-2.005&lt;br /&gt;cp postfix-policyd-spf-perl /usr/lib/postfix/policyd-spf-perl&lt;/p&gt; &lt;p&gt;Then we edit &lt;span class="system"&gt;/etc/postfix/master.cf&lt;/span&gt; and add the following stanza at the end:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/master.cf&lt;/p&gt; &lt;pre&gt;policy unix - n n - - spawn&lt;br /&gt;user=nobody argv=/usr/bin/perl /usr/lib/postfix/policyd-spf-perl&lt;/pre&gt; &lt;p&gt;(The leading spaces before &lt;span class="system"&gt;user=nobody&lt;/span&gt; are important so that Postfix knows that this line belongs to the previous one!)&lt;/p&gt; &lt;p&gt;Then open &lt;span class="system"&gt;/etc/postfix/main.cf&lt;/span&gt; and search for the &lt;span class="system"&gt;smtpd_recipient_restrictions&lt;/span&gt; directive. You should have &lt;span class="system"&gt;reject_unauth_destination&lt;/span&gt; in that directive, and right after &lt;span class="system"&gt;reject_unauth_destination&lt;/span&gt; you add &lt;span class="system"&gt;check_policy_service unix:private/policy&lt;/span&gt; like this:&lt;/p&gt;&lt;p class="command"&gt;vi /etc/postfix/main.cf&lt;/p&gt; &lt;pre&gt;[...]&lt;br /&gt;smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,check_policy_service unix:private/policy&lt;br /&gt;[...]&lt;/pre&gt; &lt;p&gt;or like this:&lt;/p&gt; &lt;pre&gt;[...]&lt;br /&gt;smtpd_recipient_restrictions =&lt;br /&gt;[...]&lt;br /&gt;reject_unauth_destination&lt;br /&gt;check_policy_service unix:private/policy&lt;br /&gt;[...]&lt;/pre&gt; &lt;p&gt;It is important that you specify &lt;span class="system"&gt;check_policy_service&lt;/span&gt; AFTER &lt;span class="system"&gt;reject_unauth_destination&lt;/span&gt; or else your system can become an open relay!&lt;/p&gt; &lt;p&gt;Then restart Postfix:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/postfix restart&lt;/p&gt; &lt;p&gt;That's it already.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;11 Install and Configure FuzzyOcr&lt;/h3&gt; &lt;p class="command"&gt;apt-get install netpbm gifsicle libungif-bin gocr ocrad libstring-approx-perl libmldbm-sync-perl imagemagick tesseract-ocr&lt;/p&gt; &lt;p&gt;Download and install the latest FuzzyOCR devel version from &lt;a href="http://fuzzyocr.own-hero.net/wiki/Downloads" target="_blank"&gt;http://fuzzyocr.own-hero.net/wiki/Downloads&lt;/a&gt;:&lt;/p&gt; &lt;p class="command"&gt;cd /usr/src/&lt;br /&gt;wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz&lt;/p&gt; &lt;p&gt;Unpack FuzzyOCR and move all &lt;span class="system"&gt;FuzzyOcr*&lt;/span&gt; files and the FuzzyOcr directory (they are all in the &lt;span class="system"&gt;FuzzyOcr-3.5.1/&lt;/span&gt; directory) to &lt;span class="system"&gt;/etc/mail/spamassassin&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;tar xvfz fuzzyocr-3.5.1-devel.tar.gz&lt;br /&gt;cd FuzzyOcr-3.5.1/&lt;br /&gt;mv FuzzyOcr* /etc/mail/spamassassin/&lt;br /&gt;wget http://www.gbnetwork.co.uk/mailscanner/FuzzyOcr.words -O /etc/mail/spamassassin/FuzzyOcr.words&lt;/p&gt; &lt;p&gt;We will be storing the image hashes in a mysql database to improve on performance such that images that we have already scanned do not get scanned again as OCR is a resource intense activity.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;11.1 Create MySQL Database&lt;/h4&gt; &lt;p&gt;The sql script creates the database and tables and adds a user &lt;span class="system"&gt;fuzzyocr&lt;/span&gt; with the password &lt;span class="system"&gt;fuzzyocr&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;mysql -p &lt; /etc/mail/spamassassin/FuzzyOcr.mysql&lt;/p&gt; &lt;p&gt;Change the password:&lt;/p&gt; &lt;p class="command"&gt;mysqladmin -u fuzzyocr -p fuzzyocr newpassword&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;11.2 MailWatch Fix&lt;/h4&gt; &lt;p&gt;Do the following to prevent an error in MailWatch:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/mail/spamassassin/FuzzyOcr.pm&lt;/p&gt; &lt;p&gt;Change 'use POSIX;' to 'use POSIX qw(SIGTERM);'&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;11.3 FuzzyOcr Configuration&lt;/h4&gt; &lt;p&gt;FuzzyOCR's configuration file is /etc/mail/spamassassin/FuzzyOcr.cf. In that file almost everything is commented out. We open that file now and make some modifications:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/mail/spamassassin/FuzzyOcr.cf&lt;/p&gt; &lt;p&gt;Put the following line into it to define the location of FuzzyOCR's spam words file:&lt;/p&gt; &lt;pre&gt;focr_global_wordlist /etc/mail/spamassassin/FuzzyOcr.words&lt;/pre&gt; &lt;p&gt;&lt;span class="system"&gt;/etc/mail/spamassassin/FuzzyOcr.words&lt;/span&gt; is a predefined word list that comes with FuzzyOCR. You can adjust it to your needs.&lt;/p&gt; &lt;p&gt;Next change:&lt;/p&gt; &lt;pre&gt;# Include additional scanner/preprocessor commands here:&lt;br /&gt;#&lt;br /&gt;focr_bin_helper pnmnorm, pnminvert, pamthreshold, ppmtopgm, pamtopnm&lt;br /&gt;focr_bin_helper tesseract&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;# Include additional scanner/preprocessor commands here:&lt;br /&gt;#&lt;br /&gt;focr_bin_helper pnmnorm, pnminvert, convert, ppmtopgm, tesseract&lt;/pre&gt; &lt;p&gt;Finally add/enable the following lines:&lt;/p&gt; &lt;pre&gt;# Search path for locating helper applications&lt;br /&gt;focr_path_bin /usr/local/netpbm/bin:/usr/local/bin:/usr/bin&lt;br /&gt;&lt;br /&gt;focr_preprocessor_file /etc/mail/spamassassin/FuzzyOcr.preps&lt;br /&gt;focr_scanset_file /etc/mail/spamassassin/FuzzyOcr.scansets&lt;br /&gt;&lt;br /&gt;focr_digest_db /etc/mail/spamassassin/FuzzyOcr.hashdb&lt;br /&gt;focr_db_hash /etc/mail/spamassassin/FuzzyOcr.db&lt;br /&gt;focr_db_safe /etc/mail/spamassassin/FuzzyOcr.safe.db&lt;br /&gt;focr_minimal_scanset 1&lt;br /&gt;focr_autosort_scanset 1&lt;br /&gt;focr_enable_image_hashing 3&lt;br /&gt;focr_logfile /var/log/FuzzyOcr.log&lt;br /&gt;&lt;br /&gt;#Mysql Connection#&lt;br /&gt;focr_mysql_db FuzzyOcr&lt;br /&gt;focr_mysql_hash Hash&lt;br /&gt;focr_mysql_safe Safe&lt;br /&gt;focr_mysql_user fuzzyocr&lt;br /&gt;focr_mysql_pass password&lt;br /&gt;focr_mysql_host localhost&lt;br /&gt;focr_mysql_port 3306&lt;br /&gt;focr_mysql_socket /var/run/mysqld/mysqld.sock&lt;/pre&gt; &lt;p&gt;This is what the FuzzyOCR developers say about image hashing:&lt;/p&gt; &lt;p&gt;"The Image hashing database feature allows the plugin to store a vector of image features to a database, so it knows this image when it arrives a second time (and therefore does not need to scan it again). The special thing about this function is that it also recognizes the image again if it was changed slightly (which is done by spammers). "&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;11.4 Test FuzzyOCR&lt;/h4&gt; &lt;p class="command"&gt;cd /usr/src/FuzzyOcr-3.5.1/samples&lt;br /&gt;spamassassin --debug FuzzyOcr &lt;&gt; /dev/null&lt;/p&gt; &lt;p&gt;You see the following:&lt;/p&gt; &lt;p class="system"&gt;[14808] info: FuzzyOcr: Found Score &lt;9.000&gt; for Exact Image Hash&lt;br /&gt;[14808] info: FuzzyOcr: Matched [1] time(s). Prev match: 16 sec. ago&lt;br /&gt;[14808] info: FuzzyOcr: Message is SPAM. Words found:&lt;br /&gt;[14808] info: FuzzyOcr: "price" in 1 lines&lt;br /&gt;[14808] info: FuzzyOcr: "company" in 1 lines&lt;br /&gt;[14808] info: FuzzyOcr: "alert" in 1 lines&lt;br /&gt;[14808] info: FuzzyOcr: "news" in 1 lines&lt;br /&gt;[14808] info: FuzzyOcr: (6 word occurrences found)&lt;br /&gt;[14808] dbg: FuzzyOcr: Remove DIR: /tmp/.spamassassin14808JZSvHBtmp&lt;br /&gt;[14808] dbg: FuzzyOcr: Processed in 0.104555 sec.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;12 Apply Relay Recipients&lt;/h3&gt; &lt;p&gt;The following directions are meant for people using Microsoft Exchange 2000 or Microsoft Exchange 2003.&lt;/p&gt; &lt;p&gt;This page describes how to configure your mail gateway to periodically get a list of valid recipient email addresses from your Exchange system. By doing this, you can configure your server to automatically reject any email addressed to invalid addresses. This will reduce the load on your exchange server, since it no longer has to process non-delivery reports, and it will reduce the load on your postfix server since it won't have to perform spam and virus scanning on the message.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;12.1 Install Dependencies&lt;/h4&gt; &lt;p&gt;Install the perl module Net::LDAP:&lt;/p&gt; &lt;p class="command"&gt;perl -MCPAN -e shell&lt;br /&gt;install Net::LDAP&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;12.2 Create the Get Email Address Script&lt;/h4&gt; &lt;p&gt;Create and edit the script:&lt;/p&gt; &lt;p class="command"&gt;vi /usr/bin/getadsmtp.pl&lt;/p&gt; &lt;p&gt;Copy and paste the code below into this new file.&lt;/p&gt; &lt;pre&gt;#!/usr/bin/perl -T -w&lt;br /&gt;&lt;br /&gt;# This script will pull all users' SMTP addresses from your Active Directory&lt;br /&gt;# (including primary and secondary email addresses) and list them in the&lt;br /&gt;# format "user@example.com OK" which Postfix uses with relay_recipient_maps.&lt;br /&gt;# Be sure to double-check the path to perl above.&lt;br /&gt;&lt;br /&gt;# This requires Net::LDAP to be installed.  To install Net::LDAP, at a shell&lt;br /&gt;# type "perl -MCPAN -e shell" and then "install Net::LDAP"&lt;br /&gt;&lt;br /&gt;use Net::LDAP;&lt;br /&gt;use Net::LDAP::Control::Paged;&lt;br /&gt;use Net::LDAP::Constant ( "LDAP_CONTROL_PAGED" );&lt;br /&gt;&lt;br /&gt;# Enter the path/file for the output&lt;br /&gt;$VALID = "/etc/postfix/relay_recipients";&lt;br /&gt;open VALID, "&gt;$VALID" or die "CANNOT OPEN $VALID $!";&lt;br /&gt;&lt;br /&gt;# Enter the FQDN of your Active Directory domain controllers below&lt;br /&gt;$dc1="domaincontroller1.example.com";&lt;br /&gt;$dc2="domaincontroller2.example.com";&lt;br /&gt;&lt;br /&gt;# Enter the LDAP container for your userbase.&lt;br /&gt;# The syntax is CN=Users,dc=example,dc=com&lt;br /&gt;# This can be found by installing the Windows 2000 Support Tools&lt;br /&gt;# then running ADSI Edit.&lt;br /&gt;# In ADSI Edit, expand the "Domain NC [domaincontroller1.example.com]" &amp;amp;&lt;br /&gt;# you will see, for example, DC=example,DC=com (this is your base).&lt;br /&gt;# The Users Container will be specified in the right pane as&lt;br /&gt;# CN=Users depending on your schema (this is your container).&lt;br /&gt;# You can double-check this by clicking "Properties" of your user&lt;br /&gt;# folder in ADSI Edit and examining the "Path" value, such as:&lt;br /&gt;# LDAP://domaincontroller1.example.com/CN=Users,DC=example,DC=com&lt;br /&gt;# which would be $hqbase="cn=Users,dc=example,dc=com"&lt;br /&gt;# Note:  You can also use just $hqbase="dc=example,dc=com"&lt;br /&gt;$hqbase="cn=Users,dc=example,dc=com";&lt;br /&gt;&lt;br /&gt;# Enter the username &amp;amp; password for a valid user in your Active Directory&lt;br /&gt;# with username in the form cn=username,cn=Users,dc=example,dc=com&lt;br /&gt;# Make sure the user's password does not expire.  Note that this user&lt;br /&gt;# does not require any special privileges.&lt;br /&gt;# You can double-check this by clicking "Properties" of your user in&lt;br /&gt;# ADSI Edit and examining the "Path" value, such as:&lt;br /&gt;# LDAP://domaincontroller1.example.com/CN=user,CN=Users,DC=example,DC=com&lt;br /&gt;# which would be $user="cn=user,cn=Users,dc=example,dc=com"&lt;br /&gt;# Note: You can also use the UPN login: "user\@example.com"&lt;br /&gt;$user="cn=user,cn=Users,dc=example,dc=com";&lt;br /&gt;$passwd="password";&lt;br /&gt;&lt;br /&gt;# Connecting to Active Directory domain controllers&lt;br /&gt;$noldapserver=0;&lt;br /&gt;$ldap = Net::LDAP-&gt;new($dc1) or&lt;br /&gt;$noldapserver=1;&lt;br /&gt;if ($noldapserver == 1)  {&lt;br /&gt;$ldap = Net::LDAP-&gt;new($dc2) or&lt;br /&gt;   die "Error connecting to specified domain controllers $@ \n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$mesg = $ldap-&gt;bind ( dn =&gt; $user,&lt;br /&gt;                   password =&gt;$passwd);&lt;br /&gt;if ( $mesg-&gt;code()) {&lt;br /&gt; die ("error:", $mesg-&gt;error_text((),"\n"));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# How many LDAP query results to grab for each paged round&lt;br /&gt;# Set to under 1000 for Active Directory&lt;br /&gt;$page = Net::LDAP::Control::Paged-&gt;new( size =&gt; 990 );&lt;br /&gt;&lt;br /&gt;@args = ( base     =&gt; $hqbase,&lt;br /&gt;# Play around with this to grab objects such as Contacts, Public Folders, etc.&lt;br /&gt;# A minimal filter for just users with email would be:&lt;br /&gt;# filter =&gt; "(&amp;amp;(sAMAccountName=*)(mail=*))"&lt;br /&gt;      filter =&gt; "(&amp;amp; (mailnickname=*) (| (&amp;amp;(objectCategory=person)&lt;br /&gt;                 (objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))&lt;br /&gt;                 (&amp;amp;(objectCategory=person)(objectClass=user)(|(homeMDB=*)&lt;br /&gt;                 (msExchHomeServerName=*)))(&amp;amp;(objectCategory=person)(objectClass=contact))&lt;br /&gt;                 (objectCategory=group)(objectCategory=publicFolder) ))",&lt;br /&gt;       control  =&gt; [ $page ],&lt;br /&gt;       attrs  =&gt; "proxyAddresses",&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;my $cookie;&lt;br /&gt;while(1) {&lt;br /&gt;# Perform search&lt;br /&gt;my $mesg = $ldap-&gt;search( @args );&lt;br /&gt;&lt;br /&gt;# Filtering results for proxyAddresses attributes&lt;br /&gt;foreach my $entry ( $mesg-&gt;entries ) {&lt;br /&gt; my $name = $entry-&gt;get_value( "cn" );&lt;br /&gt; # LDAP Attributes are multi-valued, so we have to print each one.&lt;br /&gt; foreach my $mail ( $entry-&gt;get_value( "proxyAddresses" ) ) {&lt;br /&gt;  # Test if the Line starts with one of the following lines:&lt;br /&gt;  # proxyAddresses: [smtp|SMTP]:&lt;br /&gt;  # and also discard this starting string, so that $mail is only the&lt;br /&gt;  # address without any other characters...&lt;br /&gt;  if ( $mail =~ s/^(smtp|SMTP)://gs ) {&lt;br /&gt;    print VALID $mail." OK\n";&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Only continue on LDAP_SUCCESS&lt;br /&gt;$mesg-&gt;code and last;&lt;br /&gt;&lt;br /&gt;# Get cookie from paged control&lt;br /&gt;my($resp)  = $mesg-&gt;control( LDAP_CONTROL_PAGED ) or last;&lt;br /&gt;$cookie    = $resp-&gt;cookie or last;&lt;br /&gt;&lt;br /&gt;# Set cookie in paged control&lt;br /&gt;$page-&gt;cookie($cookie);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ($cookie) {&lt;br /&gt;# We had an abnormal exit, so let the server know we do not want any more&lt;br /&gt;$page-&gt;cookie($cookie);&lt;br /&gt;$page-&gt;size(0);&lt;br /&gt;$ldap-&gt;search( @args );&lt;br /&gt;# Also would be a good idea to die unhappily and inform OP at this point&lt;br /&gt;  die("LDAP query unsuccessful");&lt;br /&gt;}&lt;br /&gt;# Add additional restrictions, users, etc. to the output file below.&lt;br /&gt;#print VALID "user\@domain1.com OK\n";&lt;br /&gt;#print VALID "user\@domain2.com 550 User unknown.\n";&lt;br /&gt;#print VALID "domain3.com 550 User does not exist.\n";&lt;br /&gt;&lt;br /&gt;close VALID;&lt;/pre&gt; &lt;p&gt;Next set the permissions on the file to allow it to be executed:&lt;/p&gt; &lt;p class="command"&gt;chmod 500 /usr/bin/getadsmtp.pl&lt;/p&gt; &lt;p&gt;Edit the file to customize it for your specific domain. Since the file is read only, you will need to use :w! to save the file in vi.&lt;/p&gt; &lt;p&gt;1. Set &lt;span class="system"&gt;$dc1&lt;/span&gt; and &lt;span class="system"&gt;$dc2&lt;/span&gt; to the fully qualified domain names or IP addresses of 2 of your domain controllers.&lt;/p&gt; &lt;p&gt;2. Set &lt;span class="system"&gt;$hqbase&lt;/span&gt; equal to the LDAP path to the container or organizational unit which holds the email accounts for which you wish to get the email addresses.&lt;/p&gt; &lt;p&gt;3. Set &lt;span class="system"&gt;$user&lt;/span&gt; and &lt;span class="system"&gt;$passwd&lt;/span&gt; to indicate which user account should be used to access this information. This account only needs to be a member of the domain, so it would be a good idea to setup an account specifically for this.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;12.3 Run the Script&lt;/h4&gt; &lt;p&gt;Try running the script. If it works correctly, it will create /etc/postfix/relay_recipients Note that if your postfix server is separated from your active directory controllers by a firewall, you will need to open TCP port 389 from the postfix server to the ADCs. At this point, you can update your &lt;span class="system"&gt;/etc/postfix/main.cf&lt;/span&gt; to &lt;span class="system"&gt;relay_recipient_maps&lt;/span&gt;. You will also have to postmap the file to create the database.&lt;/p&gt; &lt;p class="command"&gt;getadsmtp.pl&lt;/p&gt; &lt;p&gt;At this point, you may want to edit &lt;span class="system"&gt;/etc/postfix/relay_recipients&lt;/span&gt; and edit out any unwanted email addresses as this script imports everything.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;12.4 Create the Table&lt;/h4&gt; &lt;p class="command"&gt;postmap /etc/postfix/relay_recipients&lt;/p&gt; &lt;p&gt;Finally, you may want to set up a cron job to periodically update and build the &lt;span class="system"&gt;/etc/postfix/relay_recipients.db&lt;/span&gt; file. You can set up a script called &lt;span class="system"&gt;/usr/bin/update-relay-recipients.sh&lt;/span&gt;: (Optional)&lt;/p&gt; &lt;p class="command"&gt;vi /usr/bin/update-relay-recipients.sh&lt;/p&gt; &lt;pre&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;/usr/bin/getadsmtp.pl&lt;br /&gt;cd /etc/postfix&lt;br /&gt;postmap relay_recipients&lt;/pre&gt; &lt;p&gt;Don't forget to make sure the following is in your &lt;span class="system"&gt;/etc/postfix/main.cf&lt;/span&gt; file:&lt;/p&gt; &lt;pre&gt;relay_recipient_maps = hash:/etc/postfix/relay_recipients&lt;/pre&gt; &lt;p&gt;Run crontab to add this script to the scheduled jobs:&lt;/p&gt; &lt;p class="command"&gt;crontab -e&lt;/p&gt; &lt;p&gt;Now add the following lines to the bottom of the file. Note that this cron job will run every day at 2:30 AM to update the database file. You may want to run yours more frequently or not depending on how often you add new email users to your system.&lt;/p&gt; &lt;pre&gt;# syncronize relay_recipients with Active Directory addresses&lt;br /&gt;30 2 * * * /usr/bin/update-relay-recipients.sh&lt;/pre&gt;&lt;div class="book"&gt;&lt;div class="nav"&gt; &lt;div class="links"&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;/div&gt; &lt;div class="titles"&gt;&lt;div class="prev"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;div class="next"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="copyright-footer"&gt;Copyright © 2008 Rocky&lt;br /&gt;All Rights Reserved. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-7173327316153119042?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7173327316153119042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7173327316153119042'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2170792345535675377</id><published>2008-05-01T00:48:00.002-07:00</published><updated>2008-05-03T00:02:44.631-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07</title><content type='html'>&lt;h3&gt;13 Filtering PDF, XLS and Phishing Spam with ClamAV (Sanesecurity Signatures)&lt;/h3&gt; &lt;p&gt;There is currently a lot of spam where the spam "information" is attached as .pdf or .xls files, sometimes also hidden inside a .zip file. While these spam mails are not easy to catch with e.g. SpamAssassin or a Bayes filter, the ClamAV virus scanner can catch them easily when it is fed with the correct signatures as ClamAV is built to scan mail attachments.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;13.1 Create a Folder and Download the Script&lt;/h4&gt; &lt;p&gt;Create a folder for sanesecurity and download and give the script the proper permission.&lt;/p&gt; &lt;p class="command"&gt;apt-get install curl&lt;/p&gt; &lt;p class="command"&gt;mkdir /usr/src/sanesecurity&lt;br /&gt;cd /usr/src/sanesecurity&lt;br /&gt;wget http://www.sanesecurity.co.uk/clamav/ss-msrbl.txt&lt;br /&gt;mv ss-msrbl.txt /usr/bin/ss_update.sh&lt;br /&gt;chmod +x /usr/bin/ss_update.sh&lt;/p&gt; &lt;p&gt;Edit &lt;span class="system"&gt;ss_update.sh&lt;/span&gt; and change the following variables to match your installation:&lt;/p&gt; &lt;pre&gt;clam_sigs="/var/lib/clamav"&lt;/pre&gt; &lt;p&gt;The variable &lt;span class="system"&gt;clamav_sigs&lt;/span&gt; contains the path to the directory where your ClamAV signatures are stored.&lt;/p&gt; &lt;pre&gt;clam_user="clamav"&lt;/pre&gt; &lt;p&gt;Now we run the update script to check if the download works:&lt;/p&gt; &lt;p class="command"&gt;./ss_update.sh&lt;/p&gt; &lt;p&gt;The result should look similar to this:&lt;/p&gt; &lt;p class="system"&gt;=================================&lt;br /&gt;SaneSecurity SCAM Database Update&lt;br /&gt;=================================&lt;br /&gt;% Total % Received % Xferd Average Speed Time Time Time Current&lt;br /&gt;Dload Upload Total Spent Left Speed&lt;br /&gt;100 116k 100 116k 0 0 65448 0 0:00:01 0:00:01 --:--:-- 139k&lt;/p&gt;&lt;p class="system"&gt;==================================&lt;br /&gt;SaneSecurity PHISH Database Update&lt;br /&gt;==================================&lt;br /&gt;% Total % Received % Xferd Average Speed Time Time Time Current&lt;br /&gt;Dload Upload Total Spent Left Speed&lt;br /&gt;100 179k 100 179k 0 0 216k 0 --:--:-- --:--:-- --:--:-- 216k&lt;/p&gt; &lt;p class="system"&gt;==========================&lt;br /&gt;MSRBL SPAM Database Update&lt;br /&gt;==========================&lt;br /&gt;Number of files: 1&lt;br /&gt;Number of files transferred: 1&lt;br /&gt;Total file size: 228436 bytes&lt;br /&gt;Total transferred file size: 228436 bytes&lt;br /&gt;Literal data: 228436 bytes&lt;br /&gt;Matched data: 0 bytes&lt;br /&gt;File list size: 33&lt;br /&gt;File list generation time: 0.001 seconds&lt;br /&gt;File list transfer time: 0.000 seconds&lt;br /&gt;Total bytes sent: 101&lt;br /&gt;Total bytes received: 228579&lt;br /&gt;sent 101 bytes received 228579 bytes 26903.53 bytes/sec&lt;br /&gt;total size is 228436 speedup is 1.00&lt;/p&gt; &lt;p class="system"&gt;===========================&lt;br /&gt;MSRBL IMAGE Database Update&lt;br /&gt;===========================&lt;br /&gt;Number of files: 1&lt;br /&gt;Number of files transferred: 1&lt;br /&gt;Total file size: 550503 bytes&lt;br /&gt;Total transferred file size: 550503 bytes&lt;br /&gt;Literal data: 550503 bytes&lt;br /&gt;Matched data: 0 bytes&lt;br /&gt;File list size: 35&lt;br /&gt;File list generation time: 0.001 seconds&lt;br /&gt;File list transfer time: 0.000 seconds&lt;br /&gt;Total bytes sent: 103&lt;br /&gt;Total bytes received: 550688&lt;br /&gt;sent 103 bytes received 550688 bytes 157368.86 bytes/sec&lt;br /&gt;total size is 550503 speedup is 1.00&lt;/p&gt; &lt;p&gt;Now we a add the script to the root crontab to be run once a day:&lt;/p&gt; &lt;p class="command"&gt;crontab -e&lt;/p&gt; &lt;p&gt;Add the following line at the end of the root crontab:&lt;/p&gt; &lt;pre&gt;00 04 * * * /usr/bin/ss_update.sh &amp;amp;&gt; /dev/null&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;14 GreyListing with Postfix-gld&lt;/h3&gt; &lt;h4&gt;14.1 Installing Postfix-gld&lt;/h4&gt; &lt;p class="command"&gt;apt-get install postfix-gld&lt;/p&gt; &lt;p class="command"&gt;cd /usr/src&lt;br /&gt;wget http://www.gasmi.net/down/gld-1.7.tgz&lt;br /&gt;tar xvfx gld-1.7.tgz&lt;br /&gt;cd gld-1.7&lt;/p&gt; &lt;p&gt;Create MySQL Database:&lt;/p&gt; &lt;p class="command"&gt;mysql –u root –p&lt;/p&gt; &lt;p class="command"&gt;mysql&gt; create database gld_db&lt;br /&gt;mysql&gt; GRANT ALL ON gld_db.* TO gld_user@localhost IDENTIFIED BY ‘gld_password’;&lt;br /&gt;mysql&gt; flush privileges;&lt;/p&gt; &lt;p&gt;Import &lt;span class="system"&gt;tables.mysql&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;mysql –u gld_user –p gld_db &lt; /path/to/tables.mysql&lt;/p&gt; &lt;p&gt;Import &lt;span class="system"&gt;table-whitelist.sql&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;mysql –u gld_user –p gld_db &lt; /path/to/table-whitelist.sql&lt;/p&gt; &lt;p&gt;You will have to enable it by configuring that in the &lt;span class="system"&gt;/etc/default/gld&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/default/gld&lt;/p&gt; &lt;pre&gt;#/etc/default/gld&lt;br /&gt;ENABLED=1&lt;br /&gt;&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;14.2 Configuration&lt;/h4&gt; &lt;p&gt;Edit &lt;span class="system"&gt;/etc/gld.conf&lt;/span&gt; according to your needs. I'm using the following settings:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/gld.conf&lt;/p&gt; &lt;pre&gt;# Config file for gld&lt;br /&gt;# TCP Port gld should listen to (default is 2525)&lt;br /&gt;#&lt;br /&gt;PORT=2525&lt;br /&gt;# Shall we bind only to loopback ? (0=No,1=Yes) (default is 1)&lt;br /&gt;LOOPBACKONLY=1&lt;br /&gt;# The list of networks allowed to connect to us (default is everybody)&lt;br /&gt;CLIENTS=127.0.0.1/32&lt;br /&gt;# The user used to run gld (default value is no user change)&lt;br /&gt;USER=postfix-gld&lt;br /&gt;# The group used to run gld (default value is no group change)&lt;br /&gt;GROUP=postfix-gld&lt;br /&gt;# Maximum simultaneous connexions (default is 100)&lt;br /&gt;MAXCON=100&lt;br /&gt;# How many seconds we should wait before accepting a mail that is in greylist (default is 60)&lt;br /&gt;MINTIME=60&lt;br /&gt;# Shall we use lightgrey option ? (0=No,1=Yes) (default is 0)&lt;br /&gt;# The lightgrey option, mask the last octet of IP addresses&lt;br /&gt;# and thus we greylist only C classes (/24) instead of individual IPs.&lt;br /&gt;LIGHTGREY=0&lt;br /&gt;# Shall we use the mxgrey algorithm ? (0=No,&gt;0=Yes) (default is 0)&lt;br /&gt;# the mxgrey algorithm is a variation of the greylist algorithm.&lt;br /&gt;# When this is enabled, we allow all incoming mails from an IP address&lt;br /&gt;# whatever source/destination email as long as this IP has been greylisted&lt;br /&gt;# at least X time and succeded the mail resend .&lt;br /&gt;#&lt;br /&gt;# Example:&lt;br /&gt;# The IP 1.2.3.4 sends an email from src@domain.com to user@yourdomain.com&lt;br /&gt;# We greylist this mail as this IP is not yet in database and send a 450 SMTP code&lt;br /&gt;# After some time, the IP re-send the mail from src@domain.com to user@yourdomain.com&lt;br /&gt;# We update the db.&lt;br /&gt;# Some time after the ip 1.2.3.4 sends an email from john@domain.com to fred@yourdomain.com&lt;br /&gt;# We will accept this mail without any greylisting, as this ip already succeded a greylist test&lt;br /&gt;# and thus seems to be a valid smtp server and not a spammer .&lt;br /&gt;#&lt;br /&gt;# The advantage of this method, is that it reduce the re-send time due to greylisting to&lt;br /&gt;# x mail per server instead of one mail per destination .&lt;br /&gt;#&lt;br /&gt;# The value you provide in MXGREY is the minimum number of succesful greylists&lt;br /&gt;# before accepting all mails from this MX. higher the number is, harder is to get in.&lt;br /&gt;#&lt;br /&gt;# This algortihm replace the old LIGHTGREYDOMAIN which was available prior version 1.6&lt;br /&gt;#&lt;br /&gt;MXGREY=1&lt;br /&gt;# Shall we use the whitelist table ?  (0=No,1=Yes) (default is 1)&lt;br /&gt;# If set to yes, then the table 'whitelist' is looked up&lt;br /&gt;# each time postfix request the server&lt;br /&gt;# if the email/domain/ip is in the whitelist, then the response&lt;br /&gt;# will be 'dunno' .&lt;br /&gt;# In the whitelist table, you can set the following values:&lt;br /&gt;# an email: ie john@foo.tld&lt;br /&gt;# a domain: ie @bar.tld&lt;br /&gt;# an IP   : ie 1.2.3.4&lt;br /&gt;# a subnet: ie 1.2.3&lt;br /&gt;#&lt;br /&gt;WHITELIST=1&lt;br /&gt;# Shall we use a DNS based whitelist ? (default is no)&lt;br /&gt;# To activate it, the line must be uncommented&lt;br /&gt;# and the value set to the domain of the DNS whitelist.&lt;br /&gt;# for example, if DNSWL is set to toto.com and we get a mail from ip a.b.c.d&lt;br /&gt;# then gld will DNS lookup d.c.b.a.toto.com&lt;br /&gt;# and if found allow the ip without greylisting it.&lt;br /&gt;#DNSWL=toto.com&lt;br /&gt;# Shall we send a 'dunno' in case of error (mysql down,....) (0=No,1=Yes) (default is 1)&lt;br /&gt;# Normaly, if an error occur, the server is supposed to close the connection&lt;br /&gt;# and thus postfix will return a 450 Server configuration error&lt;br /&gt;# if this parameter is set to 1, then the server will return 'dunno'&lt;br /&gt;# and thus let postfix decide the fate of the mail.&lt;br /&gt;ERRACCEPT=1&lt;br /&gt;# Shall we log to the syslog (0=No,1=Yes) (default is 1)&lt;br /&gt;SYSLOG=1&lt;br /&gt;# If we use syslog, which facility shall we use (default is mail)&lt;br /&gt;# it can only be one of the following facilities:&lt;br /&gt;# daemon mail local0 local1 local2 local3 local4 local5 local6 local7&lt;br /&gt;FACILITY=mail&lt;br /&gt;# The Message that we display in case of reject (default is "Greylisted")&lt;br /&gt;# If you want another SMTP return code than the default 450, just put it at&lt;br /&gt;# the beginning of the message, ie: 451 You have been greylisted by gld ...&lt;br /&gt;# If you don't provide any SMTP code, the default 450 will be used by postfix&lt;br /&gt;# WARNING: if you set a custom smtp code make sure it's a 4XX code.&lt;br /&gt;# if you don't provide a 4XX code, gld will ignore it and send the default 450.&lt;br /&gt;# Be also warned that if you set a custom code, gld will not use defer_if_permit anymore&lt;br /&gt;# but direct supplied code to postfix .&lt;br /&gt;MESSAGE=Service temporarily unavailable, please try later&lt;br /&gt;# Training mode activated ? (0=No,1=Yes) (default is 0)&lt;br /&gt;# If activated, gld will do all the work but will always reply dunno to postfix&lt;br /&gt;# and thus, will never greylist any mail.&lt;br /&gt;# This feature is useful for testing gld performances without greylisting any mail&lt;br /&gt;TRAINING=0&lt;br /&gt;# SQL INFOS (defaults are localhost,myuser,mypasswd,mydb)&lt;br /&gt;#&lt;br /&gt;SQLHOST=localhost&lt;br /&gt;SQLUSER=gld_user&lt;br /&gt;SQLPASSWD=gld_password&lt;br /&gt;SQLDB-gld_db&lt;/pre&gt; &lt;p&gt;Edit &lt;span class="system"&gt;/etc/postfix/main.cf&lt;/span&gt; and add the following to &lt;span class="system"&gt;smtpd_recipient_restrictions&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/main.cf&lt;/p&gt; &lt;p class="system"&gt;check_policy_service inet:127.0.0.1:2525&lt;/p&gt; &lt;p&gt;Do a &lt;/p&gt; &lt;p class="command"&gt;tail –f /var/log/mail.log &lt;/p&gt; &lt;p&gt;and check your log for the following:&lt;/p&gt; &lt;p class="system"&gt;Apr 28 09:07:03 server1 gld: Greylist activated for recipient=&lt;xxx@xxx.com&gt; sender=&lt;xxx@xxx.com&gt; ip=&lt;xxx.xxx.xxx.xxx&gt;&lt;/xxx.xxx.xxx.xxx&gt;&lt;/xxx@xxx.com&gt;&lt;/xxx@xxx.com&gt;&lt;/p&gt; &lt;p&gt;You can set up a cron job to keep your database clean. Below is the gld command usage.&lt;/p&gt; &lt;p class="system"&gt;Usage: gld [-c n|-C n|-k n|-K n|-h|-v]&lt;br /&gt;gld -c n : clean the database for ALL entries not updated since n days&lt;br /&gt;gld -C n : show what the -c option would do, without doing it&lt;br /&gt;gld -k n : clean the database for entries not updated since n days with only one hit&lt;br /&gt;gld -K n : show what the -k option would do, without doing it&lt;br /&gt;gld -i : show some database informations&lt;br /&gt;gld -d : enable debug mode&lt;br /&gt;gld -v : display version&lt;br /&gt;gld -h : display Usage&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;15 Logwatch Statistical Reporting (Optional)&lt;/h3&gt; &lt;p&gt;Logwatch is a customizable log analysis system. Logwatch parses through your system's logs for a given period of time and creates a report analyzing areas that you specify, in as much detail as you require.&lt;/p&gt; &lt;p&gt;We will be using Logwatch to give us daily reports for mailscanner. This is a way for us to see how effective mailscanner really is.&lt;/p&gt; &lt;p&gt;Install Logwatch:&lt;/p&gt; &lt;p class="command"&gt;apt-get install logwatch&lt;/p&gt; &lt;p&gt;Edit the &lt;span class="system"&gt;/usr/share/logwatch/default.conf/logwatch&lt;/span&gt;.conf and set the options:&lt;/p&gt; &lt;p class="command"&gt;vi /usr/share/logwatch/default.conf/logwatch&lt;/p&gt; &lt;pre&gt;Mail To = youremailaddress&lt;br /&gt;Service = mailscanner&lt;/pre&gt; &lt;p&gt;Test Logwatch:&lt;/p&gt; &lt;p class="command"&gt;logwatch&lt;/p&gt; &lt;p&gt;It should generate a log file and email it to the email you specified.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;16 Automatically Add A Disclaimer To Outgoing Emails With alterMIME (Optional)&lt;/h3&gt; &lt;p&gt;This tutorial shows how to install and use alterMIME. alterMIME is a tool that can automatically add a disclaimer to emails. In this article I will explain how to install it as a Postfix filter on Ubuntu.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;16.1 Installing alterMIME&lt;/h4&gt; &lt;p&gt;alterMIME can be installed as follows:&lt;/p&gt; &lt;p class="command"&gt;apt-get install altermime&lt;/p&gt; &lt;p&gt;Next we create the user &lt;span class="system"&gt;filter&lt;/span&gt; with the home directory &lt;span class="system"&gt;/var/spool/filter&lt;/span&gt; filter - alterMIME will be run as that user:&lt;/p&gt; &lt;p class="command"&gt;useradd -r -c "Postfix Filters" -d /var/spool/filter filter&lt;br /&gt;mkdir /var/spool/filter&lt;br /&gt;chown filter:filter /var/spool/filter&lt;br /&gt;chmod 750 /var/spool/filter&lt;/p&gt; &lt;p&gt;Afterwards we create the script &lt;span class="system"&gt;/etc/postfix/disclaimer&lt;/span&gt; which executes alterMIME. Ubuntu's alterMIME package comes with a sample script that we can simply copy to &lt;span class="system"&gt;/etc/postfix/disclaimer&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer&lt;br /&gt;chgrp filter /etc/postfix/disclaimer&lt;br /&gt;chmod 750 /etc/postfix/disclaimer&lt;/p&gt; &lt;p&gt;Now the problem with this script is that it doesn't distinguish between incoming and outgoing emails - it simply adds a disclaimer to all mails. Typically you want disclaimers only for outgoing emails, and even then not for all sender addresses. Therefore I've modified the &lt;span class="system"&gt;/etc/postfix/disclaimer&lt;/span&gt; script a little bit - we'll come to that in a minute.&lt;/p&gt; &lt;p&gt;Right now, we create the file &lt;span class="system"&gt;/etc/postfix/disclaimer_addresses&lt;/span&gt; which holds all sender email addresses (one per line) for which alterMIME should add a disclaimer:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/disclaimer_addresses&lt;/p&gt; &lt;pre&gt;user1@example.com&lt;br /&gt;user2@example.org&lt;br /&gt;user3@example.net&lt;/pre&gt; &lt;p&gt;Now we open &lt;span class="system"&gt;/etc/postfix/disclaimer&lt;/span&gt; and modify it as follows (I have marked the parts that I've changed):&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/disclaimer&lt;/p&gt; &lt;pre&gt;#!/bin/sh&lt;br /&gt;# Localize these.&lt;br /&gt;INSPECT_DIR=/var/spool/filter&lt;br /&gt;SENDMAIL=/usr/sbin/sendmail&lt;br /&gt;&lt;br /&gt;####### Changed From Original Script #######&lt;br /&gt;DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses&lt;br /&gt;####### Changed From Original Script END #######&lt;br /&gt;&lt;br /&gt;# Exit codes from &lt;sysexits.h&gt;&lt;br /&gt;EX_TEMPFAIL=75&lt;br /&gt;EX_UNAVAILABLE=69&lt;br /&gt;&lt;br /&gt;# Clean up when done or when aborting.&lt;br /&gt;trap "rm -f in.$$" 0 1 2 3 15&lt;br /&gt;&lt;br /&gt;# Start processing.&lt;br /&gt;cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit&lt;br /&gt;$EX_TEMPFAIL; }&lt;br /&gt;&lt;br /&gt;cat &gt;in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }&lt;br /&gt;&lt;br /&gt;####### Changed From Original Script #######&lt;br /&gt;# obtain From address&lt;br /&gt;from_address=`grep -m 1 "From:" in.$$ | cut -d "&lt;" -f 2 | cut -d "&gt;" -f 1`&lt;br /&gt;&lt;br /&gt;if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then&lt;br /&gt;/usr/bin/altermime --input=in.$$ \&lt;br /&gt;               --disclaimer=/etc/postfix/disclaimer.txt \&lt;br /&gt;               --disclaimer-html=/etc/postfix/disclaimer.txt \&lt;br /&gt;               --xheader="X-Copyrighted-Material: Please visit http://www.company.com/privacy.htm" || \&lt;br /&gt;                { echo Message content rejected; exit $EX_UNAVAILABLE; }&lt;br /&gt;fi&lt;br /&gt;####### Changed From Original Script END #######&lt;br /&gt;&lt;br /&gt;$SENDMAIL "$@" &lt;in.$$ exit=""&gt;&lt;/in.$$&gt;&lt;/sysexits.h&gt;&lt;/pre&gt; &lt;p&gt;Next we need the text file &lt;span class="system"&gt;/etc/postfix/disclaimer.txt&lt;/span&gt; which holds our disclaimer text. Ubuntu's alterMIME package comes with a sample text that we can use for now (of course, you can modify it if you like):&lt;/p&gt; &lt;p class="command"&gt;cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txt&lt;/p&gt; &lt;p&gt;Finally we have to tell Postfix that it should use the &lt;span class="system"&gt;/etc/postfix/disclaimer&lt;/span&gt; script to add disclaimers to outgoing emails. Open &lt;span class="system"&gt;/etc/postfix/master.cf&lt;/span&gt; and add &lt;span class="system"&gt;-o content_filter=dfilt:&lt;/span&gt; to the &lt;span class="system"&gt;smtp&lt;/span&gt; line:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/master.cf&lt;/p&gt; &lt;pre&gt;#&lt;br /&gt;# Postfix master process configuration file.  For details on the format&lt;br /&gt;# of the file, see the master(5) manual page (command: "man 5 master").&lt;br /&gt;#&lt;br /&gt;# ==========================================================================&lt;br /&gt;# service type  private unpriv  chroot  wakeup  maxproc command + args&lt;br /&gt;#               (yes)   (yes)   (yes)   (never) (100)&lt;br /&gt;# ==========================================================================&lt;br /&gt;smtp      inet  n       -       -       -       -       smtpd&lt;br /&gt;-o content_filter=dfilt:&lt;br /&gt;[...]&lt;/pre&gt; &lt;p&gt;At the end of the same file, add the following two lines:&lt;/p&gt; &lt;pre&gt;[...]&lt;br /&gt;dfilt     unix    -       n       n       -       -       pipe&lt;br /&gt;flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient}&lt;/pre&gt; &lt;p&gt;Restart Postfix afterwards:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/postfix restart&lt;/p&gt; &lt;p&gt;That's it! Now a disclaimer should be added to outgoing emails sent from the addresses listed in &lt;span class="system"&gt;/etc/postfix/disclaimer_addresses&lt;/span&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Congratulations!&lt;/h3&gt; &lt;p&gt;You should now have a complete working SpamSnake.&lt;/p&gt; &lt;p&gt;Here are some Mailwatch screenshots: &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/mailwatch.jpg" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/mailwatch.jpg" height="322" width="550" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/quarantine.jpg" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/quarantine.jpg" height="210" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/whitelist.jpg" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/whitelist.jpg" height="226" width="550" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;div class="titles"&gt;&lt;div class="prev"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;div class="next"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Copyright © 2008 Rocky&lt;br /&gt;All Rights Reserved.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-2170792345535675377?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2170792345535675377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2170792345535675377'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6938693074450018155</id><published>2008-05-01T00:28:00.001-07:00</published><updated>2008-05-03T00:13:16.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05</title><content type='html'>&lt;h3&gt;9 MailWatch Installation Instructions&lt;/h3&gt; &lt;p&gt;This setup assumes you are using Apache v2.x and not Apache v1.x.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.1 Before Starting&lt;/h4&gt; &lt;p&gt;Make sure that MailScanner is working before you continue with the MailWatch install!&lt;/p&gt; &lt;p&gt;Notes for Ubuntu:&lt;/p&gt; &lt;p&gt;You must have a working MailScanner set-up and running copies of MySQL, Apache, and PHP. You must also have the Perl DBD-MySQL package installed for the Perl portions of MailScanner to utilize the MySQL database.&lt;br /&gt;The default php.ini set should have the following set correctly, you may want to check this:&lt;/p&gt; &lt;ul&gt;&lt;li&gt; &lt;span class="system"&gt;short_open_tag = On&lt;/span&gt;&lt;/li&gt;&lt;li class="system"&gt; safe_mode = Off&lt;/li&gt;&lt;li class="system"&gt; register_globals = Off&lt;/li&gt;&lt;li class="system"&gt; magic_quotes_gpc = On&lt;/li&gt;&lt;li class="system"&gt; magic_quotes_runtime = Off&lt;/li&gt;&lt;li class="system"&gt; session.auto_start = 0&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;These will be commented out you must remove the "#" to activate them:&lt;/p&gt; &lt;ul&gt;&lt;li class="system"&gt; extension=mysql.so&lt;/li&gt;&lt;li class="system"&gt; extension=gd.so &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.2 Installation&lt;/h4&gt; &lt;p&gt;All commands below should be run as root.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.3 Download the latest MailWatch release&lt;/h4&gt; &lt;p class="command"&gt;wget http://downloads.sourceforge.net/mailwatch/mailwatch-1.0.4.tar.gz?modtime=1178902008&amp;amp;big_mirror=0&lt;br /&gt;tar xzvf mailwatch-1.0.4.tar.gz&lt;br /&gt;cd mailwatch-1.0.4&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.4 Create the database&lt;/h4&gt; &lt;p class="command"&gt;mysql -p &lt;&gt; &lt;/p&gt;&lt;p&gt;NOTE: you will need to modify the above as necessary for your system if you have a root password for your MySQL database (recommended!) - Debian will ask for one.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.5 Create a MySQL user and password &amp;amp; Set-up MailScanner for SQL logging&lt;/h4&gt; &lt;p class="command"&gt;mysql -p&lt;br /&gt;mysql&gt; GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY 'password';&lt;/p&gt;&lt;p&gt;Remember the password! You need the single quotes ' to surround your password.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.6 Edit and copy MailWatch.pm&lt;/h4&gt; &lt;p&gt;Edit &lt;span class="system"&gt;MailWatch.pm&lt;/span&gt; and change the &lt;span class="system"&gt;$db_user&lt;/span&gt; and &lt;span class="system"&gt;$db_pass&lt;/span&gt; values accordingly and move &lt;span class="system"&gt;MailWatch.pm&lt;/span&gt;.&lt;/p&gt; &lt;p class="command"&gt; mv MailWatch.pm /etc/MailScanner/CustomFunctions/&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.7 Create a MailWatch Web User&lt;/h4&gt; &lt;p class="command"&gt; mysql mailscanner -u mailwatch -p&lt;/p&gt; &lt;p&gt;Enter password: ******&lt;/p&gt; &lt;p class="command"&gt;mysql&gt; INSERT INTO users VALUES ('username',md5('password'),'mailscanner','A','0','0','0','0','0');&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.8 Install &amp;amp; Configure MailWatch&lt;/h4&gt; &lt;p&gt;From within the unpacked mailwatch directory move the directory called 'mailscanner' to the web server's root.&lt;/p&gt; &lt;p class="command"&gt; mv mailscanner/ /var/www/&lt;br /&gt;cd /var/www/mailscanner&lt;/p&gt; &lt;p&gt;Make a temp directory:&lt;/p&gt; &lt;p class="command"&gt; mkdir temp&lt;br /&gt;chgrp www-data temp&lt;br /&gt;chmod g+w temp&lt;/p&gt; &lt;p&gt;Check the permissions of &lt;span class="system"&gt;/var/www/mailscanner/images&lt;/span&gt; and &lt;span class="system"&gt;/var/www/images/cache&lt;/span&gt; - they should be ug+rwx and owned by root and in the same group as the web server user.&lt;/p&gt; &lt;p class="command"&gt; chown root:www-data images&lt;br /&gt;chmod ug+rwx images&lt;br /&gt;chown root:www-data images/cache&lt;br /&gt;chmod ug+rwx images/cache&lt;/p&gt; &lt;p&gt;Create &lt;span class="system"&gt;conf.php&lt;/span&gt; by copying &lt;span class="system"&gt;conf.php.example&lt;/span&gt; and edit the values to suit, you will need to set &lt;span class="system"&gt;DB_USER&lt;/span&gt; and &lt;span class="system"&gt;DB_PASS&lt;/span&gt; to the MySQL user and password that you created earlier.&lt;/p&gt; &lt;p&gt;Change these values as shown below:&lt;/p&gt; &lt;pre&gt;# define(DB_USER, 'mailwatch');&lt;br /&gt;# define(DB_PASS, 'password');&lt;br /&gt;# define(MAILWATCH_HOME, '/var/www/mailscanner');&lt;br /&gt;# define(MS_LIB_DIR, '/usr/share/MailScanner/');&lt;br /&gt;# define(QUARANTINE_USE_FLAG, true);&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.9 Set-up MailScanner&lt;/h4&gt; &lt;p&gt;Next edit &lt;span class="system"&gt;/etc/MailScanner/MailScanner.conf&lt;/span&gt;.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/MailScanner/MailScanner.conf &lt;/p&gt; &lt;p&gt;You need to make sure that the following options are set:&lt;/p&gt; &lt;ul&gt;&lt;li&gt; &lt;span class="system"&gt;Quarantine User = root&lt;/span&gt;&lt;/li&gt;&lt;li class="system"&gt; Quarantine Group = www-data&lt;/li&gt;&lt;li class="system"&gt; Quarantine Permissions = 0660&lt;/li&gt;&lt;li class="system"&gt; Quarantine Whole Message = yes&lt;/li&gt;&lt;li class="system"&gt; Always Looked Up Last = &amp;amp;MailWatchLogging&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;And check these as well:&lt;/p&gt; &lt;ul&gt;&lt;li class="system"&gt; Quarantine Whole Message As Queue Files = no&lt;/li&gt;&lt;li class="system"&gt; Detailed Spam Report = yes&lt;/li&gt;&lt;li class="system"&gt; Include Scores In SpamAssassin Report = yes&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Spam Actions, High Scoring Spam Actions and No Spam Actions should also have 'store' as one of the keywords if you want to quarantine those items for bayes learning or viewing from within MailWatch.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.10 Integrate SQL Blacklist/Whitelist (optional)&lt;/h4&gt; &lt;p&gt;If you would like to manage the MailScanner whitelist and blacklist from within the MailWatch web interface perform the following steps.&lt;/p&gt; &lt;p&gt;1. Edit the MySQL connection values within the CreateList subroutine of &lt;span class="system"&gt;SQLBlackWhiteList.pm&lt;/span&gt; to match the values you entered previous into &lt;span class="system"&gt;MailWatch.pm&lt;/span&gt;. Both files should contain the same values. (Look for the following lines in &lt;span class="system"&gt;SQLBlackWhiteList.pm&lt;/span&gt; and enter your own data.)&lt;/p&gt; &lt;pre&gt;my($db_user) = 'mailwatch';&lt;br /&gt;my($db_pass) = 'password';&lt;/pre&gt; &lt;p&gt;2. Copy &lt;span class="system"&gt;SQLBlackWhiteList.pm&lt;/span&gt; to &lt;span class="system"&gt;/etc/MailScanner/CustomFunctions/&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;3. Edit &lt;span class="system"&gt;MailScanner.conf&lt;/span&gt; and set:&lt;/p&gt; &lt;ul&gt;&lt;li class="system"&gt; Is Definitely Not Spam = &amp;amp;SQLWhitelist&lt;/li&gt;&lt;li class="system"&gt; Is Definitely Spam = &amp;amp;SQLBlacklist&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.11 Fix to allow MailWatch to work with Postfix Inbound/Outbound Queue&lt;/h4&gt; &lt;p&gt;Download the patch from &lt;a href="http://www.gbnetwork.co.uk/mailscanner/postfixmail.tar.gz"&gt;http://www.gbnetwork.co.uk/mailscanner/postfixmail.tar.gz&lt;/a&gt;&lt;/p&gt; &lt;p class="command"&gt;cd /usr/src&lt;br /&gt;wget http://www.gbnetwork.co.uk/mailscanner/files/postfixmail.tar.gz&lt;br /&gt;tar xvfz postfixmail.tar.gz&lt;br /&gt;cd postfixmail&lt;br /&gt;cp postfix* /var/www/mailscanner&lt;br /&gt;patch /var/www/mailscanner/functions.php functions.php.diff&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.12 SpamAssassin&lt;/h4&gt; &lt;p&gt;First we need to disable the default SpamAssassin configuration file:&lt;/p&gt; &lt;p class="command"&gt;mv /etc/spamassassin/local.cf /etc/spamassassin/local.cf.disabled&lt;/p&gt; &lt;p&gt;Now let's backup the SpamAssassin configuration file in MailScanner then edit:&lt;/p&gt; &lt;p class="command"&gt;cp /etc/MailScanner/spam.assassin.prefs.conf /etc/MailScanner/spam.assassin.prefs.conf.back&lt;/p&gt; &lt;p&gt;Add pyzor and razor paths:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/MailScanner/spam.assassin.prefs.conf&lt;/p&gt; &lt;p&gt;Add these lines to the top of &lt;span class="system"&gt;spam.assassin.prefs.conf&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;pyzor_options --homedir /var/lib/MailScanner/&lt;br /&gt;razor_config /var/lib/MailScanner/.razor/razor-agent.conf&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.13 Move the Bayesian Databases and set-up permissions (skip this if you don't use bayes)&lt;/h4&gt; &lt;p&gt;Edit &lt;span class="system"&gt;/etc/MailScanner/spam.assassin.prefs.conf&lt;/span&gt; and set:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/MailScanner/spam.assassin.prefs.conf&lt;/p&gt; &lt;pre&gt;bayes_path /etc/MailScanner/bayes/bayes&lt;br /&gt;bayes_file_mode 0660&lt;/pre&gt; &lt;p&gt;Look for these lines and change them accordingly:&lt;/p&gt; &lt;pre&gt;bayes_ignore_header X-YOURDOMAIN-COM-MailScanner&lt;br /&gt;bayes_ignore_header X-YOURDOMAIN-COM-MailScanner-SpamCheck&lt;br /&gt;bayes_ignore_header X-YOURDOMAIN-COM-MailScanner-SpamScore&lt;br /&gt;bayes_ignore_header X-YOURDOMAIN-COM-MailScanner-Information&lt;/pre&gt; &lt;p&gt;"YOURDOMAIN-COM" should be replaced with whatever you used for "%org-name%" in the &lt;span class="system"&gt;MailScanner.conf&lt;/span&gt; file. Leave the "X-" in place.&lt;br /&gt;This is the same orgname used in the &lt;span class="system"&gt;MailScanner.conf&lt;/span&gt; above.&lt;/p&gt; &lt;p&gt;Create the 'new' bayes directory, make the directory owned by the same group as the web server user and make the directory setgid:&lt;/p&gt; &lt;p class="command"&gt;mkdir /etc/MailScanner/bayes&lt;br /&gt;chown -R root:www-data /etc/MailScanner/bayes&lt;br /&gt;chmod -R ug+rw /etc/MailScanner/bayes&lt;br /&gt;chmod g+s /etc/MailScanner/bayes&lt;/p&gt; &lt;p&gt;Copy the existing bayes databases and set the permissions:&lt;/p&gt; &lt;p class="command"&gt;cp /var/lib/MailScanner/bayes_* /etc/MailScanner/bayes&lt;br /&gt;chown root:www-data /etc/MailScanner/bayes/bayes_*&lt;br /&gt;chmod g+rw /etc/MailScanner/bayes/bayes_*&lt;/p&gt; &lt;p&gt;Make sure that "bayes_auto_expire 0" is not commented out in &lt;span class="system"&gt;spam.assassin.prefs.conf&lt;/span&gt;:&lt;/p&gt; &lt;pre&gt;bayes_auto_expire 0&lt;/pre&gt; &lt;p&gt;Edit the SpamAssassin v310.pre to enable Razor and DCC:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/spamassassin/v310.pre&lt;/p&gt; &lt;p&gt;Uncomment the following lines:&lt;/p&gt; &lt;pre&gt;loadplugin Mail::SpamAssassin::Plugin::DCC&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::Razor2&lt;/pre&gt; &lt;p&gt;If you want then you can test SpamAssassin to make sure that it is using the new databases correctly:&lt;/p&gt; &lt;p class="command"&gt; spamassassin -D -p /etc/MailScanner/spam.assassin.prefs.conf --lint&lt;/p&gt; &lt;p&gt;and you should see something like:&lt;/p&gt; &lt;p class="system"&gt;debug: using "/etc/MailScanner/spam.assassin.prefs.conf" for user prefs file&lt;br /&gt;debug: bayes: 28821 tie-ing to DB file R/O /etc/MailScanner/bayes/bayes_toks&lt;br /&gt;debug: bayes: 28821 tie-ing to DB file R/O /etc/MailScanner/bayes/bayes_seen&lt;br /&gt;debug: bayes: found bayes db version 2&lt;br /&gt;debug: Score set 3 chosen.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.13.1 SpamAssassin Bayes Database to SQL Conversion&lt;/h4&gt; &lt;p&gt;&lt;strong&gt;Pre-requisities&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;a. You'll need the perl-DBI and perl-DBD-MySQL modules installed.&lt;/p&gt; &lt;p&gt;Assumptions and Variables:&lt;/p&gt; &lt;p&gt;SpamAssassin Bayes Database Name: &lt;span class="system"&gt;sa_bayes&lt;/span&gt;&lt;br /&gt;SpamAssassin Bayes Database UserName: &lt;span class="system"&gt;sa_user&lt;/span&gt;&lt;br /&gt;SpamAssassin Bayes Database Password: &lt;span class="system"&gt;sa_password&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Create the MySQL database:&lt;/p&gt; &lt;p&gt;First of all, create a database on the server where you intend on storing the bayesian information.&lt;/p&gt; &lt;p class="command"&gt;mysql -u root -p&lt;/p&gt; &lt;p class="command"&gt;mysql&gt; create database sa_bayes;&lt;br /&gt;mysql&gt; GRANT ALL ON sa_bayes.* TO sa_user@localhost IDENTIFIED BY 'sa_password';&lt;br /&gt;mysql&gt; flush privileges;&lt;/p&gt; &lt;p&gt;Locate the &lt;span class="system"&gt;bayes_mysql.sql&lt;/span&gt; file:&lt;/p&gt; &lt;p class="command"&gt; find / -name bayes_mysql.sql&lt;br /&gt;mysql -u sa_user -p sa_bayes &lt; /path/to/bayes_mysql.sql&lt;/p&gt; &lt;p&gt;Backup your current bayes database:&lt;/p&gt; &lt;p class="command"&gt;sa-learn -p /etc/MailScanner/spam.assassin.prefs.conf --backup &gt; sa_bayes_backup.txt&lt;/p&gt; &lt;p&gt;Warning: The next command can completely wipe out your bayes database!&lt;/p&gt; &lt;p class="command"&gt;sa-learn -p /path/to/spam.assassin.prefs.conf --clear #(entirely optional, incase you want to rollback)&lt;/p&gt; &lt;p&gt;Make some changes to your spam.assassin.prefs.conf:&lt;/p&gt; &lt;pre&gt;bayes_store_module Mail::SpamAssassin::BayesStore::SQL&lt;br /&gt;bayes_sql_dsn DBI:mysql:sa_bayes:localhost&lt;br /&gt;bayes_sql_username sa_user&lt;br /&gt;bayes_sql_password sa_password&lt;br /&gt;bayes_sql_override_username root&lt;/pre&gt; &lt;p&gt;and comment out the following lines:&lt;/p&gt; &lt;pre&gt;#bayes_path /etc/MailScanner/bayes/bayes&lt;br /&gt;#bayes_file_mode 0660&lt;/pre&gt; &lt;p&gt;Populate the Bayes SQL database.&lt;/p&gt; &lt;p&gt;Now for recovering the bayes_dbm to bayes_sql.&lt;/p&gt; &lt;p class="command"&gt;sa-learn -p /etc/MailScanner/spam.assassin.prefs.conf --restore sa_bayes_backup.txt&lt;/p&gt; &lt;p&gt;This process may take some time depending on the size of your bayes database.&lt;/p&gt; &lt;p&gt;Also add this to your crontab:&lt;/p&gt; &lt;p class="command"&gt;crontab -e &lt;/p&gt; &lt;pre&gt;30 01 * * * /path/to/sa-learn --force-expire --sync -p /etc/MailScanner/spam.assassin.prefs.conf&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.14 Bring it all Together&lt;/h4&gt; &lt;p&gt;Now that we have everything in there, set the correct permissions:&lt;/p&gt; &lt;p class="command"&gt;chown -R postfix:www-data /var/spool/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/lib/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/run/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/lock/subsys/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/spool/postfix/hold&lt;br /&gt;chmod -R ug+rwx /var/spool/postfix/hold&lt;/p&gt; &lt;p&gt;Finally make sure you restart MailScanner.&lt;/p&gt; &lt;p class="command"&gt; /etc/init.d/mailscanner restart&lt;/p&gt; &lt;p&gt;Test out the setup:&lt;/p&gt; &lt;p class="command"&gt; spamassassin -x -D -p /etc/MailScanner/spam.assassin.prefs.conf --lint&lt;/p&gt; &lt;p&gt;Check for lines like:&lt;/p&gt; &lt;p class="system"&gt;debug: bayes: Database connection established&lt;br /&gt;debug: bayes: found bayes db version 3&lt;br /&gt;debug: bayes: Using userid: 2&lt;/p&gt; &lt;p&gt;and some more like&lt;/p&gt; &lt;p class="system"&gt;debug: bayes: tok_get_all: Token Count: 20&lt;br /&gt;debug: bayes token 'somewhat' ? 0.978&lt;br /&gt;debug: bayes: score = 0.845189622547555&lt;/p&gt; &lt;p&gt;You should see lines come up with DCC, Pyzor and Razor that say loading plugin and hopefully no errors.&lt;/p&gt; &lt;p&gt;Finishing up this part we need to add cron jobs that will clean/update, you probably saw the message about this after the MailScanner install script finished.&lt;/p&gt; &lt;p&gt;First edit &lt;span class="system"&gt;conf.php&lt;/span&gt; and set 'QUARANTINE_DAYS_TO_KEEP' in &lt;span class="system"&gt;conf.php&lt;/span&gt; and change the following line in db_clean.&lt;/p&gt; &lt;pre&gt;#!/usr/bin/php -qn&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;#!/usr/bin/php -q&lt;/pre&gt; &lt;p&gt;Install quarantine clean up script:&lt;/p&gt; &lt;p class="command"&gt;cp /usr/src/mailwatch-1.0.4/tools/quarantine_maint.php /usr/bin/quarantine_maint.php&lt;br /&gt;cp /usr/src/mailwatch-1.0.4/tools/db_clean.php /usr/bin/db_clean.php&lt;br /&gt;chmod +x /usr/bin/quarantine_maint.php&lt;br /&gt;chmod +x /usr/bin/db_clean.php&lt;/p&gt; &lt;p&gt;Run &lt;/p&gt; &lt;p class="command"&gt;crontab -e &lt;/p&gt; &lt;p&gt;and add the following:&lt;/p&gt; &lt;pre&gt;15 10 * * 2 /usr/bin/quarantine_maint.php -clean &amp;amp;&gt; /dev/null&lt;br /&gt;58 23 * * * /usr/bin/db_clean.php &amp;amp;&gt; /dev/null&lt;/pre&gt; &lt;p&gt;Disable the mailscanner installed cron script &lt;span class="system"&gt;/etc/cron.daily/clean.quarantine&lt;/span&gt;.&lt;/p&gt; &lt;pre&gt;$disabled = 1;&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.15 Reboot&lt;/h4&gt; &lt;p class="command"&gt;reboot&lt;/p&gt; &lt;p&gt;Check your mail.log again:&lt;/p&gt; &lt;p class="command"&gt;tail -f /var/log/mail.log&lt;/p&gt; &lt;p&gt;At this point you should have a functional spamfilter and should see something like:&lt;/p&gt; &lt;p class="system"&gt;Jun 13 12:18:23 hoshi MailScanner[26388]: MailScanner E-Mail Virus Scanner version 4.20-3 starting...&lt;br /&gt;Jun 13 12:18:24 hoshi MailScanner[26388]: Config: calling custom init function MailWatchLogging&lt;br /&gt;Jun 13 12:18:24 hoshi MailScanner[26388]: Initialising database connection&lt;br /&gt;Jun 13 12:18:24 hoshi MailScanner[26388]: Finished initialising database connection&lt;/p&gt; &lt;p&gt;Congratulations - you now have MailScanner logging to MySQL.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.16 Test the MailWatch interface&lt;/h4&gt; &lt;p&gt;Point your browser to &lt;span class="system"&gt;http://&lt;hostname&gt;/mailscanner/&lt;/hostname&gt;&lt;/span&gt; - you should be prompted for a username and password - enter the details of the MailWatch web user that you created earlier, and you should see a list of the last 50 messages processed by MailScanner.&lt;/p&gt; &lt;p&gt;If you're not able to see the mails, then you may have to set the following persmissions:&lt;/p&gt; &lt;p class="command"&gt;chgrp -R www-data /var/spool/MailScanner&lt;/p&gt; &lt;p&gt;You may have to create the following to prevent an error in a lint test:&lt;/p&gt; &lt;p class="command"&gt;mkdir /var/www/.spamassassin&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.17 Fix for Ubuntu 8.04 (kept removing directories upon reboot)&lt;/h4&gt; &lt;p&gt;Edit &lt;span class="system"&gt;/etc/rc.local&lt;/span&gt; and add the following before the exit line:&lt;/p&gt; &lt;pre&gt;mkdir /var/run/MailScanner&lt;br /&gt;mkdir /var/lock/subsys&lt;br /&gt;mkdir /var/lock/subsys/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/run/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/lock/subsys/MailScanner&lt;br /&gt;/etc/init.d/postfix restart&lt;br /&gt;/etc/init.d/mailscanner restart&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.18 Update the SpamAssassin Rules table&lt;/h4&gt; &lt;p&gt;MailWatch keeps a list of all the SpamAssassin rules and descriptions which are displayed on the 'Message Detail' page - to show the descriptions, you need to run the updater every time you add new rules or upgrade SpamAssassin. Click on the 'Tools/Links' menu and select 'Update SpamAssassin Rule Descriptions' and click 'Run Now'.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.19 Update the GeoIP database&lt;/h4&gt; &lt;p&gt;Change &lt;span class="system"&gt;/var/www/mailscanner/geoip_update.php&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;vi /var/www/mailscanner/geoip_update.php&lt;/p&gt; &lt;pre&gt;dbquery("LOAD DATA INFILE&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;dbquery("LOAD DATA LOCAL INFILE&lt;/pre&gt; &lt;p&gt;Make sure you have &lt;span class="system"&gt;allow_url_fopen = On&lt;/span&gt; in your &lt;span class="system"&gt;php.ini&lt;/span&gt; set.&lt;/p&gt; &lt;p&gt;Click on the 'Tools/Links' menu and select 'Update GeoIP database' and click 'Run Now'.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.20 Setup the Mail Queue watcher (optional)&lt;/h4&gt; &lt;p&gt;You can get MailWatch to watch and display your sendmail or exim queue directories - all you need to do is copy &lt;span class="system"&gt;mailq.php&lt;/span&gt; (from the root of the mailwatch tarball - not from the mailscanner directory - they are different!) to &lt;span class="system"&gt;/usr/local/bin&lt;/span&gt; and set-up a cron-job to run it.&lt;/p&gt; &lt;p&gt;Edit &lt;span class="system"&gt;mailq.php&lt;/span&gt; first to change the require line to point to the location of &lt;span class="system"&gt;functions.php&lt;/span&gt;, then:&lt;/p&gt; &lt;p class="command"&gt; cp mailq.php /usr/local/bin&lt;br /&gt;crontab -e&lt;/p&gt; &lt;pre&gt;0-59 * * * * /usr/local/bin/mailq.php&lt;/pre&gt; &lt;p&gt;Note: &lt;span class="system"&gt;mailq.php&lt;/span&gt; re-creates all entries on each run, so for busy sites you will probably want to change this to run every 5 minutes or greater.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.21 Setup the Sendmail Relay Log watcher (optional)&lt;/h4&gt; &lt;p&gt;You can get MailWatch to watch your sendmail logs and store all message relay information which is then displayed on the 'Message Detail' page which helps debugging and makes it easy for a Helpdesk to actually see where a message was delivered to by the MTA and what the response back was (e.g. the remote queue id etc.).&lt;/p&gt; &lt;p class="command"&gt; cp tools/sendmail_relay.php /usr/local/bin&lt;br /&gt;nohup /usr/local/bin/sendmail_relay.php 2&gt;&amp;amp;1 &gt; /dev/null &amp;amp;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.22 Fix to allow wildcards in Whitelist/Blacklist&lt;/h4&gt; &lt;p&gt;Add the following to the bottom of the &lt;span class="system"&gt;return 1&lt;/span&gt; section in your &lt;span class="system"&gt;SQLBlackWhiteList.pm&lt;/span&gt;:&lt;/p&gt; &lt;pre&gt;return 1 if $BlackWhite-&gt;{$to}{'*@'.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{$to}{'*@*.'.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{$todomain}{'*@'.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{$todomain}{'*@*.'.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{'default'}{'*@'.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{'default'}{'*@*.'.$fromdomain};&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.23 Fix for the Reporting Function in Message Operations&lt;/h4&gt; &lt;p&gt;Change the following in &lt;span class="system"&gt;/var/www/mailscanner/do_message_ops.php&lt;/span&gt; file:&lt;/p&gt; &lt;p class="command"&gt;vi /var/www/mailscanner/do_message_ops.php&lt;/p&gt; &lt;pre&gt;$id = $Regs[1];&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;$id = str_replace("_", ".",$Regs[1]);&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.24 Fix to Allow Quarantine Release of Messages&lt;/h4&gt; &lt;p&gt;Change the following in &lt;span class="system"&gt;/var/www/mailscanner/conf.php&lt;/span&gt; file:&lt;/p&gt; &lt;p class="command"&gt;vi /var/www/mailscanner/conf.php&lt;/p&gt; &lt;pre&gt;define(QUARANTINE_USE_SENDMAIL, false);&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;define(QUARANTINE_USE_SENDMAIL, true);&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.25 Fix to Allow Correct ClamAV Status&lt;/h4&gt; &lt;p&gt;Change the following in &lt;span class="system"&gt;/var/www/mailscanner/clamav_status.php&lt;/span&gt; file:&lt;/p&gt; &lt;pre&gt;&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt;&lt;p&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="titles"&gt;&lt;div class="next"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style="text-align: center;"&gt;Copyright © 2008 Rocky&lt;br /&gt;All Rights Reserved.&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-6938693074450018155?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6938693074450018155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6938693074450018155'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7354144043478323624</id><published>2008-05-01T00:24:00.003-07:00</published><updated>2008-05-03T00:26:51.652-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04</title><content type='html'>&lt;h4 style="font-weight: normal;"&gt;Author : Rocky&lt;/h4&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6.3 Postfix Anti-Spam Settings&lt;/span&gt; &lt;h4&gt;6.3.1 smtpd_helo_required&lt;/h4&gt; &lt;p&gt;Make any connecting mail server do a proper smtp "handshake" and announce its name. Internet RFCs require this, so we do too.&lt;/p&gt; &lt;p class="command"&gt;postconf -e "smtpd_helo_required = yes"&lt;/p&gt; &lt;p&gt;I also changed the smtpd_banner to "$myhostname ESMTP $mail_name SpamSnake".&lt;/p&gt; &lt;p&gt;Preface: Postfix' restriction stages are as follows, and are processed in the following order:&lt;/p&gt; &lt;p class="system"&gt;smtpd_client_restrictions&lt;br /&gt;smtpd_helo_restrictions&lt;br /&gt;smtpd_sender_restrictions&lt;br /&gt;smtpd_recipient_restrictions&lt;br /&gt;smtpd_data_restrictions&lt;/p&gt; &lt;p&gt;We are only going to place entries in the last three restriction stages. Restriction stages are processed in this order regardless of the order listed in main.cf.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.2 smtpd_sender_restrictions&lt;/h4&gt; &lt;p&gt;This restriction stage restricts what sender addresses this system accepts in MAIL FROM: commands (the envelope sender). We will place three tests (restrictions) in this restriction stage.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.4 check_sender_access (Optional)&lt;/h4&gt; &lt;p&gt;Here we ask Postfix to compare the envelope sender to entries in an &lt;span class="system"&gt;/etc/postfix/sender_access&lt;/span&gt; database and act upon those entries if a match is found. We also define what action is taken there (OK, DUNNO, REJECT etc.) on a sender by sender basis. If the sender is not listed in the file, the test evaluates to DUNNO, and the next test is performed.&lt;/p&gt;&lt;h4&gt;6.3.5 reject_non_fqdn_sender&lt;/h4&gt; &lt;p&gt;Reject when the envelope sender mail address is not in the proper format.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.6 reject_unknown_sender_domain&lt;/h4&gt; &lt;p&gt;Reject when the envelope sender's domain part of the mail address has no DNS "A" or "MX" record at all. On occasion, you will see in a report that someone you wish to receive mail from has been rejected by this setting. One possible cause of this is when legitimate senders deliberately use bogus domain names so you will not reply to them. This is where the sender access list comes in handy. You can give them an OK there, and this test will be bypassed.&lt;/p&gt; &lt;p&gt;Now to implement these three restrictions:&lt;/p&gt; &lt;p class="command"&gt;postconf -e "smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access, reject_non_fqdn_sender, reject_unknown_sender_domain"&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.7 smtpd_recipient_restrictions&lt;/h4&gt; &lt;p&gt;The access restrictions that the Postfix SMTP server applies in the context of the RCPT TO: command. This refers to the "envelope recipient" which is what the client gave in the "RCPT TO:" line during the SMTP session, not the header "To:" line. Let's look at those specific restrictions (tests) we place in smtpd_recipient_restrictions:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.8 permit_mynetworks&lt;/h4&gt; &lt;p&gt;Allows machines listed in "mynetworks" to skip the rest of the tests in this restriction stage (permit = OK). In other words, it exits this stage and is tested in the next stage (smtpd_data_restrictions). Because permit_mynetworks is placed in front of reject_unauth_destination, this means machines in $mynetworks are allowed to relay mail to any domain. Without this, we would only be able to send mail to our own domain(s). If the IP address of the sender is not listed in $mynetworks, the test evaluates to "DUNNO" and continues on to the next test (reject_unauth_destination).&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.9 reject_unauth_destination &amp;amp; reject_unknown_recipient_domain&lt;/h4&gt; &lt;p&gt;This, along with permit_mynetworks is used for relay control. This setting, in essence, means that mail bound for any domain that we have not configured our machine to accept mail for will be rejected. In our case Postfix will use the relay_domains setting (or table) that we configured earlier to determine what domains those are. If the domain is listed in relay_domains, this test evaluates to "DUNNO" and the session is allowed to go on to the next test (if any).&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.10 reject_unauth_pipelining&lt;/h4&gt; &lt;p&gt;Rejects bulk mailers that attempt to use pipelining to speed delivery, without checking if it is supported first (non-RFC, common among spammers).&lt;/p&gt; &lt;p&gt;Now to implement these three restrictions:&lt;/p&gt; &lt;p class="command"&gt;postconf -e "smtpd_recipient_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_rbl_client zen.spamhaus.org"&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.11 smtpd_data_restrictions&lt;/h4&gt; &lt;p&gt;Optional access restrictions that the Postfix SMTP server applies in the context of the SMTP DATA: command. Like smtpd_recipient_restrictions, this is a restriction stage.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.12 reject_unauth_pipelining&lt;/h4&gt; &lt;p&gt;I repeat this setting in smtpd_data_restrictions as it is not always effective when placed in smtpd_recipient_restrictions. I include it in smtpd_recipient_restrictions as I like to place it prior to any policy servers. Note that there are only a couple of restrictions that make good use of smtpd_data_restrictions.&lt;/p&gt; &lt;p class="command"&gt;postconf -e "smtpd_data_restrictions = reject_unauth_pipelining"&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.13 /etc/postfix/sender_access&lt;/h4&gt; &lt;p&gt;We referenced this file in smtpd_sender_restrictions. We use this file to check the sender right at the front door. In this file, we'll list certain senders/domains/IPaddress ranges for special handling. Below are bogus examples, create your own as you see fit. Please read &lt;span class="system"&gt;/etc/postfix/sender_access&lt;/span&gt; for more information. Although you could use this file for various purposes, considering the way we have set this up in smtpd_sender_restrictions, I suggest using it to either blacklist senders, or allow certain senders to bypass the remaining tests in &lt;span class="system"&gt;smtpd_sender_restrictions&lt;/span&gt;.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/sender_access&lt;/p&gt; &lt;pre&gt;#Example sender access map file&lt;br /&gt;makeabuck@mlm.tld 550 No MLM thanks&lt;br /&gt;allspam.tld 550 Spam is not accepted here&lt;br /&gt;badguy.net REJECT&lt;br /&gt;justaspamminfool@allspamallthetime.com REJECT&lt;br /&gt;newsletter-favorite-lug.org OK&lt;br /&gt;my-really-l337-test-domain.com OK&lt;/pre&gt; &lt;p&gt;Since this is a hash table, you need to postmap it as usual:&lt;/p&gt; &lt;p class="command"&gt;postmap /etc/postfix/sender_access&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.14 Final Look at the Postfix Install&lt;/h4&gt; &lt;p&gt;Review changes:&lt;/p&gt; &lt;p class="command"&gt;less /etc/postfix/main.cf&lt;/p&gt; &lt;p&gt;Check the contents of the file for errors and repair if needed. Fire up Postfix:&lt;/p&gt; &lt;p class="command"&gt;postfix start&lt;/p&gt; &lt;p&gt;Check that Postfix responds:&lt;/p&gt; &lt;p class="command"&gt;telnet 127.0.0.1 25&lt;/p&gt; &lt;p&gt;You should see:&lt;/p&gt; &lt;p class="system"&gt;220 [yourFQDNhere] ESMTP Postfix (Ubuntu)&lt;/p&gt; &lt;p&gt;Hit [enter] a few times; then type &lt;span class="system"&gt;quit&lt;/span&gt; to exit.&lt;/p&gt; &lt;p&gt;If it does not reply in this manner, open another terminal window and stop Postfix:&lt;/p&gt; &lt;p class="command"&gt; postfix stop&lt;/p&gt; &lt;p&gt; Make sure you ran &lt;span class="system"&gt;newaliases&lt;/span&gt; and all the &lt;span class="system"&gt;postmap&lt;/span&gt; commands above. Check all the settings in main.cf and master.cf. Any time you make changes to master.cf or main.cf or to data tables, most (not all) of the time, it is required that you to reload Postfix with:&lt;/p&gt; &lt;p class="command"&gt;postfix reload&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;7 Pyzor, Razor, DCC, SpamAssassin and MailScanner Configuration&lt;/h3&gt; &lt;h4&gt;7.1 Install MailScanner&lt;/h4&gt; &lt;p&gt;Install MailScanner Dependencies by doing the following:&lt;/p&gt; &lt;p class="command"&gt;apt-get install libconvert-tnef-perl libdbd-sqlite3-perl libfilesys-df-perl libmailtools-perl libmime-tools-perl libmime-perl libnet-cidr-perl libsys-syslog-perl libio-stringy-perl libfile-temp-perl&lt;/p&gt; &lt;p&gt;Install MailScanner from the Debian .deb Source:&lt;/p&gt; &lt;p class="command"&gt;wget http://debian.intergenia.de/debian/pool/main/m/mailscanner/mailscanner_4.68.8-1_all.deb&lt;br /&gt;dpkg -i mailscanner_4.68.8-1_all.deb&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;7.2 Pyzor Configuration&lt;/h4&gt; &lt;p&gt;We need to change some permissions on pyzor first:&lt;/p&gt; &lt;p class="command"&gt;chmod -R a+rX /usr/share/doc/pyzor /usr/bin/pyzor /usr/bin/pyzord&lt;br /&gt;chmod -R a+rxX /usr/share/python-support/pyzor&lt;/p&gt; &lt;p&gt;Here we supply the IP address of the Pyzor server to Pyzor. This will create the server's IP address in a servers file therein. Then it will test the connection. If you are behind a firewall, open port 24441/udp in and out to your server. While you're at it also open up 6277/udp for DCC, 2703/tcp for Razor and 783/tcp for SpamAssassin:&lt;/p&gt; &lt;p class="command"&gt;pyzor --homedir /var/lib/MailScanner discover&lt;br /&gt;pyzor ping&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;7.3 Razor Configuration&lt;/h4&gt; &lt;p&gt;Create the .razor configuration:&lt;/p&gt; &lt;p class="command"&gt;cd&lt;br /&gt;rm /etc/razor/razor-agent.conf&lt;br /&gt;mkdir /var/lib/MailScanner/.razor&lt;br /&gt;razor-admin -home=/var/lib/MailScanner/.razor -create&lt;br /&gt;razor-admin -home=/var/lib/MailScanner/.razor -discover&lt;br /&gt;razor-admin -home=/var/lib/MailScanner/.razor -register&lt;br /&gt;chown -R postfix:www-data /var/lib/MailScanner&lt;br /&gt;chmod -R ug+rwx /var/lib/MailScanner&lt;/p&gt; &lt;p&gt;Make the following changes to &lt;span class="system"&gt;/var/lib/MailScanner/.razor/razor-agent.conf&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;vi /var/lib/MailScanner/.razor/razor-agent.conf&lt;/p&gt; &lt;p&gt;Change &lt;span class="system"&gt;debuglevel = 3&lt;/span&gt; to &lt;span class="system"&gt;debuglevel = 0&lt;/span&gt; (yes zero not "o"). This will prevent Razor from filling up your drive with debug information. Those two lines should look like this when done:&lt;/p&gt; &lt;pre&gt;debuglevel = 0&lt;br /&gt;razorhome = /var/lib/MailScanner/.razor/&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;7.4 DCC Setup and Configuration&lt;/h4&gt; &lt;p&gt;Install DCC from .deb source:&lt;/p&gt; &lt;p class="command"&gt;wget http://launchpadlibrarian.net/11564361/dcc-server_1.3.42-5_i386.deb&lt;br /&gt;wget http://launchpadlibrarian.net/11564359/dcc-common_1.3.42-5_i386.deb&lt;br /&gt;dpkg -i dcc-common_1.3.42-5_i386.deb&lt;br /&gt;dpkg -i dcc-server_1.3.42-5_i386.deb&lt;/p&gt; &lt;p&gt;We are not running a DCC server, so we don't need to waste time checking ourselves.&lt;br /&gt;Once the installation is done run:&lt;/p&gt; &lt;p class="command"&gt;cdcc "delete 127.0.0.1"&lt;br /&gt;cdcc "delete 127.0.0.1 Greylist"&lt;/p&gt; &lt;p&gt;Test our installation with:&lt;/p&gt; &lt;p class="command"&gt;cdcc info&lt;/p&gt; &lt;p&gt;You should get 'requests ok' from the servers.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;8 Configuring MailScanner and ClamAV&lt;/h3&gt; &lt;h4&gt;8.1 Stop Postfix:&lt;/h4&gt; &lt;p class="command"&gt;postfix stop&lt;/p&gt; &lt;p&gt;Install the packages:&lt;/p&gt; &lt;p class="command"&gt;apt-get install clamav clamav-daemon&lt;/p&gt; &lt;p&gt;Update ClamAV virus defenitions:&lt;/p&gt; &lt;p class="command"&gt;freshclam&lt;/p&gt; &lt;p&gt;Once that is done, we need to make a directory for SpamAssassin in the spool and give postfix permissions to it, if you run sa-learn --force as root, bayes databese that is stored in these directories will change to root:root and spamassassin will error looking at the db. Just keep an eye on the mail.log and you'll remember to change the permissions back. Also disable the MailScanner default configs:&lt;/p&gt; &lt;p class="command"&gt;mkdir /var/spool/MailScanner/spamassassin&lt;/p&gt; &lt;p&gt;Backup your &lt;span class="system"&gt;MailScanner.conf&lt;/span&gt; file:&lt;/p&gt; &lt;p class="command"&gt;cp /etc/MailScanner/MailScanner.conf /etc/MailScanner/MailScanner.conf.back&lt;/p&gt; &lt;p&gt;Edit &lt;span class="system"&gt;MailScanner.conf&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/MailScanner/MailScanner.conf&lt;/p&gt; &lt;p&gt;Change the following parameters in &lt;span class="system"&gt;MailScanner.conf&lt;/span&gt;:&lt;/p&gt; &lt;pre&gt;%org-name% = ORGNAME&lt;br /&gt;%org-long-name% = ORGFULLNAME&lt;br /&gt;%web-site% = ORGWEBSITE&lt;br /&gt;Run As User = postfix&lt;br /&gt;Run As Group = postfix&lt;br /&gt;Incoming Queue Dir = /var/spool/postfix/hold&lt;br /&gt;Outgoing Queue Dir = /var/spool/postfix/incoming&lt;br /&gt;MTA = postfix&lt;br /&gt;Virus Scanners = clamav&lt;br /&gt;Spam Subject Text = ***SPAM***&lt;br /&gt;Send Notices = no&lt;br /&gt;Spam List = spamcop.net SBL+XBL&lt;br /&gt;Required SpamAssassin Score = 6&lt;br /&gt;High SpamAssassin Score = 10&lt;br /&gt;Spam Actions = deliver&lt;br /&gt;High Scoring Spam Actions = delete&lt;br /&gt;Rebuild Bayes Every = 0&lt;br /&gt;Wait During Bayes Rebuild = no&lt;br /&gt;SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin&lt;/pre&gt; &lt;p&gt;The first 9 lines are basically required in order for everything to work, the rest are recommended.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;8.2 header_checks &amp;amp; body_checks&lt;/h4&gt; &lt;p&gt;Let's go ahead and put this in main.cf. header_checks is required because it allows us to hold all incoming email in order for MailScanner to do its thing:&lt;/p&gt; &lt;p class="command"&gt;postconf -e "header_checks = regexp:/etc/postfix/header_checks"&lt;/p&gt; &lt;p&gt;Edit header_checks:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/header_checks&lt;/p&gt; &lt;p&gt;Add this line to the header_checks file, without it MailScanner will not work:&lt;/p&gt; &lt;pre&gt;/^Received:/ HOLD&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;8.3 Fix to Disable Permission Checks on MailScanner Directories&lt;/h4&gt; &lt;p&gt;Comment out the lines that check directory permissions on &lt;span class="system"&gt;/var/*&lt;/span&gt; in &lt;span class="system"&gt;/etc/rc2.d/S20mailscanner&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;In the file &lt;span class="system"&gt;/etc/default/mailscanner&lt;/span&gt;, make sure this parameter is at 1:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/default/mailscanner&lt;/p&gt; &lt;pre&gt;run_mailscanner=1&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;8.4 MailScanner Webmin Plugin (Optional)&lt;/h4&gt; &lt;p&gt;Login to Webmin, &lt;span class="system"&gt;https://localhost:10000&lt;/span&gt;, and install the MailScanner module for webmin found at &lt;a href="http://internap.dl.sourceforge.net/sourceforge/msfrontend/webmin-module-1.1-4.wbm" target="_blank"&gt;http://internap.dl.sourceforge.net/sourceforge/msfrontend/webmin-module-1.1-4.wbm&lt;/a&gt;. After this is done, you'll have to enter the following into your mailscanner module to get it to work:&lt;/p&gt; &lt;p&gt;Full path to MailScanner program &lt;span class="system"&gt;/etc/init.d/mailscanner&lt;/span&gt;&lt;br /&gt;Full path and filename of MailScanner config file &lt;span class="system"&gt;/etc/MailScanner/MailScanner.conf&lt;/span&gt;&lt;br /&gt;Full path to the MailScanner bin directory &lt;span class="system"&gt;/usr/sbin&lt;/span&gt;&lt;br /&gt;Full path and filename for the MailScanner pid file &lt;span class="system"&gt;/var/run/MailScanner/MailScanner.pid&lt;/span&gt;&lt;br /&gt;Command to start MailScanner &lt;span class="system"&gt;/etc/init.d/mailscanner start&lt;/span&gt;&lt;br /&gt;Command to stop MailScanner &lt;span class="system"&gt;/etc/init.d/mailscanner stop&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;8.5 You can now start the system&lt;/h4&gt; &lt;p class="command"&gt;/etc/init.d/mailscanner start&lt;br /&gt;/etc/init.d/postfix start&lt;/p&gt; &lt;p&gt;Check your logs for errors:&lt;/p&gt;  &lt;p class="command"&gt;tail -f /var/log/mail.log&lt;/p&gt;&lt;p&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;div class="titles"&gt;&lt;div class="prev"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;div class="next"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-7354144043478323624?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7354144043478323624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7354144043478323624'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8265815703165174862</id><published>2008-05-01T00:19:00.002-07:00</published><updated>2008-05-03T00:25:32.065-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03</title><content type='html'>&lt;h3&gt;&lt;span style="font-weight: normal;"&gt;Author : Rocky&lt;/span&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2 DNS Server&lt;/h3&gt; &lt;p&gt;Run&lt;/p&gt; &lt;p class="command"&gt;apt-get install bind9&lt;/p&gt; &lt;p&gt;For security reasons we want to run BIND chrooted so we have to do the following steps:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/bind9 stop&lt;/p&gt; &lt;p&gt;Edit the file &lt;span class="system"&gt;/etc/default/bind9&lt;/span&gt; so that the daemon will run as the unprivileged user bind, chrooted to &lt;span class="system"&gt;/var/lib/named&lt;/span&gt;. Modify the line: &lt;span class="system"&gt;OPTIONS="-u bind"&lt;/span&gt; so that it reads &lt;span class="system"&gt;OPTIONS="-u bind -t /var/lib/named"&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/default/bind9 &lt;/p&gt;&lt;pre&gt;OPTIONS="-u bind -t /var/lib/named"&lt;/pre&gt; &lt;p&gt;Create the necessary directories under &lt;span class="system"&gt;/var/lib&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;mkdir -p /var/lib/named/etc&lt;br /&gt;mkdir /var/lib/named/dev&lt;br /&gt;mkdir -p /var/lib/named/var/cache/bind&lt;br /&gt;mkdir -p /var/lib/named/var/run/bind/run&lt;/p&gt; &lt;p&gt;Then move the config directory from &lt;span class="system"&gt;/etc&lt;/span&gt; to &lt;span class="system"&gt;/var/lib/named/etc&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;mv /etc/bind /var/lib/named/etc&lt;/p&gt; &lt;p&gt;Create a symlink to the new config directory from the old location (to avoid problems when bind gets updated in the future):&lt;/p&gt; &lt;p class="command"&gt;ln -s /var/lib/named/etc/bind /etc/bind&lt;/p&gt; &lt;p&gt;Make null and random devices, and fix permissions of the directories:&lt;/p&gt; &lt;p class="command"&gt;mknod /var/lib/named/dev/null c 1 3&lt;br /&gt;mknod /var/lib/named/dev/random c 1 8&lt;br /&gt;chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random&lt;br /&gt;chown -R bind:bind /var/lib/named/var/*&lt;br /&gt;chown -R bind:bind /var/lib/named/etc/bind&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We need to modify &lt;span class="system"&gt;/etc/default/syslogd&lt;/span&gt; so that we can still get important messages logged to the system logs. Modify the line: &lt;span class="system"&gt;SYSLOGD=""&lt;/span&gt; so that it reads &lt;span class="system"&gt;SYSLOGD="-a /var/lib/named/dev/log"&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/default/syslogd&lt;/p&gt;&lt;pre&gt;SYSLOGD="-a /var/lib/named/dev/log"&lt;/pre&gt; &lt;p&gt;Restart the logging daemon:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/sysklogd restart&lt;/p&gt; &lt;p&gt;Start up BIND, and check &lt;span class="system"&gt;/var/log/syslog&lt;/span&gt; for errors:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/bind9 start&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;3 MySQL&lt;/h3&gt; &lt;p&gt;In order to install MySQL, we run&lt;/p&gt; &lt;p class="command"&gt;apt-get install mysql-server mysql-client libmysqlclient15-dev&lt;/p&gt; &lt;p&gt;You will be asked to provide a password for the MySQL root user - this password is valid for the user &lt;span class="system"&gt;root@localhost&lt;/span&gt; as well as &lt;span class="system"&gt;root@server1.example.com&lt;/span&gt;, so we don't have to specify a MySQL root password manually later on (as was the case with previous Ubuntu versions):&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;New password for the MySQL "root" user:&lt;/span&gt; &lt;span class="highlight"&gt;&lt;-- yourrootsqlpassword&lt;/span&gt;&lt;/p&gt; &lt;p&gt;We want MySQL to listen on all interfaces, not just localhost, therefore we edit &lt;span class="system"&gt;/etc/mysql/my.cnf&lt;/span&gt; and comment out the line &lt;span class="system"&gt;bind-address = 127.0.0.1&lt;/span&gt;:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/mysql/my.cnf&lt;/p&gt;&lt;pre&gt;#bind-address =127.0.0.1&lt;/pre&gt; &lt;p&gt;Then we restart MySQL:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/mysql restart&lt;/p&gt; &lt;p&gt;Now check that networking is enabled. Run&lt;/p&gt; &lt;p class="command"&gt;netstat -tap | grep mysql&lt;/p&gt; &lt;p&gt;The output should look like this:&lt;/p&gt; &lt;p class="system"&gt;tcp 0 0 *:mysql *.* LISTEN 5286/mysqld&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;4 Apache with PHP5 and Ruby&lt;/h3&gt; &lt;p&gt;Now we install Apache:&lt;/p&gt; &lt;p class="command"&gt;apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert&lt;/p&gt; &lt;p&gt;Next we install PHP5 and Ruby (both as Apache modules):&lt;/p&gt; &lt;p class="command"&gt;apt-get install libapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-sqlite php5-tidy php5-xmlrpc php5-xsl&lt;/p&gt; &lt;p&gt;You will be asked the following question:&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;Continue installing libc-client without Maildir support?&lt;/span&gt; &lt;span class="highlight"&gt;&lt;-- Yes&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Next we edit &lt;span class="system"&gt;/etc/apache2/mods-available/dir.conf&lt;/span&gt; and change the following:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/apache2/mods-available/dir.conf&lt;/p&gt;&lt;pre&gt;DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml&lt;/pre&gt; &lt;p&gt;Now we have to enable some Apache modules (SSL, rewrite, suexec, and include):&lt;/p&gt; &lt;p class="command"&gt;a2enmod ssl&lt;br /&gt;a2enmod rewrite&lt;br /&gt;a2enmod suexec&lt;br /&gt;a2enmod include&lt;/p&gt; &lt;p&gt;Reload the Apache configuration:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/apache2 force-reload&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;4.1 Fix for Imagick&lt;/h4&gt; &lt;p&gt;Because of a bug that causes the following error, the below must be done as a workaround:&lt;/p&gt; &lt;p class="system"&gt;PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20060613/imagick.so' - libWand.so.9: cannot open shared object file: No such file or directory in Unknown on line 0&lt;/p&gt; &lt;p class="command"&gt;apt-get remove php5-imagick&lt;/p&gt; &lt;p class="command"&gt;apt-get install libmagick9-dev&lt;/p&gt; &lt;p class="command" editor_id="mce_editor_0"&gt;pecl install imagick&lt;/p&gt; &lt;p editor_id="mce_editor_0"&gt;Edit /etc/php5/apache2/php.ini and add the following:&lt;/p&gt; &lt;p editor_id="mce_editor_0"&gt; &lt;/p&gt; &lt;p editor_id="mce_editor_0"&gt;&lt;span class="command" editor_id="mce_editor_0"&gt;extension=imagick.so&lt;/span&gt;&lt;/p&gt; &lt;p editor_id="mce_editor_0"&gt;&lt;span class="command" editor_id="mce_editor_0"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="command" editor_id="mce_editor_0"&gt;/etc/init.d/apache2 restart&lt;/p&gt; &lt;p editor_id="mce_editor_0"&gt; &lt;/p&gt; &lt;h3&gt;5 Synchronize the System Clock&lt;/h3&gt; &lt;p&gt;It is a good idea to synchronize the system clock with an NTP (network time protocol) server over the internet. Simply run&lt;/p&gt; &lt;p class="command"&gt;apt-get install ntp ntpdate&lt;/p&gt; &lt;p&gt;and your system time will always be in sync.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;6 Setting up Postfix&lt;/h3&gt; &lt;p class="command"&gt;apt-get install postfix postfix-pcre postfix-mysql postfix-ldap cabextract lha unrar razor pyzor spamassassin&lt;/p&gt; &lt;p&gt;You will be asked two questions. Answer as follows:&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;General type of mail configuration:&lt;/span&gt; &lt;span class="highlight"&gt;&lt;-- Internet Site&lt;/span&gt;&lt;br /&gt;&lt;span class="system"&gt;System mail name:&lt;/span&gt; &lt;span class="highlight"&gt;&lt;-- server1.example.com&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Stop Postfix:&lt;/p&gt; &lt;p class="command"&gt;postfix stop&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.1 Edit master.cf&lt;/h4&gt; &lt;p&gt;BTW watch for the two Postfix configuration files, both located in the &lt;span class="system"&gt;/etc/postfix&lt;/span&gt; folder. More than one admin has gotten confused between &lt;span class="system"&gt;master.cf&lt;/span&gt; and &lt;span class="system"&gt;main.cf&lt;/span&gt;!&lt;/p&gt; &lt;p&gt;First back up the current master.cf:&lt;/p&gt; &lt;p class="command"&gt;cp /etc/postfix/master.cf /etc/postfix/master.cf-orig&lt;/p&gt; &lt;p&gt;Edit master.cf:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/master.cf&lt;/p&gt; &lt;p&gt;We need to add two items below the pickup service type. The pickup service "picks up" local mail (local meaning "on this machine") and delivers it. This is a way to bypass content filtering for mail generated by this machine.&lt;/p&gt; &lt;p&gt;Add this just below the 'pickup' service type:&lt;/p&gt;&lt;pre&gt;         -o content_filter=&lt;br /&gt;    -o receive_override_options=no_header_body_checks&lt;/pre&gt; &lt;p&gt;It should look like this when you are done:&lt;/p&gt;&lt;pre&gt;pickup fifo n - - 60 1 pickup&lt;br /&gt;-o content_filter=&lt;br /&gt;-o receive_override_options=no_header_body_checks&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2 Edit main.cf&lt;/h4&gt; &lt;p&gt;First we need to backup the main.cf file.&lt;/p&gt; &lt;p class="command"&gt;cp /etc/postfix/main.cf /etc/postfix/main.cf-orig&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.1 alias_maps&lt;/h4&gt; &lt;p&gt;We simply need to make a correction to the default setting here:&lt;/p&gt; &lt;p class="command"&gt;postconf -e "alias_maps = hash:/etc/aliases"&lt;/p&gt; &lt;p&gt;Create the aliases file:&lt;/p&gt; &lt;p class="command"&gt;newaliases&lt;/p&gt; &lt;p&gt;Since our system will be configured not to store any local mails, this will be ignored.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.2 myorigin&lt;/h4&gt; &lt;p&gt;The domain name that mail created on this machine appears to come from. For example, if cron sends mail to "mnight@secretgovagency.gov" it will appear to come from "root@example.com".&lt;/p&gt; &lt;p class="command"&gt;postconf -e "myorigin = example.com"&lt;/p&gt; &lt;p&gt;Obviously, in the above, and all the following commands, replace my example parameters, like "example.com", with your own specific values.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.3 myhostname&lt;/h4&gt; &lt;p&gt;The fully-qualified domain name (FQDN) of the machine running the Postfix system.&lt;/p&gt; &lt;p class="command"&gt;postconf -e "myhostname = server1.example.com"&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.4 mynetworks&lt;/h4&gt; &lt;p&gt;These are the machines I trust, and will relay mail for, to any destination. If you will be dealing with multiple internal mail servers, and/or want to allow several machines and/or subnets to relay through this server (careful!), just add them to this parameter in CIDR format and seperate the networks like this:&lt;/p&gt; &lt;p class="command"&gt;postconf -e "mynetworks = 127.0.0.0/8, 192.168.0.0/24"&lt;/p&gt; &lt;p&gt;The &lt;span class="system"&gt;127.0.0.0/8&lt;/span&gt; is there to allow the local server to send, you need to at least put this one in.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.4.1 outbound trusted relay IP&lt;/h4&gt; &lt;p&gt;If you'd like your SpamSnake to handle outgoing emails as well, be sure to add your local network to the list e.g. &lt;span class="system"&gt;192.168.0.0/24 172.16.0.0/16&lt;/span&gt;. If your mailserver is &lt;span class="system"&gt;172.16.5.20&lt;/span&gt; and you only want to trust only that IP, add &lt;span class="system"&gt;172.16.5.20/32&lt;/span&gt;. You just have to setup your mailserver to relay (smarthost) to your SpamSnake.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.5 message_size_limit&lt;/h4&gt; &lt;p&gt;Maximum size email that Postfix will let in the "front door".&lt;/p&gt; &lt;p class="command"&gt;postconf -e "message_size_limit = 10485760"&lt;/p&gt; &lt;p&gt;The above allows email up to 10MB, the value is in bytes (10*1024*1024). Mail larger than this may possibly get bypassed by the anti-virus scanner (ClamAV). You could increase this if you also configure ClamAV to scan files larger than 10MB. If you allow messages larger than 10MB, keep an eye on RAM.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.6 local_transport&lt;/h4&gt; &lt;p&gt;Return an error message for local delivery attempts.&lt;/p&gt; &lt;p class="command"&gt;postconf -e "local_transport = error:No local mail delivery"&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.7 mydestination&lt;/h4&gt; &lt;p&gt;An empty mydestination tells Postfix this machine is not the final destination.&lt;/p&gt; &lt;p class="command"&gt;postconf -e "mydestination = "&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.8 local_recipient_maps&lt;/h4&gt; &lt;p&gt;An empty local_recipient_maps tells Postfix there are no local mailboxes.&lt;/p&gt; &lt;p class="command"&gt;postconf -e "local_recipient_maps = "&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.9 virtual_alias_maps&lt;/h4&gt; &lt;p&gt;Our spamfilter must be able to receive mail for postmaster@yourIP. Reportedly, some things actually expect this ability to exist. We will also allow mail to abuse@yourIP. Since we do not allow local mail delivery, mail addressed to our spamfilter's IP address will get rejected with an error message. Setting up virtual_alias_maps allows email to these two accounts to be forwarded to an inside address. Make sure your Exchange server is set up to receive messages addressed to "root", "postmaster" and "abuse".&lt;/p&gt; &lt;p&gt;Set up a reference to the virtual file:&lt;/p&gt; &lt;p class="command"&gt;postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"&lt;/p&gt; &lt;p&gt;Then edit the virtual file:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/virtual&lt;/p&gt; &lt;p&gt;Add these lines to the top of the virtual file:&lt;/p&gt;&lt;pre&gt;postmaster postmaster@example.com&lt;br /&gt;abuse abuse@example.com&lt;br /&gt;root root@example.com&lt;/pre&gt; &lt;p&gt;Save and exit the file, then create the binary file that Postfix will use:&lt;/p&gt; &lt;p class="command"&gt;postmap /etc/postfix/virtual&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.10 relay_recipient_maps&lt;/h4&gt; &lt;p&gt;We are going to build a table of every single user in every single domain that we accept mail for.&lt;/p&gt; &lt;p&gt;Set up a reference to a file we will create to store the data:&lt;/p&gt; &lt;p class="command"&gt;postconf -e "relay_recipient_maps = hash:/etc/postfix/relay_recipients"&lt;/p&gt; &lt;p&gt;Then edit relay_recipients:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/relay_recipients&lt;/p&gt; &lt;p&gt;For the moment, we are going to accept mail for all users in our domain(s) so enter each domain you accept mail for in the following format:&lt;/p&gt;&lt;pre&gt;@example.com OK&lt;br /&gt;@example2.com OK&lt;/pre&gt; &lt;p&gt;Then create the binary file that Postfix will use:&lt;/p&gt; &lt;p class="command"&gt;postmap /etc/postfix/relay_recipients&lt;/p&gt; &lt;p&gt;The entries above are temporary. They are wildcards that allow mail to your domains. You MUST remove the entries above at some point in the near future and replace them with every single one of your valid recipients' email addresses. When you are ready to enter each user individually in the relay_recipients file, you would first remove (or comment out) the data above that allows mail to all users in the domain, and then list each user individually in the form:&lt;/p&gt;&lt;pre&gt;admin@example.com OK&lt;br /&gt;admin@example2.com OK&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.11 transport_maps&lt;/h4&gt; &lt;p&gt;Tells Postfix where to look for a transport file. We use the transport file to tell Postfix where to forward valid mail for our domain(s). Setting up transport is similar to setting up relay_recipients.&lt;/p&gt; &lt;p&gt;Create a reference to it in main.cf:&lt;/p&gt; &lt;p class="command"&gt;postconf -e "transport_maps = hash:/etc/postfix/transport"&lt;/p&gt; &lt;p&gt;Then edit transport:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/transport&lt;/p&gt; &lt;p&gt;Add 1 new line for each domain for which you will be handling mail, similar to the example below. The IP address is that of whatever server is the final destination of messages addressed to our domain(s) (our Exchange server). It does not matter where you place these items in the file, but I like to put them at the top.&lt;/p&gt;&lt;pre&gt;example.com smtp:[192.168.0.x]&lt;br /&gt;example2.com smtp:[192.168.0.x]&lt;/pre&gt; &lt;p&gt;Include the brackets on these lines!. You can also use FQDN hostname instead of an IP address (i.e. &lt;span class="system"&gt;smtp:[exchange1.example.com]&lt;/span&gt;).&lt;/p&gt; &lt;p&gt;Now to create the binary file Postfix will use:&lt;/p&gt; &lt;p class="command"&gt;postmap /etc/postfix/transport&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.12 relay_domains&lt;/h4&gt; &lt;p&gt;What destination domains (and subdomains thereof) this system will relay mail for.&lt;/p&gt; &lt;p class="command"&gt;postconf -e "relay_domains = hash:/etc/postfix/relay_domains"&lt;/p&gt; &lt;p&gt;Edit relay_domains:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/postfix/relay_domains&lt;/p&gt; &lt;p&gt;Add 1 new line for each domain for which you will be handling mail, similar to the example below:&lt;/p&gt;&lt;pre&gt;example.com OK&lt;br /&gt;example2.com OK&lt;/pre&gt; &lt;p&gt;This file currently has a very similar format to &lt;span class="system"&gt;relay_recipients&lt;/span&gt; do not mistake the two. This file cannot have '@' in front of the domain name. Just thought I'd mention it, some very smart people have been known to have done this...&lt;/p&gt; &lt;p&gt;Then create the binary file Postfix will use:&lt;/p&gt; &lt;p class="command"&gt;postmap /etc/postfix/relay_domains&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;div class="titles"&gt;&lt;div class="prev"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;div class="next"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt; &lt;p class="command"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="command"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-8265815703165174862?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8265815703165174862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8265815703165174862'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1768749291021115371</id><published>2008-05-01T00:13:00.000-07:00</published><updated>2008-05-02T18:57:28.283-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02</title><content type='html'>&lt;h4&gt;1.3 Enable The root Account&lt;/h4&gt; &lt;p&gt;After the reboot you can log in with your previously created username (e.g. &lt;span class="system"&gt;administrator&lt;/span&gt;). Because we must run all the steps from this tutorial as root user, we must enable the root account now. Run&lt;/p&gt; &lt;p class="command"&gt;sudo passwd root&lt;/p&gt; &lt;p&gt;and give root a password. Afterwards we become root by running&lt;/p&gt; &lt;p class="command"&gt;su&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.4 Install vim-full (Optional)&lt;/h4&gt; &lt;p&gt;I'll use vi as my text editor in this tutorial. The default vi program has some strange behaviour on Ubuntu and Debian; to fix this, we install vim-full:&lt;/p&gt; &lt;p class="command"&gt;apt-get install vim-full&lt;/p&gt; &lt;p&gt;(You don't have to do this if you use a different text editor such as joe or nano.)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.5 Configure The Network&lt;/h4&gt; &lt;p&gt;Because the Ubuntu installer has configured our system to get its network settings via DHCP, we have to change that now because a server should have a static IP address. Edit &lt;span class="system"&gt;/etc/network/interfaces&lt;/span&gt; and adjust it to your needs (in this example setup I will use the IP address &lt;span class="system"&gt;192.168.0.100&lt;/span&gt;):&lt;/p&gt;&lt;p&gt;&lt;iframe src="http://www.howtoforge.com/admedia/reste_300x250.php" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" height="250" scrolling="no" width="300"&gt;&lt;/iframe&gt;  &lt;!-- END AD TAG --&gt;&lt;script type="text/javascript"&gt; &lt;!-- document.write('&lt;/div&gt;'); //--&gt; &lt;/script&gt; &lt;/p&gt;&lt;p class="command"&gt;vi /etc/network/interfaces&lt;/p&gt; &lt;pre&gt;# This file describes the network interfaces available on your system&lt;br /&gt;# and how to activate them. For more information, see interfaces(5).&lt;br /&gt;&lt;br /&gt;# The loopback network interface&lt;br /&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;&lt;br /&gt;# The primary network interface&lt;br /&gt;auto eth0&lt;br /&gt;iface eth0 inet static&lt;br /&gt;      address 192.168.0.100&lt;br /&gt;      netmask 255.255.255.0&lt;br /&gt;      network 192.168.0.0&lt;br /&gt;      broadcast 192.168.0.255&lt;br /&gt;      gateway 192.168.0.1&lt;/pre&gt; &lt;p&gt;Then restart your network:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/networking restart&lt;/p&gt; &lt;p&gt;Then edit &lt;span class="system"&gt;/etc/hosts&lt;/span&gt;. Make it look like this:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/hosts&lt;/p&gt; &lt;pre&gt;127.0.0.1       localhost.localdomain   localhost&lt;br /&gt;192.168.0.100   server1.example.com     server1&lt;br /&gt;&lt;br /&gt;# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;::1     ip6-localhost ip6-loopback&lt;br /&gt;fe00::0 ip6-localnet&lt;br /&gt;ff00::0 ip6-mcastprefix&lt;br /&gt;ff02::1 ip6-allnodes&lt;br /&gt;ff02::2 ip6-allrouters&lt;br /&gt;ff02::3 ip6-allhosts&lt;/pre&gt; &lt;p&gt;Now run&lt;/p&gt; &lt;p class="command"&gt;echo server1.example.com &gt; /etc/hostname&lt;br /&gt; /etc/init.d/hostname.sh start&lt;/p&gt; &lt;p&gt;Afterwards, run&lt;/p&gt; &lt;p class="command"&gt;hostname&lt;br /&gt; hostname -f&lt;/p&gt; &lt;p&gt;Both should show &lt;span class="system"&gt;server1.example.com&lt;/span&gt; now.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.6 Edit /etc/apt/sources.list And Update Your Linux Installation&lt;/h4&gt; &lt;p&gt;Edit &lt;span class="system"&gt;/etc/apt/sources.list&lt;/span&gt;. Comment out or remove the installation CD from the file and make sure that the universe and multiverse repositories are enabled. It should look like this:&lt;/p&gt; &lt;p class="command"&gt;vi /etc/apt/sources.list&lt;/p&gt; &lt;pre&gt;#&lt;br /&gt;# deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted&lt;br /&gt;&lt;br /&gt;#deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted&lt;br /&gt;# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to&lt;br /&gt;# newer versions of the distribution.&lt;br /&gt;&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy main restricted&lt;br /&gt;&lt;br /&gt;## Major bug fix updates produced after the final release of the&lt;br /&gt;## distribution.&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted&lt;br /&gt;&lt;br /&gt;## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu&lt;br /&gt;## team, and may not be under a free licence. Please satisfy yourself as to&lt;br /&gt;## your rights to use the software. Also, please note that software in&lt;br /&gt;## universe WILL NOT receive any review or updates from the Ubuntu security&lt;br /&gt;## team.&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy universe&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy universe&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe&lt;br /&gt;&lt;br /&gt;## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu&lt;br /&gt;## team, and may not be under a free licence. Please satisfy yourself as to&lt;br /&gt;## your rights to use the software. Also, please note that software in&lt;br /&gt;## multiverse WILL NOT receive any review or updates from the Ubuntu&lt;br /&gt;## security team.&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy multiverse&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy multiverse&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse&lt;br /&gt;&lt;br /&gt;## Uncomment the following two lines to add software from the 'backports'&lt;br /&gt;## repository.&lt;br /&gt;## N.B. software from this repository may not have been tested as&lt;br /&gt;## extensively as that contained in the main release, although it includes&lt;br /&gt;## newer versions of some applications which may provide useful features.&lt;br /&gt;## Also, please note that software in backports WILL NOT receive any review&lt;br /&gt;## or updates from the Ubuntu security team.&lt;br /&gt;# deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse&lt;br /&gt;# deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse&lt;br /&gt;&lt;br /&gt;## Uncomment the following two lines to add software from Canonical's&lt;br /&gt;## 'partner' repository. This software is not part of Ubuntu, but is&lt;br /&gt;## offered by Canonical and the respective vendors as a service to Ubuntu&lt;br /&gt;## users.&lt;br /&gt;# deb http://archive.canonical.com/ubuntu hardy partner&lt;br /&gt;# deb-src http://archive.canonical.com/ubuntu hardy partner&lt;br /&gt;&lt;br /&gt;deb http://security.ubuntu.com/ubuntu hardy-security main restricted&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted&lt;br /&gt;deb http://security.ubuntu.com/ubuntu hardy-security universe&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu hardy-security universe&lt;br /&gt;deb http://security.ubuntu.com/ubuntu hardy-security multiverse&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu hardy-security multiverse&lt;/pre&gt; &lt;p&gt;Then run&lt;/p&gt; &lt;p class="command"&gt;apt-get update&lt;/p&gt; &lt;p&gt;to update the apt package database and&lt;/p&gt; &lt;p class="command"&gt;apt-get upgrade&lt;/p&gt; &lt;p&gt;to install the latest updates (if there are any).&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt; 1.7 Change The Default Shell&lt;/h4&gt; &lt;p&gt;&lt;span class="system"&gt;/bin/sh&lt;/span&gt; is a symlink to &lt;span class="system"&gt;/bin/dash&lt;/span&gt;, however we need &lt;span class="system"&gt;/bin/bash&lt;/span&gt;, not &lt;span class="system"&gt;/bin/dash&lt;/span&gt;. Therefore we do this:&lt;/p&gt; &lt;p class="command"&gt;ln -sf /bin/bash /bin/sh&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt; 1.8 Disable AppArmor&lt;/h4&gt; &lt;p&gt;AppArmor is a security extension (similar to SELinux) that should provide extended security. In my opinion you don't need it to configure a secure system, and it usually causes more problems than advantages (think of it after you have done a week of trouble-shooting because some service wasn't working as expected, and then you find out that everything was ok, only AppArmor was causing the problem).&lt;/p&gt; &lt;p&gt;We can disable it like this:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/apparmor stop&lt;br /&gt; update-rc.d -f apparmor remove&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.9 Install Some Software&lt;/h4&gt; &lt;p&gt;Now we install a few packages that are needed later on. Run&lt;/p&gt; &lt;p class="command"&gt;apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential dpkg-dev db4.3-util vim bzip2 perl-doc libwww-perl libdbi-perl libconvert-binhex-perl libmail-spf-query-perl rblcheck libnet-ident-perl tnef pax libberkeleydb-perl unzoo arj lzop nomarch arc zoo libdb-file-lock-perl&lt;/p&gt; &lt;p&gt;(This command must go into one line!)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.10 Install Unarj&lt;/h4&gt; &lt;p class="command"&gt;cd /usr/src&lt;br /&gt; wget http://http.us.debian.org/debian/pool/main/a/arj/unarj_3.10.21-2_all.deb&lt;br /&gt; dpkg -i unarj_3.10.21-2_all.deb&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.11 Install Perl Modules(Pre-requisites) &lt;/h4&gt; &lt;p&gt;Can be installed via &lt;span class="system"&gt;perl -MCPAN&lt;/span&gt; or Webmin. I find that doing this through Webmin is better.&lt;/p&gt; &lt;p class="command"&gt;perl -MCPAN -e shell&lt;br /&gt; install Module::Build&lt;br /&gt; install Mail::SPF (Needed for SPF Checking)&lt;br /&gt; install NetAddr::IP (Needed for SPF Checking)&lt;br /&gt; install MLDBM::Sync this should also install MLDBM (Needed for MailWatch)&lt;/p&gt; &lt;p class="command"&gt;apt-get install libdbd-mysql-perl libapache-dbi-perl (Needed for MailWatch)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.12 Webmin&lt;/h4&gt; &lt;p class="command"&gt;apt-get install libauthen-pam-perl libio-pty-perl libmd5-perl libnet-ssleay-perl&lt;/p&gt; &lt;p&gt;Download latest webmin using the following command:&lt;/p&gt; &lt;p class="command"&gt;wget http://internap.dl.sourceforge.net/sourceforge/webadmin/webmin_1.410_all.deb&lt;/p&gt; &lt;p&gt;Now we have webmin_1.410_all.deb package; you need to install it using the following command:&lt;/p&gt; &lt;p class="command"&gt;sudo dpkg -i webmin_1.410_all.deb&lt;/p&gt; &lt;p&gt;If your server complains that there is some library it does not find, just run the following command&lt;/p&gt; &lt;p class="command"&gt;sudo apt-get install -f&lt;/p&gt; &lt;p&gt;You should now be able to login to Webmin at the URL &lt;span class="system"&gt;https://localhost:10000/&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.13 Remove Programs&lt;/h4&gt; &lt;p&gt;Now we also need to remove some programs, hopefully you don't need PCMCIA or printer support. This server will not need dial-up support either. You will not necessarily have all of these programs installed.&lt;/p&gt; &lt;p&gt;Uninstall the following software (all one line):&lt;/p&gt; &lt;p class="command"&gt;apt-get remove pcmciautils ubuntu-minimal pppoeconf ppp pppconfig&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.14 Cleaning up services&lt;/h4&gt; &lt;p&gt;Some services might still linger even after uninstalling the daemons. First we need to backup inet.d:&lt;/p&gt; &lt;p class="command"&gt;cp -R /etc/init.d /etc/init.d.backup&lt;/p&gt; &lt;p&gt;Now we can stop all of the services that might be running which we don't need:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/pcmciautils stop&lt;br /&gt; update-rc.d -f pcmciautils remove&lt;/p&gt; &lt;p&gt;Disable all of the services we stopped:&lt;/p&gt; &lt;p class="command"&gt;update-inetd --disable time&lt;/p&gt; &lt;p class="command"&gt;update-inetd --disable daytime&lt;/p&gt; &lt;p class="command"&gt;update-inetd --disable echo&lt;/p&gt; &lt;p class="command"&gt;update-inetd --disable chargen&lt;/p&gt; &lt;p class="command"&gt;update-inetd --disable ident&lt;/p&gt; &lt;p class="command"&gt;update-inetd --disable discard&lt;/p&gt; &lt;p&gt;The last one may ask you a question regarding "multiple entries", answer yes (y).&lt;/p&gt; &lt;p&gt;Check that we got everything:&lt;/p&gt; &lt;p class="command"&gt;lsof -i | grep LISTEN&lt;/p&gt; &lt;p&gt;The only daemon you should see at this point is &lt;span class="system"&gt;*:ssh&lt;/span&gt; and &lt;span class="system"&gt;miniserv&lt;/span&gt;. You may have to run this again:&lt;/p&gt; &lt;p class="command"&gt;update-inetd --disable discard&lt;/p&gt; &lt;p&gt;If there are other programs shown, try rebooting and test again.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;Copyright © 2008 Rocky&lt;br /&gt;All Rights Reserved.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1768749291021115371?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1768749291021115371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1768749291021115371'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8380913670732189219</id><published>2008-05-01T00:00:00.002-07:00</published><updated>2008-05-03T00:45:47.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS</title><content type='html'>&lt;h3&gt;Postfix w/Bayesian Filtering and Anti-Backscatter (Relay Recipients), Apache, Mysql, Bind, MailScanner (Spamassassin, ClamAV, Pyzor, Razor, DCC-Client), MailWatch, SPF Checks, FuzzyOcr, PDF/XLS/Phishing Sanesecurity Signatures, Postfix-GLD (Greylisting Optional), Logwatch Statistical Reporting (Optional), Outgoing Disclaimer with alterMIME (Optional)&lt;/h3&gt; &lt;p&gt;Version 2.0&lt;br /&gt;Author: Mohammed Alli&lt;/p&gt; &lt;p&gt;This tutorial shows how to set up an Ubuntu Hardy Heron (8.04 LTS) based server as a spamfilter in Gateway mode. In the end, you will have a SpamSnake Gateway which will relay clean emails to your MTA. You will also be able to view your incoming queue, train your SpamSnake and carry out a few more advanced operations via MailWatch.&lt;/p&gt; &lt;p&gt;I cannot offer any guarantees that this will work for you, the same way it’s working for me.&lt;/p&gt; &lt;p&gt;I will use the following software:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Web Server: Apache 2.2 with PHP 5.2.4 and Ruby&lt;/li&gt;&lt;li&gt;Database Server: MySQL 5.0&lt;/li&gt;&lt;li&gt;Mail Server: Postfix&lt;/li&gt;&lt;li&gt;DNS Server: BIND9&lt;/li&gt;&lt;li&gt;PHP: PHP5&lt;/li&gt;&lt;li&gt;MailScanner: MailScanner v4.68.8&lt;/li&gt;&lt;li&gt;MailWatch: MailWatch v1.0.4&lt;/li&gt;&lt;/ul&gt; &lt;p editor_id="mce_editor_0"&gt;Credit goes to the guys at HowToForge and the developers of MailScanner and MailWatch.&lt;/p&gt;&lt;h3&gt;1 Requirements&lt;/h3&gt; &lt;p&gt;To install such a system you will need the following:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;The Ubuntu 8.04 LTS server CD, available here: &lt;a href="ftp://releases.ubuntu.com/releases/hardy/ubuntu-8.04-server-i386.iso" mce_real_href="ftp://releases.ubuntu.com/releases/hardy/ubuntu-8.04-server-i386.iso"&gt;ftp://releases.ubuntu.com/releases/hardy/ubuntu-8.04-server-i386.iso&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A fast internet connection.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.1 Preliminary Note&lt;/h4&gt; &lt;p&gt;In this tutorial I use the hostname &lt;span class="system"&gt;server1.example.com&lt;/span&gt; with the IP address &lt;span class="system"&gt;192.168.0.100&lt;/span&gt; and the gateway &lt;span class="system"&gt;192.168.0.1&lt;/span&gt;. These settings might differ for you, so you have to replace them where appropriate.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.2 The Base System&lt;/h4&gt; &lt;p&gt;1. Insert your Ubuntu install CD into your system and boot from it. Select your language:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/1.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/1.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/1.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;2. Select Install to the hard disk:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/2.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/2.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/2.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;3. The installation starts, choose your language again:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/3.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/3.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/3.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;4. Then select your location:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/4.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/4.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/4.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Choose a keyboard layout (you will be asked to press a few keys, and the installer will try to detect your keyboard layout based on the keys you pressed):&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/6.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/6.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/6.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;5. The installer checks the installation CD, your hardware, and configures the network with DHCP if there is a DHCP server in the network:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/9.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/9.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/9.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/10.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/10.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/10.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/11.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/11.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/11.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enter the hostname. In this example, my system is called &lt;span class="system"&gt;server1.example.com&lt;/span&gt;, so I enter &lt;span class="system"&gt;server1&lt;/span&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/12.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/12.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/12.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;6. Now you have to partition your hard disk. For simplicity's sake I will create one big partition (with the mount point /) and a little swap partition so I select &lt;span class="system"&gt;Guided - use entire disk&lt;/span&gt; (of course, the partitioning is totally up to you - if you like, you can create more than just one big partition, and you can also use LVM):&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/13.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/13.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/13.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Select the disk that you want to partition:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/14.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/14.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/14.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;When you're finished, hit &lt;span class="system"&gt;Yes&lt;/span&gt; when you're asked &lt;span class="system"&gt;Write the changes to disks?&lt;/span&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/15.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/15.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/15.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;Afterwards, your new partitions are being created and formatted.&lt;/p&gt; &lt;p&gt;7. Create a user, for example the user &lt;span class="system"&gt;Administrator&lt;/span&gt; with the user name &lt;span class="system"&gt;administrator&lt;/span&gt; (don't use the user name &lt;span class="system"&gt;admin&lt;/span&gt; as it is a reserved name on Ubuntu 8.04):&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/18.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/18.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/18.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/19.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/19.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/19.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/20.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/20.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/20.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/21.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/21.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/21.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;8. The only item I select here is OpenSSH server so that I can immediately connect to the system with an SSH client such as PuTTY after the installation has finished:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/24.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/24.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/24.png" height="413" width="550" /&gt;&lt;div&gt;&lt;img src="http://images.howtoforge.com/images/click_to_enlarge.png" alt="Click to enlarge" border="0" height="12" width="100" /&gt; &lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;(JavaScript must be enabled in your browser to view the large image as an image overlay.)&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;9. The GRUB boot loader gets installed:&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/26.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/26.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/26.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;10. The base system installation is now finished. Remove the installation CD from the CD drive and hit &lt;span class="system"&gt;Continue&lt;/span&gt; to reboot the system:&lt;/p&gt; &lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/28.png" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/the_perfect_spamsnake/28.png" mce_real_src="http://images.howtoforge.com/images/the_perfect_spamsnake/28.png" height="413" width="550" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;div class="prev"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html"&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/28.png" class="thickbox"&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/the_perfect_spamsnake/big/28.png" class="thickbox"&gt;&lt;div&gt; &lt;/div&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-8380913670732189219?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8380913670732189219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8380913670732189219'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-4429688733595626189</id><published>2008-04-29T22:46:00.004-07:00</published><updated>2008-04-30T01:17:51.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>VMware Server On Ubuntu 8.04 Mini-Howto</title><content type='html'>Author : alex.revetchi&lt;br /&gt;&lt;br /&gt;When upgrading from Ubuntu 7.10 to 8.04 my VMware server stopped working, this what I had to do to get it up and running:&lt;br /&gt;&lt;p&gt;Needed if upgrading VMware installation:&lt;/p&gt;  &lt;p class="command"&gt;sudo ./vmware-install.pl&lt;/p&gt;  &lt;p&gt;VMware wont compile with the new kernel, use this patch:&lt;/p&gt;  &lt;p class="command"&gt;wget http://vmkernelnewbies.googlegroups.com/web/vmware-any-any-update-116.tgz&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--&lt;br /&gt;google_ad_client = "pub-3491565404699058";&lt;br /&gt;/* linuxtom60x243 */&lt;br /&gt;google_ad_slot = "3978396535";&lt;br /&gt;google_ad_width = 234;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&lt;br /&gt;src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;tar -zxf vmware-any-any-update-116.tgz&lt;br /&gt;cd vmware-any-any-update-116&lt;/p&gt;  &lt;p&gt;Apply the patch:&lt;/p&gt;  &lt;p class="command"&gt;sudo ./runme.pl&lt;br /&gt;sudo vmware-config.pl&lt;/p&gt;  &lt;p&gt;VMware console wont run without this:&lt;/p&gt;  &lt;p class="command"&gt;cp /lib/libgcc_s.so.1 /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1&lt;/p&gt;  &lt;p&gt;You might need gcc3.4 as well.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-4429688733595626189?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4429688733595626189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4429688733595626189'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/vmware-server-on-ubuntu-804-mini-howto.html' title='VMware Server On Ubuntu 8.04 Mini-Howto'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2878844950960676218</id><published>2008-04-29T02:25:00.004-07:00</published><updated>2008-04-29T02:33:08.276-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Web Based Project Management With Collabtive On Ubuntu 7.10 Server</title><content type='html'>&lt;p&gt;Author : Shakey&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Project management is becoming an increasingly important part of the Sys Admin's life. While Microsoft Project seems to be the standard project management tool used in most environments that I have worked in, it can sometimes be nice to have such tools web based so that multiple users can share information. This is where tools such as &lt;a href="http://collabtive.o-dyn.de/?lang=en" target="_blank"&gt;Collabtive&lt;/a&gt; come in.  Collabtive is a web based project management tool that supports everything that you need to plan out and complete your projects.&lt;/p&gt; These tools include milestones, time tracking, tasks and task lists, all presented in a multi language environment.  Currently German, English and French are all supported.  The web interface itself is intuitive, functional and attractive all at the same time.  You can see for yourself though at their online demo - &lt;a href="http://o-dyn.de/test/" target="_blank"&gt;Collabtive online demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If after having tried the demo, you decide that this is the right tool for you, then this guide should help you to implement Collabtive on your own Ubuntu 7.10 server. This guide is based on the base LAMP install that comes packaged with Ubuntu 7.10 server, but should work equally as well on any Ubuntu LAMP server.  The installation is fairly straight forward, so let's begin.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;The base Ubuntu installation&lt;/h3&gt; &lt;p&gt;As I mentioned earlier, this guide is based on the base LAMP installation included with Ubuntu. The only things that I did during the installation was to assign a static IP address and choose the LAMP and OpenSSH Server options when prompted. Once you have the base system installed along with the LAMP and OpenSSH server, you are ready to move on. I will assume from this point that you are either working at the command line on your server or using an SSH client such as &lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/" target="_blank"&gt;PuTTY&lt;/a&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Update your server&lt;/h3&gt; &lt;p&gt;The first step we need to take is to make sure that your server is up to date. Issue the following command to edit your sources.list file:&lt;/p&gt; &lt;p class="command"&gt;sudo nano /etc/apt/sources.list&lt;/p&gt; &lt;p&gt;Now that your sources.list file is open, you will need to edit out the cdrom from your updates list. Find the following line in your sources.list file:&lt;/p&gt; &lt;pre&gt;deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted&lt;/pre&gt; &lt;p&gt;Now comment it out as shown below:&lt;/p&gt; &lt;pre&gt;# deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted&lt;/pre&gt; &lt;p&gt;Once you have made the necessary change, you can save the file by pressing "&lt;span style="font-weight: bold;"&gt;CTRL-O&lt;/span&gt;" on your keyboard and can exit the editor by pressing "&lt;span style="font-weight: bold;"&gt;CTRL-X&lt;/span&gt;".&lt;/p&gt; &lt;p&gt;With that done, you can now proceed to update your system. We will also be installing unzip for use later in the guide. Issue these commands:&lt;/p&gt; &lt;p class="command"&gt;sudo apt-get update&lt;br /&gt;sudo apt-get upgrade&lt;br /&gt;sudo apt-get install unzip&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Obtain Collabtive and prepare for the installation&lt;/h3&gt; &lt;p&gt;In this step, you will be creating the directory in which Collabtive will be installed, obtaining the Collabtive code itself and setting up permissions.  Issue the following commands:&lt;/p&gt; &lt;p class="command"&gt;cd /var/www/&lt;br /&gt;sudo mkdir collabtive&lt;br /&gt;cd collabtive/&lt;br /&gt;sudo wget http://superb-west.dl.sourceforge.net/sourceforge/collabtive/collabtive0-4-5.zip&lt;br /&gt;sudo unzip collabtive0-4-5.zip&lt;br /&gt;sudo rm collabtive0-4-5.zip&lt;br /&gt;sudo chmod -R 757 templates_c/&lt;br /&gt;sudo chmod -R 757 files/&lt;br /&gt;sudo chmod 757 config.php&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Create the Collabtive database and database user&lt;/h3&gt; &lt;p&gt;This step will help you to create a database for Collabtive in MySQL, as well as the user under which access will be granted. To enter the MySQL environment, issue the root login request with this command:&lt;/p&gt; &lt;p class="command"&gt;mysql -uroot -p&lt;/p&gt; &lt;p&gt;You will now be prompted for your root MySQL password. After entering it, issue the following commands to create your database and the database user. Please note that you can change the username and password to meet your needs.&lt;/p&gt; &lt;p class="command"&gt;create database collabtive;&lt;br /&gt;grant all on collabtive.* to collabuser;&lt;br /&gt;grant all on collabtive.* to collabuser@localhost;&lt;br /&gt;set password for collabuser=password('collabPW');&lt;br /&gt;set password for collabuser@localhost=password('collabPW');&lt;br /&gt;exit&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;The web setup phase&lt;/h3&gt; &lt;p&gt;It is now time to begin the web setup phase of the installation process (almost done). Point your web browser to the URL shown below (adjusting of course, for the local IP address of your server):&lt;/p&gt; &lt;p class="command"&gt;http://Server IP address/collabtive/install.php&lt;/p&gt; &lt;p&gt;You should now be greeted with the first page of the web setup. On this page, you can change your language to German, English or French. You can also check to ensure that conditions for the installation are ready to proceed (see the screen shot below) and enter your database information. If you followed the guide above, then the information that you will need is as follows:&lt;/p&gt; &lt;span class="system"&gt;Database host: localhost&lt;br /&gt;Database name: collabtive&lt;br /&gt;Database user: collabuser&lt;br /&gt;Database password: collabPW&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://images.howtoforge.com/images/project_management_collabtive_ubuntu7.10_server/Collabtive1.png" alt="Collabtive Step 1" style="width: 443px; height: 500px;" height="500" width="443" /&gt; &lt;p&gt;If everything appears alright here, then you can click on "continue" to move forward to step number 2. In this step, you will be creating your admin user. It is fairly straight forward, simply enter the username and password that you wish to use and click on continue. See the image below for reference.&lt;/p&gt; &lt;p&gt;&lt;img src="http://images.howtoforge.com/images/project_management_collabtive_ubuntu7.10_server/Collabtive2.png" alt="Collabtive Step 2" style="width: 500px; height: 223px;" height="223" width="500" /&gt;&lt;/p&gt; &lt;p&gt;You should now be greeted with a screen letting you know that the installation was successful, as shown in this image.&lt;/p&gt; &lt;p&gt;&lt;img src="http://images.howtoforge.com/images/project_management_collabtive_ubuntu7.10_server/Collabtive3.png" alt="Collabtive Step 3" style="width: 500px; height: 142px;" height="142" width="500" /&gt;&lt;/p&gt; &lt;p&gt;If you see anything other than message, then you may want to retrace your steps and make sure that you did not miss something.  If you do see the above image though, you can now safely remove the install.php file for security purposes by using the following command:&lt;/p&gt; &lt;p class="command"&gt;sudo rm /var/www/collabtive/install.php&lt;/p&gt; &lt;p&gt;Now, you may click on the "Login" link shown above to be taken to the admin login.  If all has gone well, then you should now be prompted with a login request (see the image below). This will the admin user that you created in step #2 of the web installation.&lt;/p&gt; &lt;p&gt;&lt;img src="http://images.howtoforge.com/images/project_management_collabtive_ubuntu7.10_server/Collabtive4.png" alt="Collabtive Step 4" style="width: 365px; height: 141px;" height="141" width="365" /&gt;&lt;/p&gt; &lt;p&gt;Enter your credentials and click on the "Login" button. You should now be presented with the web interface for Collabtive and ready to begin your first project. While I couldn't find any documentation on the usage of Collabtive, it is fairly straight forward, if you are familiar with project management. If you should run into problems though, they do have a forum that has a lot of good information in it. The forums are located at - &lt;a href="http://collabtive.o-dyn.de/forum/" target="_blank"&gt;Collabtive Forums&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://collabtive.o-dyn.de/?lang=en" target="_blank"&gt;Collabtive&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://collabtive.o-dyn.de/forum/" target="_blank"&gt;Collabtive Forums&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://o-dyn.de/test/" target="_blank"&gt;Collabtive online demo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/" target="_blank"&gt;PuTTY&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;" class="copyright-footer"&gt;Copyright © 2008 Shakey&lt;br /&gt;All Rights Reserved. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-2878844950960676218?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2878844950960676218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2878844950960676218'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/web-based-project-management-with.html' title='Web Based Project Management With Collabtive On Ubuntu 7.10 Server'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8326275554803682962</id><published>2008-04-28T13:52:00.000-07:00</published><updated>2008-04-29T22:59:19.997-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Using vi key bindings in bash and zsh</title><content type='html'>&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;Author : &lt;/span&gt;&lt;/strong&gt;Vincent Danen, ZDNet Asia&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;When making command-line changes, you can choose a style that makes sense and makes the use of the command line faster and more efficient.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt; &lt;p&gt;By default, most shells use emacs-style key bindings for command-line editing and modification. &lt;!--text blurb--&gt; &lt;/p&gt;&lt;p&gt;For users of vi or vim, however, you can instead configure shells to use vi key bindings instead.  &lt;/p&gt;&lt;p&gt;This is done by editing &lt;i&gt;~/.bashrc&lt;/i&gt; in the case of bash, or &lt;i&gt;~/.zshrc&lt;/i&gt; in zsh and adding:&lt;/p&gt; &lt;pre&gt;set -o vi&lt;/pre&gt; &lt;p&gt;in bash, and the following for zsh:&lt;/p&gt; &lt;pre&gt;bindkey -v&lt;/pre&gt;  &lt;p&gt;Once you have saved either &lt;i&gt;~/.bashrc&lt;/i&gt; or &lt;i&gt;~/.zshrc&lt;/i&gt;, exit the shell and open a new terminal.&lt;/p&gt;  &lt;p&gt;By default, you will be in insert mode, which means that you type as you normally would.  &lt;/p&gt;&lt;p&gt;Commands like [Ctrl]A or [Ctrl]E no longer work, however.  &lt;/p&gt;&lt;p&gt;To get into command mode, press [ESC] (as you would in vim) and use vi key commands to navigate the command line, such as &lt;i&gt;$&lt;/i&gt; to go the end of the line or &lt;i&gt;0&lt;/i&gt; to go to the beginning of the line.&lt;/p&gt; &lt;p&gt;From that point, you can use other vi commands:&lt;/p&gt;  &lt;ul class="unIndentedList"&gt;&lt;li&gt; &lt;i&gt;b&lt;/i&gt; to go back one word&lt;/li&gt;&lt;li&gt; &lt;i&gt;2b&lt;/i&gt; to go back two words&lt;/li&gt;&lt;li&gt; &lt;i&gt;dw&lt;/i&gt; to delete a word&lt;/li&gt;&lt;li&gt; &lt;i&gt;dd &lt;/i&gt;to delete the entire line&lt;/li&gt;&lt;li&gt; &lt;i&gt;d$&lt;/i&gt; to delete from the current cursor position to the end of the line&lt;/li&gt;&lt;li&gt; &lt;i&gt;d0&lt;/i&gt; to delete from the current cursor position to the beginning of the line&lt;/li&gt;&lt;li&gt; &lt;i&gt;w&lt;/i&gt; to go forward one word, and so forth&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;To return to insert mode, simply type &lt;i&gt;i&lt;/i&gt;, as you would in vi, and you can edit the command line as you normally would.&lt;/p&gt;  &lt;p&gt;If you are more familiar with vim than emacs, using vi key bindings in your shell makes a lot of sense and will make working in the shell much easier as you will be using edit commands that you are already familiar with.&lt;/p&gt;  &lt;p&gt;If you use emacs more often, leave the defaults as they are to use the various commands you would normally use in emacs.  &lt;/p&gt;&lt;p&gt;On the other hand, if you use neither, choose a style that makes the most sense and makes using the command line faster and more efficient.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-8326275554803682962?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8326275554803682962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8326275554803682962'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/using-vi-key-bindings-in-bash-and-zsh.html' title='Using vi key bindings in bash and zsh'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8621952634775131093</id><published>2008-04-18T01:17:00.002-07:00</published><updated>2008-04-30T01:44:30.993-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>How To Install mod_security/mod_security2 On SuSE Linux Enterprise Server 10 (SLES10)</title><content type='html'>&lt;div class="content"&gt;Author : elconas&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Introduction&lt;/span&gt; &lt;p&gt;The Apache module mod_security is a very powerful security module. Combined with predefined rules, you can close many security wholes on your server, opened by bad written php or perl apps.&lt;/p&gt; &lt;p&gt;Unfortunately mod_security is not part of the SLES10 distribution. To install mod_security to have to install some 3rd party modules. This guide helps you to install mod_security on SLES10. It also helps you to remove the module, by building RPM packages you can easily uninstall.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--&lt;br /&gt;google_ad_client = "pub-3491565404699058";&lt;br /&gt;/* linuxtom60x243 */&lt;br /&gt;google_ad_slot = "3978396535";&lt;br /&gt;google_ad_width = 234;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&lt;br /&gt;src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Install Apache2 &lt;/h3&gt; &lt;p&gt;First of all you have to install apache2. This is very simple with the following command. &lt;/p&gt; &lt;p class="command"&gt;yast2 -i apache2&lt;/p&gt;  &lt;h3&gt;Install requried build packages&lt;/h3&gt; &lt;p&gt;Some modules are required to build the mod_security module. Install the following  packages:&lt;/p&gt;  &lt;p class="command"&gt;yast2 -i libxml2-devel pcre-devel apache2-devel curl-devel gcc gcc-c++&lt;/p&gt;  &lt;p&gt; Apache2-devel is required for apxs2. curl-devel is optional. &lt;/p&gt;  &lt;h3&gt; Get and Install checkinstall (for packaging) &lt;/h3&gt; &lt;p&gt; To keep track of installed software and enable the user to uninstall and update software, checkinstall can build RPM, DEBIAN (DEB) and Slackware packages. Instead of executing "make install" just run "checkinstall" and checkinstall catches all files, that would be installed by "make install". &lt;/p&gt; &lt;p&gt; Get checkinstall from &lt;a mce_real_href="http://www.asic-linux.com.mx/%7Eizto/checkinstall/download.php" href="http://www.asic-linux.com.mx/%7Eizto/checkinstall/download.php" target="_blank"&gt;http://www.asic-linux.com.mx/~izto/checkinstall/download.php&lt;/a&gt;. &lt;/p&gt; &lt;p class="command"&gt;wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.1.tgz&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;checkinstall&lt;br /&gt;cp /usr/src/packages/RPMS/i386/checkinstall-1.6.1-1.i386.rpm .&lt;br /&gt;rpm -ivh checkinstall-1.6.1-1.i386.rpm&lt;/p&gt;  &lt;h3&gt; Get and Install liblua &lt;/h3&gt; &lt;p&gt; The LUA programming language is used by mod_security for configuration. You must compile LUA as shared module.  &lt;/p&gt; &lt;p&gt; Get LUA from &lt;a mce_real_href="http://www.lua.org/ftp/lua-5.1.3.tar.gz" href="http://www.lua.org/ftp/lua-5.1.3.tar.gz" target="_blank"&gt;http://www.lua.org/ftp/lua-5.1.3.tar.gz&lt;/a&gt;. &lt;/p&gt; &lt;p class="command"&gt;wget http://www.lua.org/ftp/lua-5.1.3.tar.gz&lt;br /&gt;tar -zxvf lua-5.1.3.tar.gz&lt;br /&gt;cd lua-5.1.3&lt;br /&gt;make linux&lt;br /&gt;checkinstall&lt;/p&gt; &lt;p class="system"&gt;[...]&lt;br /&gt;  1 -  Summary: [ The LUA programming language ]&lt;br /&gt;  2 -  Name:    [ lua ]&lt;br /&gt;  3 -  Version: [ 5.1.3 ]&lt;br /&gt;  4 -  Release: [ 1 ]&lt;br /&gt;  5 -  License: [ GPL ]&lt;br /&gt;  6 -  Group:   [ Development/Languages/Lua ]&lt;br /&gt;  7 -  Architecture: [ i386 ]&lt;br /&gt;  8 -  Source location: [ http://www.lua.org/ftp/lua-5.1.3.tar.gz ]&lt;br /&gt;  9 -  Alternate source location: [  ]&lt;br /&gt;  10 - Requires: [  ]&lt;br /&gt;  11 - Provides: [ lua ]&lt;br /&gt;  [...]&lt;/p&gt; &lt;p class="command"&gt;cp /usr/src/packages/RPMS/i386/lua-5.1.3-1.i386.rpm ..&lt;br /&gt;  rpm -ivh ../lua-5.1.3-1.i386.rpm&lt;/p&gt; &lt;p&gt;Now you have to build a shared library from the liblua archive. &lt;/p&gt; &lt;p class="command"&gt;cd /usr/local/lib&lt;br /&gt;gcc -shared -o liblua.5.1.3.so /usr/local/lib/liblua.a&lt;br /&gt;ln -s liblua.5.1.3.so liblua.so&lt;/p&gt;  &lt;h3&gt; Get and Install mod_security &lt;/h3&gt; &lt;p&gt; Get mod_security from &lt;a mce_real_href="http://www.modsecurity.org/download/direct.html" href="http://www.modsecurity.org/download/direct.html" target="_blank"&gt;http://www.modsecurity.org/download/direct.html&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; Documentation about the installation can be found here: &lt;a mce_real_href="http://www.modsecurity.org/documentation/index.html" href="http://www.modsecurity.org/documentation/index.html" target="_blank"&gt;http://www.modsecurity.org/documentation/index.html&lt;/a&gt;. &lt;/p&gt; &lt;p class="command"&gt;cd modsecurity-apache_2.5.2&lt;br /&gt;cd apache2&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;checkinstall&lt;/p&gt; &lt;p class="system"&gt;...&lt;br /&gt;  1 -  Summary: [ mod_security application level firewall ]&lt;br /&gt;  2 -  Name:    [ apache2-mod_security ]&lt;br /&gt;  3 -  Version: [ 2.5.2 ]&lt;br /&gt;  4 -  Release: [ 1 ]&lt;br /&gt;  5 -  License: [ GPL ]&lt;br /&gt;  6 -  Group:   [ Productivity/Networking/Web/Servers ]&lt;br /&gt;  7 -  Architecture: [ i386 ]&lt;br /&gt;  8 -  Source location: [ http://www.modsecurity.org/download/ ]&lt;br /&gt;  9 -  Alternate source location: [  ]&lt;br /&gt;  10 - Requires: [ apache2 libxml2 ]&lt;br /&gt;  11 - Provides: [ mod_security ]&lt;/p&gt; &lt;p class="command"&gt;cp /usr/src/packages/RPMS/i386/apache2-mod_security-2.5.2-1.i386.rpm ../../&lt;br /&gt;  rpm -ivh ../../apache2-mod_security-2.5.2-1.i386.rpm&lt;/p&gt;  &lt;h3&gt; Configure Apache2 for mod_security &lt;/h3&gt; &lt;p class="command"&gt;# /etc/apache2/conf.d/mod_security.conf&lt;br /&gt;LoadFile /usr/lib/libxml2.so&lt;br /&gt;LoadFile /usr/local/lib/liblua.so &lt;br /&gt;LoadModule security2_module /usr/lib/apache2/mod_security2.so&lt;br /&gt;Include modsecurity/*.conf&lt;br /&gt;LoadModule unique_id_module /usr/lib/apache2/mod_unique_id.so&lt;/p&gt;  &lt;h3&gt; Extract and Configure Core Rules &lt;/h3&gt; &lt;p&gt; Get the core rules from &lt;a mce_real_href="http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.0.tar.gz" href="http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.0.tar.gz" target="_blank"&gt;http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.0.tar.gz&lt;/a&gt;. &lt;/p&gt; &lt;p class="command"&gt;cd /etc/apache2&lt;br /&gt;mkdir modsecurity&lt;br /&gt;cd modsecurity&lt;br /&gt;tar -zxvf ../modsecurity-core-rules_2.5-1.6.0.tar.gz&lt;/p&gt; &lt;p&gt;Modify &lt;span class="system"&gt;modsecurity_crs_10_config.conf&lt;/span&gt; to meet the location of your config files:&lt;/p&gt; &lt;p class="command"&gt; vi modsecurity_crs_10_config.conf&lt;br /&gt;    SecAuditLog=...&lt;br /&gt;    SecDebugLog=...&lt;/p&gt;   &lt;h3&gt;Restart Apache and Test your Webpage&lt;/h3&gt; &lt;p&gt;First restart apache to get the current configuration: &lt;/p&gt;   &lt;p class="command"&gt;rcapache restart&lt;/p&gt; &lt;p&gt;To test the installation, write a simple (insecure) PHP script like this:&lt;/p&gt; &lt;p class="command"&gt;&lt;? # /srv/www/htdoc/index.php&lt;br /&gt;    file $text=$_GET['file'];&lt;br /&gt;    echo "Content of File $text";&lt;br /&gt;    echo `cat $text`;&lt;br /&gt;?&gt; &lt;/p&gt; &lt;p&gt;Then access it to try opening insecure files:&lt;/p&gt; &lt;p class="system"&gt;http://ip.of.your.server.de/index.php?file=/etc/passwd&lt;/p&gt; &lt;p&gt;You should get ERROR 501 in your browser and the SecAuditLog file should show:&lt;/p&gt; &lt;p class="system"&gt;[...]&lt;br /&gt;GET /index.php?file=/etc/passwd HTTP/1.1 ...&lt;br /&gt;[...]&lt;br /&gt;Message: Access denied with code 501 (phase 2). Pattern match "(?:\b(?:\.(?:ht(?:access|passwd|group&lt;br /&gt;)|www_?acl)|global\.asa|httpd\.conf|boot\.ini)\b|\/etc\/)" at ARGS:file. [file "/etc/apache2/modsecu&lt;br /&gt;rity/modsecurity_crs_40_generic_attacks.conf"] [line "114"] [id "950005"] [msg "Remote File Access A&lt;br /&gt;ttempt"] [data "/etc/"] [severity "CRITICAL"] [tag "WEB_ATTACK/FILE_INJECTION"]&lt;/p&gt;  &lt;h3&gt;Caveats &lt;/h3&gt;  &lt;ul&gt;&lt;li&gt; When accessing your server via IP, a rule in   &lt;span class="system"&gt;modsecurity_crs_21_protocol_anomalies.conf&lt;/span&gt; denies this. Edit the file and look for "Check that the host header is not an IP address".&lt;/li&gt;&lt;/ul&gt;  &lt;h3&gt;Links and References&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;mod_security home page:  &lt;a mce_real_href="http://www.modsecurity.org/" href="http://www.modsecurity.org/" target="_blank"&gt;http://www.modsecurity.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;LUA home page: &lt;a target="_blank" mce_real_href="http://www.lua.org/" href="http://www.lua.org/"&gt;http://www.lua.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Checkinstall home page: &lt;a mce_real_href="http://www.asic-linux.com.mx/%7Eizto/checkinstall/" href="http://www.asic-linux.com.mx/%7Eizto/checkinstall/" target="_blank"&gt;http://www.asic-linux.com.mx/~izto/checkinstall/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Author's home page: &lt;a target="_blank" mce_real_href="http://www.elconas.de" href="http://www.elconas.de/"&gt;http://www.elconas.de&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;" class="copyright-footer"&gt;Copyright © 2008 Robert Heinzmann&lt;br /&gt;All Rights Reserved. &lt;/div&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-8621952634775131093?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8621952634775131093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8621952634775131093'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/how-to-install-modsecuritymodsecurity2.html' title='How To Install mod_security/mod_security2 On SuSE Linux Enterprise Server 10 (SLES10)'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-9055816830874933996</id><published>2008-04-16T23:07:00.000-07:00</published><updated>2008-04-29T23:09:26.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Securely delete files with shred</title><content type='html'>&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;Author : &lt;/span&gt;&lt;/strong&gt;Vincent Danen, ZDNet Asia&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Scrub your data using the shred command for files that contain sensitive information, so that they cannot be recovered later with data retrieval tools.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;There are two utilities on a typical Linux box that can be used to delete files. Most users are familiar with the &lt;em&gt;rm&lt;/em&gt; command. Most of the time, this command is sufficient for routine deletion, but for files that contain sensitive data, you might need to scrub them so that they cannot be recovered later with other data retrieval tools.&lt;/p&gt; &lt;!--text blurb--&gt;  &lt;p&gt;To delete files with sensitive content, rm is not sufficient. Instead, consider using the &lt;i&gt;shred&lt;/i&gt; command, which not only deletes a file, but deletes it in such a way that it cannot be recovered. Shred overwrites the file multiple times with garbage prior to deleting it, ensuring that if anything does get retrieved, it isn't your top-secret data.&lt;/p&gt;  &lt;p&gt;For instance:&lt;/p&gt;  &lt;pre&gt;$ echo "this is private data" &gt;private.txt&lt;/pre&gt; &lt;pre&gt;$ cat private.txt&lt;/pre&gt; &lt;pre&gt;this is private data&lt;/pre&gt; &lt;pre&gt;$ ls -l private.txt&lt;/pre&gt; &lt;pre&gt;-rw-r--r-- 1 vdanen vdanen 21 Mar  4 09:36 private.txt&lt;/pre&gt;   &lt;p&gt;To illustrate how shred works, call it without any command-line options so that the garbage in the file can be viewed:&lt;/p&gt;  &lt;pre&gt;$ shred private.txt&lt;/pre&gt; &lt;pre&gt;$ cat private.txt&lt;/pre&gt; &lt;pre&gt;?9?-?w?K?=???l;b8SƉ?b???????@,?18!??DM??P?&lt;/pre&gt; &lt;pre&gt;...&lt;/pre&gt; &lt;pre&gt;$ ls -l private.txt&lt;/pre&gt; &lt;pre&gt;-rw-r--r-- 1 vdanen vdanen 4096 Mar  4 09:36&lt;br /&gt;private.txt&lt;/pre&gt;  &lt;p&gt;The rest of the output is removed as it is binary gibberish. You can also see the file size has changed.&lt;/p&gt;  &lt;p&gt;To delete the file after overwriting it with garbage, use the &lt;i&gt;-u&lt;/i&gt; option. To see what shred is actually doing, give it the verbose &lt;i&gt;-v&lt;/i&gt; option:&lt;/p&gt;  &lt;pre&gt;$ shred -u -v private.txt&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 1/25 (random)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 2/25 (cccccc)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 3/25 (111111)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 4/25 (000000)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 5/25 (999999)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 6/25 (aaaaaa)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 7/25 (924924)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 8/25 (b6db6d)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 9/25 (6db6db)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 10/25 (888888)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 11/25 (492492)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 12/25 (db6db6)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 13/25 (random)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 14/25 (ffffff)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 15/25 (bbbbbb)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 16/25 (777777)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 18/25 (dddddd)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 19/25 (333333)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 20/25 (555555)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 21/25 (222222)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 22/25 (eeeeee)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 23/25 (666666)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 24/25 (249249)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 25/25 (random)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: removing&lt;/pre&gt; &lt;pre&gt;shred: private.txt: renamed to 00000000000&lt;/pre&gt; &lt;pre&gt;shred: 00000000000: renamed to 0000000000&lt;/pre&gt; &lt;pre&gt;shred: 0000000000: renamed to 000000000&lt;/pre&gt; &lt;pre&gt;shred: 000000000: renamed to 00000000&lt;/pre&gt; &lt;pre&gt;shred: 00000000: renamed to 0000000&lt;/pre&gt; &lt;pre&gt;shred: 0000000: renamed to 000000&lt;/pre&gt; &lt;pre&gt;shred: 000000: renamed to 00000&lt;/pre&gt; &lt;pre&gt;shred: 00000: renamed to 0000&lt;/pre&gt; &lt;pre&gt;shred: 0000: renamed to 000&lt;/pre&gt; &lt;pre&gt;shred: 000: renamed to 00&lt;/pre&gt; &lt;pre&gt;shred: 00: renamed to 0&lt;/pre&gt; &lt;pre&gt;shred: private.txt: removed&lt;/pre&gt;  &lt;p&gt;As you can see, shred overwrites the file 25 times with garbage. After this, it renames the file 11 times before deleting it.&lt;/p&gt;  &lt;p&gt;Shred can also be used to overwrite entire disks instead of just files. If you wished to overwrite the contents of an entire hard drive, a process which would definitely take a fair amount of time, use:&lt;/p&gt;  &lt;pre&gt;# shred -u -n 30 /dev/hda&lt;/pre&gt;  &lt;p&gt;This will overwrite the data on the drive with garbage using 30 passes. The drive will need to be re-formatted after this as even the filesystem structure will be destroyed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-9055816830874933996?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9055816830874933996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9055816830874933996'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/securely-delete-files-with-shred.html' title='Securely delete files with shred'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7809170796570932822</id><published>2008-04-14T01:04:00.001-07:00</published><updated>2008-04-30T01:21:54.060-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Monitoring UPS Power Status Using Network UPS Tools (NUT) 2.2.0 on Multiple OpenSuSE 10.3 Servers</title><content type='html'>&lt;p&gt;Author : kian &lt;/p&gt;&lt;p&gt;Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware.&lt;/p&gt;  &lt;p&gt;The primary goal of the Network UPS Tools (NUT) project is to provide reliable monitoring of UPS hardware and ensure safe shutdowns of the systems which are connected.&lt;/p&gt;  &lt;p&gt;This is a developing project to monitor a large assortment of UPS hardware. Many models have ports on the back to allow other devices to check the status. If it gives basic information about the power and battery status, it can probably be supported without too much difficulty. More advanced features on the higher-end models are also supported to allow tracking of values over time such as temperature and voltage.&lt;/p&gt;  &lt;p&gt;Network communications are used so that multiple systems can monitor a single physical UPS and shut down together if necessary without any special "sharing hardware" on the UPS itself.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Pre-installation&lt;/h3&gt; &lt;p&gt;Before you have everything up and running on the server, plug the UPS to a power outlet and connect the signal cable (serial or USB) to the server that will run upsd. Do not connect any server power cables to the outlet on the UPS until you feel that you are confident with the working of NUT and how it behaves with your hardware. It is often advised that you use a dummy load such as a lamp when testing the UPS. This will also show you when the UPS delivers power and when it is off, giving you the opportunity to experiment safely and gain confidence with the commands in a way you can't do once you hook up a production server to the UPS.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--&lt;br /&gt;google_ad_client = "pub-3491565404699058";&lt;br /&gt;/* linuxtom60x243 */&lt;br /&gt;google_ad_slot = "3978396535";&lt;br /&gt;google_ad_width = 234;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&lt;br /&gt;src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Installation&lt;/h3&gt; &lt;p&gt;Install the &lt;font class="system"&gt;nut&lt;/font&gt; RPM package. If you use YaST2, required packages will automatically be added. From the command line, you can use&lt;/p&gt;   &lt;p class="command"&gt;yast2 -i nut&lt;/p&gt;   &lt;p&gt;as root.&lt;/p&gt;  &lt;p&gt;In OpenSuSE 10.3, you will get &lt;font class="system"&gt;nut&lt;/font&gt; 2.2.0 installed.&lt;/p&gt;  &lt;p&gt;This will place all the necessary binaries in your path and a set of skeleton configuration files. You will have to edit the files as root in order to define your UPS hardware&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Configuration&lt;/h3&gt; &lt;h4&gt;Configuration of a locally connected UPS&lt;/h4&gt; &lt;p&gt;Either open a root shell, or use e.g.&lt;/p&gt;  &lt;p class="command"&gt;sudo vi&lt;/p&gt;   &lt;p&gt;to edit the configuration files. &lt;/p&gt;  &lt;p&gt;In the file &lt;font class="system"&gt;/etc/ups/ups.conf&lt;/font&gt; you have a dummy section with default values that looks like this:&lt;/p&gt;  &lt;pre&gt;[myups]&lt;br /&gt;     driver = undefined&lt;br /&gt;     port = /dev/undefined&lt;br /&gt;     desc = "Local UPS"&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Edit the file and set the driver to point to the correct driver for your UPS, the port to where you connected the signal cable and add a description. See &lt;font class="system"&gt;/usr/share/nut/driver.list&lt;/font&gt; for a list of supported brands and models.&lt;/p&gt;  &lt;p&gt;Here is my entry for an APC SmartUPS 1400 connected to the serial port.&lt;/p&gt;  &lt;pre&gt;[apc_smartups_1400]&lt;br /&gt;     driver = apcsmart&lt;br /&gt;     port = /dev/ttyS0&lt;br /&gt;     desc = "APC SmartUPS 1400"&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;You have to modify the &lt;font class="system"&gt;/etc/ups/upsd.users&lt;/font&gt; file to configure users and permissions. The passwords are automatically generated during installation, so you can leave them set to these random values if you like. If you want to use a password that you can remember, edit the file. There are two entries in the default file, I also added an admin user so I can calibrate and test the UPS from the command line.&lt;/p&gt;  &lt;p&gt;Note that these users can only connect from localhost, so for now security is not a big issue here. With remote slaves, you should use a more advanced password than what I have in these examples.&lt;/p&gt;  &lt;p&gt;Here are the three users defined in the &lt;font class="system"&gt;/etc/ups/upsd.users&lt;/font&gt; file.&lt;/p&gt;  &lt;pre&gt;[upsmaster]&lt;br /&gt;      password = masterpass123&lt;br /&gt;      allowfrom = localhost&lt;br /&gt;      upsmon master&lt;br /&gt;[upsslave]&lt;br /&gt;      password = slavepass123&lt;br /&gt;      allowfrom = localhost&lt;br /&gt;      upsmon slave&lt;br /&gt;[upsadmin]&lt;br /&gt;      password = upspass&lt;br /&gt;      allowfrom = localhost&lt;br /&gt;      actions = SET&lt;br /&gt;      instcmds = ALL&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;The upsd daemon only polls the UPS, you need other programs to check upsd for status. Edit their config files to reflect the new name of the UPS and the login and password.&lt;/p&gt;  &lt;p class="system"&gt;/etc/ups/upsmon.conf&lt;/p&gt;  &lt;pre&gt;# MONITOR myups@localhost 1 upsmaster 67fc9377aa master&lt;br /&gt;MONITOR apc_smartups_1400@localhost 1 upsmaster masterpass123 master&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;I also prefer to get a "wall" notice when power is restored in case I work remotely and there is a short power failure. Change the line:&lt;/p&gt;  &lt;pre&gt;NOTIFYFLAG ONLINE   SYSLOG&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt;  &lt;pre&gt;NOTIFYFLAG ONLINE   SYSLOG+WALL&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;in the &lt;font class="system"&gt;/etc/ups/upsmon.conf&lt;/font&gt; file.&lt;/p&gt;  &lt;p&gt;&lt;font class="system"&gt;/etc/ups/hosts.conf&lt;/font&gt; is only for the included CGI programs, but you can add the correct information here as well&lt;/p&gt;  &lt;p class="system"&gt;/etc/ups/hosts.conf&lt;/p&gt;  &lt;pre&gt;# MONITOR myups@localhost "Local UPS"&lt;br /&gt;MONITOR apc_smartups_1400@localhost "APC SmartUPS 1400"&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Now we can finally start all of these programs:&lt;/p&gt;  &lt;p class="command"&gt;rcupsd start&lt;/p&gt;  &lt;p class="system"&gt;linux:~ # rcupsd start&lt;br /&gt;Starting NUT UPS drivers                                             done&lt;br /&gt;Starting NUT UPS server                                              done&lt;br /&gt;Starting NUT UPS monitor                                             done &lt;/p&gt;  &lt;p&gt;Check that you are up and running and that you can read the stored values from the UPS. First list available devices with&lt;/p&gt;   &lt;p class="command"&gt;upsc -l&lt;/p&gt;  &lt;p&gt;... then read all values with:&lt;/p&gt;   &lt;p class="command"&gt;upsc &lt;ups_name&gt;&lt;/ups_name&gt;&lt;/p&gt;  &lt;p class="system"&gt;linux:~ # upsc -l&lt;br /&gt;apc_smartups_1400&lt;br /&gt;linux:~ # upsc apc_smartups_1400&lt;br /&gt;battery.alarm.threshold: 0&lt;br /&gt;battery.charge: 100.0&lt;br /&gt;battery.charge.restart: 00&lt;br /&gt;[...]&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Testing&lt;/h3&gt; &lt;p&gt;Before you connect your server to the power, test a realistic power failure unplugging the power cord to the UPS unit. It should fail over to battery and you get a warning message. If you are logged in and running KDE you get a popup from KWrited with a message such as:&lt;/p&gt;  &lt;p class="system"&gt;Broadcast Message from upsd@linux&lt;br /&gt;       (somewhere) at 22:51&lt;br /&gt;UPS apc_smartups_1400@localhost on battery &lt;/p&gt;  &lt;p&gt; Plug the cable back in and observe the reassuring messages that power has been restored.&lt;/p&gt;  &lt;p class="system"&gt;Broadcast Message from upsd@linux&lt;br /&gt;       (somewhere) at 22:51&lt;br /&gt;UPS apc_smartups_1400@localhost on line power     &lt;/p&gt;  &lt;p&gt;If this works, you can shut your server down and connect the power cord to the UPS. In case of a power failure, you will get the messages you saw during testing. Once the battery charge is so low that the UPS sends a "low battery" signal, NUT will shut down the server. You may be able to set this threshold in the UPS registers, or you will have to script something that does a&lt;/p&gt;   &lt;p class="command"&gt;shutdown -h -t&lt;minutes&gt;&lt;/minutes&gt;&lt;/p&gt;  &lt;p&gt;(system halt after &lt;minutes&gt;) as soon as the UPS is on battery, and then does a&lt;/minutes&gt;&lt;/p&gt;   &lt;p class="command"&gt;shutdown -c&lt;/p&gt;    &lt;p&gt;(cancel shutdown) when the UPS is back on line power. Not all UPS devices will send this "restored" message, though. This is where you just have to test and customize.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Running your equipment on UPS&lt;/h3&gt; &lt;p&gt;So your server is now running on battery power until the batteries run out. You may want to once actually run the server until the batteries fail, just to have an idea of how much battery time you have. Most UPS devices can show you the load and a battery charge percentage. UPSes are great when you are working on something really important and there is a short power surge or brownout, and in case of a long lasting blackout you can get the machine to suspend, hibernate or shut down when batteries are low.&lt;/p&gt;  &lt;p&gt;If you set your BIOS to start the machine automatically when it starts to received power, it will automatically boot when power is restored. In case of recurrent power failures, you don't want to keep a server running and drain the batteries. Just think of a UPS as a unit that protects you from power surges and spikes, and can provide you with a clean shutdown in case of power failure. Don't run a server on battery just because you can. Batteries in a UPS are not meant to be drained, and when power is restored they normally take a few hours to restore full charge. You don't want to run the servers without a safety net right after a blackout - shut servers down with plenty of battery power left and save it for the rough time period just after power restore when every appliance in the entire city starts up simultaneously and starts to guzzle power. For the same reason, limit what you keep on UPS to important servers. Don't forget to add necessary supporting hardware such as network equipment, KVMs and monitors needed to operate the servers during power failure. Avoid running printers and most workstations on UPS power. Keep emergency light in the server room so you can work there when the normal lights are out. If you keep servers running for a while with your own power source (such as a generator), you may even want to keep HVAC on the same power to avoid overheating the room.&lt;/p&gt;  &lt;p&gt;Also remember that when all equipment starts to draw poewr at once - servers and workstations all simultaneously boot, all monitors and lights light up and laser printers start to warm up - you must expect to blow a fuse or two. Which then prolongs your blackout. Make sure all non-critical equipment is shut off during power failures and manually switched on again afterwards.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Remote clients&lt;/h3&gt; &lt;h4&gt;Allowing remote clients&lt;/h4&gt; &lt;p&gt;Now that you know the local UPS is working as it should - keeping the server running on power and notifying the OS via serial port or USB - you may want to connect more servers to the rest of the power outlets. However, there is only one USB or serial cable. This is when you need the NUT upsd daemon on the machine with the serial cable to notify the other servers via the network.&lt;/p&gt;  &lt;p&gt;Start by editing the &lt;font class="system"&gt;/etc/ups/upsd.conf&lt;/font&gt; to allow clients. Here the entire subnet is allowed, you may want to make it more fine-grained and only include specific IPs.&lt;/p&gt;  &lt;pre&gt;ACL all 0.0.0.0/0&lt;br /&gt;ACL localhost 127.0.0.1/32&lt;br /&gt;ACL upsnet  192.168.1.0/24&lt;br /&gt;ACCEPT localhost&lt;br /&gt;ACCEPT upsnet&lt;br /&gt;REJECT all&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Now allow the slave to connect from this network in &lt;font class="system"&gt;/etc/ups/upsd.users&lt;/font&gt;:&lt;/p&gt;  &lt;pre&gt;[upsslave]&lt;br /&gt;      password = slavepass123&lt;br /&gt;      allowfrom = localhost upsnet&lt;br /&gt;      upsmon slave&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Restart the upsd daemond again to pick up the changes.&lt;/p&gt;  &lt;p class="command"&gt;rcupsd restart&lt;/p&gt;  &lt;p class="system"&gt;linux:~ # rcupsd restart&lt;br /&gt;Shutting down NUT UPS monitor                                        done&lt;br /&gt;Shutting down NUT UPS server                                         done&lt;br /&gt;Shutting down NUT UPS drivers.                                       done&lt;br /&gt;Starting NUT UPS drivers                                             done&lt;br /&gt;Starting NUT UPS server                                              done&lt;br /&gt;Starting NUT UPS monitor                                             done &lt;/p&gt;  &lt;p&gt;Or better, reload the configuration, this is much faster than restarting the daemons when you only need to reconfigure any setting except for the driver settings which demands a service restart as above.&lt;/p&gt;  &lt;p class="command"&gt;rcupsd reload&lt;/p&gt;  &lt;p class="system"&gt;linux:~ # rcupsd reload&lt;br /&gt;Reload service NUT UPS (excluding upsdrvctl)                         done &lt;/p&gt;  &lt;p&gt;And allow the clients through the firewall (OpenSuSE by default runs an iptables firewall called SuSEfirewall). upsd listens on TCP port 3493, and by default listens on all interfaces.&lt;/p&gt;  &lt;p&gt;Create a SuSEfirewall2 service definition, since the RPM didn't include one. Make a new file named &lt;font class="system"&gt; /etc/sysconfig/SuSEfirewall2.d/services/upsd &lt;/font&gt;. with this content:&lt;/p&gt;  &lt;pre&gt;# Service description for upsd, the UPS daemon from NUT&lt;br /&gt;# (Network UPS Tools)&lt;br /&gt;#&lt;br /&gt;## Name: NUT upsd&lt;br /&gt;## Description: Allows remote monitoring of UPS power status&lt;br /&gt;# space separated list of allowed TCP ports&lt;br /&gt;TCP="3493"&lt;br /&gt;# space separated list of allowed UDP ports&lt;br /&gt;UDP=""&lt;br /&gt;# space separated list of allowed RPC services&lt;br /&gt;RPC=""&lt;br /&gt;# space separated list of allowed IP protocols&lt;br /&gt;IP=""&lt;br /&gt;# space separated list of allowed UDP broadcast ports&lt;br /&gt;BROADCAST=""&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Now start&lt;/p&gt;   &lt;p class="command"&gt;YaST&lt;/p&gt;   &lt;p&gt;as root and choose "Security and Users" -&gt; "Firewall". Select the correct network and choose NUT upsd in the drop-down list. Add the service and click the Next button. This adds upsd to the list of allowed services in the &lt;font class="system"&gt;FW_CONFIGURATIONS_EXT&lt;/font&gt; variable in the &lt;font class="system"&gt;/etc/sysconfig/SuSEfirewall2&lt;/font&gt; configuration script. Port 3493 is now allowed through the iptables firewall.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Configuring remote clients&lt;/h3&gt; &lt;p&gt;Install nut on a remote machine, this one is called linux64.&lt;/p&gt;  &lt;p&gt;Comment out everything in &lt;font class="system"&gt;/etc/ups/ups.conf&lt;/font&gt; since we don't have a local UPS attached:&lt;/p&gt;  &lt;pre&gt;#[myups]&lt;br /&gt;#       driver = undefined&lt;br /&gt;#       port = /dev/undefined&lt;br /&gt;#       desc = "Local UPS"&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Edit &lt;font class="system"&gt;/etc/ups/upsmon.conf&lt;/font&gt; to monitor the server where the UPS is connected:&lt;/p&gt;  &lt;pre&gt;#MONITOR myups@localhost 1 upsmaster 04fb251a3f master&lt;br /&gt;MONITOR apc_smartups_1400@linux 1 upsslave slavepass123 slave&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Add the UPS server to &lt;font class="system"&gt;/etc/ups/hosts.conf&lt;/font&gt;:&lt;/p&gt;  &lt;pre&gt;#MONITOR myups@localhost "Local UPS"&lt;br /&gt;MONITOR apc_smartups_1400@linux "APC SmartUPS 1400"&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Now start the upsd service, which will ignore the actual upsd and UPS driver since they are unconfigured, and only start upsmon.&lt;/p&gt; &lt;p class="command"&gt;rcupsd start&lt;/p&gt; &lt;p class="system"&gt;linux64:~ # rcupsd start&lt;br /&gt;Starting NUT UPS monitor                                             done &lt;/p&gt; &lt;p&gt;Check that the connection is working, and that you can read the status values of the remote UPS server.&lt;/p&gt; &lt;p class="command"&gt;upsc apc_smartups_1400@linux&lt;/p&gt; &lt;p class="system"&gt;linux64:~ # upsc apc_smartups_1400@linux&lt;br /&gt;battery.alarm.threshold: 0&lt;br /&gt;battery.charge: 094.0&lt;br /&gt;battery.charge.restart: 00&lt;br /&gt;      [...] &lt;/p&gt; &lt;p&gt;Test the UPS again, and check that the new client also picks up the message&lt;/p&gt;  &lt;p class="system"&gt;Broadcast Message from upsd@linux64&lt;br /&gt;       (somewhere) at 0:13 ...&lt;br /&gt;UPS apc_smartups_1400@linux on battery &lt;/p&gt; &lt;p&gt;Connect the power cable for this server to the UPS, and you now have two servers protected from blackouts and they are both monitoring power status.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;References&lt;/h3&gt;   &lt;ul&gt;&lt;li&gt;&lt;a target="_blank" mce_real_href="http://www.networkupstools.org/" href="http://www.networkupstools.org/"&gt;Tne Network UPS Tools (NUT) homepage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Copyright (c)  2008 Kian Spongsveen&lt;br /&gt;Permission is granted to copy, distribute and/or modify the content of&lt;br /&gt;this page under the terms of the GNU Free Documentation License, Version 1.2&lt;br /&gt;or any later version published by the Free Software Foundation; with no&lt;br /&gt;Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.&lt;br /&gt;A copy of the license is available at &lt;a href="http://www.gnu.org/licenses/fdl.html"&gt;http://www.gnu.org/licenses/fdl.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-7809170796570932822?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7809170796570932822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7809170796570932822'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/monitoring-ups-power-status-using.html' title='Monitoring UPS Power Status Using Network UPS Tools (NUT) 2.2.0 on Multiple OpenSuSE 10.3 Servers'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-32679318912547491</id><published>2008-04-11T01:20:00.001-07:00</published><updated>2008-04-30T01:12:00.451-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>MySQL Backups Using ZRM For MySQL 2.0</title><content type='html'>&lt;div class="content"&gt;   Author&lt;span style="font-weight: bold;"&gt; : &lt;/span&gt;Paddy Sreenivasan &lt;p&gt;&lt;a target="_blank" mce_real_href="http://www.zmanda.com/backup-mysql.html" href="http://www.zmanda.com/backup-mysql.html"&gt;Zmanda Recovery Manager (ZRM) for MySQL&lt;/a&gt; simplifies life of a database administrator who needs an easy to use yet flexible and robust backup and recovery solution for MySQL server. Significant features are:&lt;/p&gt; &lt;p&gt;    * Schedule full and incremental logical or raw backups of your MySQL database&lt;br /&gt;   * Centralized backup management&lt;br /&gt;   * Perform backup that is the best match for your storage engine and your MySQL configuration&lt;br /&gt;   * Get e-mail notification about status of your backups&lt;br /&gt;   * Monitor and obtain reports about your backups (including RSS feeds)&lt;br /&gt;   * Verify your backup images&lt;br /&gt;   * Compress and encrypt your backup images&lt;br /&gt;   * Implement Site or Application specific backup policies&lt;br /&gt;   * Recover database easily to any point in time or to any particular database event&lt;br /&gt;   * Custom plugins to tailor MySQL backups to your environment&lt;br /&gt;   * MySQL backup using Linux LVM and Solaris ZFS snapshots&lt;/p&gt; &lt;p&gt;Release 2.0 of the community project was released last week. It can be downloaded from &lt;a target="_blank" mce_real_href="http://www.zmanda.com/download-zrm.php" href="http://www.zmanda.com/download-zrm.php"&gt;Zmanda downloads&lt;/a&gt; page. It supports all Linux and Solaris distributions. The documentation is available on &lt;a target="_blank" mce_real_href="http://mysqlbackup.zmanda.com/" href="http://mysqlbackup.zmanda.com/"&gt;ZRM wiki&lt;/a&gt;. &lt;a target="_blank" mce_real_href="http://forums.zmanda.com/" href="http://forums.zmanda.com/"&gt;ZRM forums&lt;/a&gt; can be used to get questions answered about the project.&lt;br /&gt;&lt;br /&gt; This example assumes that the ZRM server and MySQL server are the same machine. We are backing up MySQL database &lt;/p&gt;&lt;br /&gt;&lt;!-- pake ads google --&gt;&lt;br /&gt;&lt;p class="highlight"&gt;myisamnetflix&lt;/p&gt;  &lt;p&gt;to the same machine running Ubuntu 7.04.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;ZRM For MySQL Installation&lt;/h3&gt; &lt;p&gt;* Installation has to be done as super user.&lt;/p&gt; &lt;p&gt;* ZRM for MySQL requires perl 5.8.7 or later. Ubuntu 7.04 already has perl 5.8.8 installed.&lt;/p&gt; &lt;p&gt;* Install perl-DBD and perl-XML-parser modules &lt;/p&gt; &lt;p class="command"&gt;# apt-get install libxml-parser-perl libdbd-mysql-perl&lt;/p&gt; &lt;p&gt;* Download ZRM for MySQL debian packages from &lt;a target="_blank" mce_real_href="http://www.zmanda.com/download-zrm.php" href="http://www.zmanda.com/download-zrm.php"&gt;Zmanda downloads&lt;/a&gt; page.&lt;/p&gt; &lt;p&gt;* Install ZRM for MySQL (ZRM server package is sufficient because MySQL server and ZRM server are the same machine). &lt;/p&gt; &lt;p class="command"&gt; # dpkg -i mysql-zrm_2.0_all.deb &lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt; Selecting previously deselected package mysql-zrm.&lt;br /&gt;(Reading database ... 108342 files and directories currently installed.)&lt;br /&gt;Unpacking mysql-zrm (from mysql-zrm_2.0_all.deb) ...&lt;br /&gt;Setting up mysql-zrm (2.0) ...&lt;br /&gt;Updating ownership of previously backedup data sets&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;MySQL Server Configuration&lt;/h3&gt; &lt;p&gt;* Check to see if MySQL server is running. If MySQL server is not installed, please install "mysql-server" using "apt-get" command. Update the "root" MySQL server with a password using mysqladmin command (mysqladmin --user root password boot12). We are using "boot12" as the root password. This user will be used for doing MySQL backups and restores. It is better to user a specific user with minimal privileges to do MySQL backups instead of using "root" MySQL user.&lt;/p&gt; &lt;p&gt;* The MySQL server has to run as "mysql" user and "mysql" OS user should belong to "mysql" group. The default installation of ZRM for MySQL requires MySQL server to run as "mysql" user.&lt;/p&gt; &lt;p&gt;* "ps" output shows mysql server is running using the default MySQL port&lt;/p&gt;  &lt;p class="system"&gt; mysql    22034 21995  0 14:38 pts/2    00:00:09 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock&lt;/p&gt;   &lt;p&gt;* Enable binary logging on the MySQL server. Binary logging must be enabled to do incremental backups of the MySQL server.&lt;/p&gt; &lt;p&gt;* Edit &lt;span class="system"&gt;/etc/mysql/my.cnf&lt;/span&gt; configuration file. Add "log-bin" in mysqld section.&lt;/p&gt; &lt;pre&gt; [mysqld]&lt;br /&gt;log-bin&lt;/pre&gt; &lt;p&gt;* We have mysql database "myisamnetflix" that contains two tables. We will be backing this database. This database uses MyISAM storage engine:&lt;/p&gt;  &lt;p class="system"&gt; mysql&gt; show databases;&lt;br /&gt;+--------------------+&lt;br /&gt;| Database           |&lt;br /&gt;+--------------------+&lt;br /&gt;| information_schema |&lt;br /&gt;| myisamnetflix      |&lt;br /&gt;| mysql              |&lt;br /&gt;+--------------------+&lt;br /&gt;3 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; use myisamnetflix;&lt;br /&gt;Reading table information for completion of table and column names&lt;br /&gt;You can turn off this feature to get a quicker startup with -A&lt;br /&gt;&lt;br /&gt;Database changed&lt;br /&gt;mysql&gt; show tables;&lt;br /&gt;+-------------------------+&lt;br /&gt;| Tables_in_myisamnetflix |&lt;br /&gt;+-------------------------+&lt;br /&gt;| MovieID                 |&lt;br /&gt;| MovieRatings            |&lt;br /&gt;+-------------------------+&lt;br /&gt;2 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; select count(*) from MovieID;&lt;br /&gt;+----------+&lt;br /&gt;| count(*) |&lt;br /&gt;+----------+&lt;br /&gt;|    17770 |&lt;br /&gt;+----------+&lt;/p&gt;   &lt;p&gt;* MySQL client commands are installed in &lt;span class="system"&gt;/usr/bin/&lt;/span&gt;  directory. If they are not, accordingly configure the client command location and binary log location in &lt;span class="system"&gt;mysql-zrm.conf&lt;/span&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;ZRM Configuration&lt;/h3&gt; &lt;p&gt;* This should be done as &lt;span class="system"&gt;mysql &lt;/span&gt;user: &lt;/p&gt; &lt;p class="command"&gt; $ id&lt;/p&gt; &lt;p class="system"&gt; uid=1002(mysql) gid=1001(mysql) groups=1001(mysql)&lt;/p&gt; &lt;p&gt;* Create the backup set directory. The backup set is called "netflix". &lt;/p&gt; &lt;p class="command"&gt;$ mkdir /etc/mysql-zrm/netflix&lt;/p&gt;   &lt;p&gt;* Create &lt;span class="system"&gt;mysql-zrm.conf &lt;/span&gt;configuration file. Backup compression is enabled and "myisamnetflix" database is being backed up. The location of MySQL binary logs are also specified ("mysql-binlog-path").&lt;/p&gt;  &lt;p class="command"&gt;$ cat /etc/mysql-zrm/netflix/mysql-zrm.conf&lt;/p&gt;  &lt;pre&gt; host="localhost"&lt;br /&gt;databases="myisamnetflix"&lt;br /&gt;password="boot12"&lt;br /&gt;user="root"&lt;br /&gt;compress=1&lt;br /&gt;mysql-binlog-path="/var/log/mysql"&lt;/pre&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Perform ZRM Backups&lt;/h3&gt; &lt;p&gt;* This should be done as "mysql" user.&lt;/p&gt; &lt;p&gt;* Perform full backup of the database immediately using "mysql-zrm-scheduler". &lt;/p&gt;  &lt;p class="command"&gt;$ mysql-zrm-scheduler --now --backup-set netflix --backup-level 0&lt;/p&gt;  &lt;p class="system"&gt; schedule:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log&lt;br /&gt;backup:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;netflix:backup:INFO: START OF BACKUP&lt;br /&gt;netflix:backup:INFO: PHASE START: Initialization&lt;br /&gt;netflix:backup:INFO: backup-set=netflix&lt;br /&gt;netflix:backup:INFO: backup-date=20080326161652&lt;br /&gt;netflix:backup:INFO: mysql-server-os=Linux/Unix&lt;br /&gt;netflix:backup:INFO: host=localhost&lt;br /&gt;netflix:backup:INFO: backup-date-epoch=1206573412&lt;br /&gt;netflix:backup:INFO: mysql-zrm-version=ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;netflix:backup:INFO: mysql-version=5.0.38-Ubuntu_0ubuntu1.4-log&lt;br /&gt;netflix:backup:INFO: backup-directory=/var/lib/mysql-zrm/netflix/20080326161652&lt;br /&gt;netflix:backup:INFO: backup-level=0&lt;br /&gt;netflix:backup:INFO: backup-mode=raw&lt;br /&gt;netflix:backup:INFO: PHASE END: Initialization&lt;br /&gt;netflix:backup:INFO: PHASE START: Running pre backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE END: Running pre backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE START: Flushing logs&lt;br /&gt;netflix:backup:INFO: PHASE END: Flushing logs&lt;br /&gt;netflix:backup:INFO: PHASE START: Find table type&lt;br /&gt;netflix:backup:INFO: PHASE END: Find table type&lt;br /&gt;netflix:backup:INFO: PHASE START: Creating raw backup&lt;br /&gt;netflix:backup:INFO: raw-databases=myisamnetflix&lt;br /&gt;netflix:backup:INFO: PHASE END: Creating raw backup&lt;br /&gt;netflix:backup:INFO: PHASE START: Calculating backup size &amp;amp; checksums&lt;br /&gt;netflix:backup:INFO: next-binlog=mysql-bin.000009&lt;br /&gt;netflix:backup:INFO: backup-size=122.27 MB&lt;br /&gt;netflix:backup:INFO: PHASE END: Calculating backup size &amp;amp; checksums&lt;br /&gt;netflix:backup:INFO: PHASE START: Compression/Encryption&lt;br /&gt;netflix:backup:INFO: compress=&lt;br /&gt;netflix:backup:INFO: backup-size-compressed=37.65 MB&lt;br /&gt;netflix:backup:INFO: PHASE END: Compression/Encryption&lt;br /&gt;netflix:backup:INFO: read-locks-time=00:00:01&lt;br /&gt;netflix:backup:INFO: flush-logs-time=00:00:00&lt;br /&gt;netflix:backup:INFO: compress-encrypt-time=00:02:20&lt;br /&gt;netflix:backup:INFO: backup-time=00:00:15&lt;br /&gt;netflix:backup:INFO: backup-status=Backup succeeded&lt;br /&gt;netflix:backup:INFO: Backup succeeded&lt;br /&gt;netflix:backup:INFO: PHASE START: Running post backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE END: Running post backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE START: Mailing backup report&lt;br /&gt;netflix:backup:INFO: PHASE END: Mailing backup report&lt;br /&gt;netflix:backup:INFO: PHASE START: Cleanup&lt;br /&gt;netflix:backup:INFO: PHASE END: Cleanup&lt;br /&gt;netflix:backup:INFO: END OF BACKUP&lt;br /&gt;/usr/bin/mysql-zrm started successfully&lt;br /&gt;&lt;br /&gt;* Delete some entries from the "myisamnetflix" database (so that we can do incremental backup of the database)&lt;br /&gt;mysql&gt; use myisamnetflix;&lt;br /&gt;Reading table information for completion of table and column names&lt;br /&gt;You can turn off this feature to get a quicker startup with -A&lt;br /&gt;&lt;br /&gt;Database changed&lt;br /&gt;&lt;br /&gt;mysql&gt; delete from MovieID where MovieTitle = "Alien Hunter";&lt;br /&gt;Query OK, 1 rows affected (0.01 sec)&lt;/p&gt; &lt;p&gt;* Perform incremental backup of the backup set. &lt;/p&gt; &lt;p class="command"&gt;$ mysql-zrm-scheduler --now --backup-set netflix --backup-level 1&lt;/p&gt; &lt;p class="system"&gt; schedule:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log&lt;br /&gt;backup:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;netflix:backup:INFO: START OF BACKUP&lt;br /&gt;netflix:backup:INFO: PHASE START: Initialization&lt;br /&gt;netflix:backup:INFO: backup-set=netflix&lt;br /&gt;netflix:backup:INFO: backup-date=20080326164433&lt;br /&gt;netflix:backup:INFO: mysql-server-os=Linux/Unix&lt;br /&gt;netflix:backup:INFO: host=localhost&lt;br /&gt;netflix:backup:INFO: backup-date-epoch=1206575073&lt;br /&gt;netflix:backup:INFO: mysql-zrm-version=ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;netflix:backup:INFO: mysql-version=5.0.38-Ubuntu_0ubuntu1.4-log&lt;br /&gt;netflix:backup:INFO: backup-directory=/var/lib/mysql-zrm/netflix/20080326164433&lt;br /&gt;netflix:backup:INFO: backup-level=1&lt;br /&gt;netflix:backup:INFO: PHASE END: Initialization&lt;br /&gt;netflix:backup:INFO: PHASE START: Running pre backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE END: Running pre backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE START: Flushing logs&lt;br /&gt;netflix:backup:INFO: PHASE END: Flushing logs&lt;br /&gt;netflix:backup:INFO: PHASE START: Creating incremental backup&lt;br /&gt;netflix:backup:INFO: incremental=mysql-bin.[0-9]*&lt;br /&gt;netflix:backup:INFO: PHASE END: Creating incremental backup&lt;br /&gt;netflix:backup:INFO: PHASE START: Calculating backup size &amp;amp; checksums&lt;br /&gt;netflix:backup:INFO: next-binlog=mysql-bin.000013&lt;br /&gt;netflix:backup:INFO: last-backup=/var/lib/mysql-zrm/netflix/20080326162210&lt;br /&gt;netflix:backup:INFO: backup-size=0.03 MB&lt;br /&gt;netflix:backup:INFO: PHASE END: Calculating backup size &amp;amp; checksums&lt;br /&gt;netflix:backup:INFO: PHASE START: Compression/Encryption&lt;br /&gt;netflix:backup:INFO: compress=&lt;br /&gt;netflix:backup:INFO: backup-size-compressed=0.00 MB&lt;br /&gt;netflix:backup:INFO: PHASE END: Compression/Encryption&lt;br /&gt;netflix:backup:INFO: read-locks-time=00:00:00&lt;br /&gt;netflix:backup:INFO: flush-logs-time=00:00:00&lt;br /&gt;netflix:backup:INFO: compress-encrypt-time=00:00:00&lt;br /&gt;netflix:backup:INFO: backup-time=00:00:00&lt;br /&gt;netflix:backup:INFO: backup-status=Backup succeeded&lt;br /&gt;netflix:backup:INFO: Backup succeeded&lt;br /&gt;netflix:backup:INFO: PHASE START: Running post backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE END: Running post backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE START: Mailing backup report&lt;br /&gt;netflix:backup:INFO: PHASE END: Mailing backup report&lt;br /&gt;netflix:backup:INFO: PHASE START: Cleanup&lt;br /&gt;netflix:backup:INFO: PHASE END: Cleanup&lt;br /&gt;netflix:backup:INFO: END OF BACKUP&lt;br /&gt;/usr/bin/mysql-zrm started successfully&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;ZRM Backup Reports&lt;/h3&gt; &lt;p&gt;* Use "mysql-zrm-reporter" to look at the status of backups available. &lt;/p&gt;  &lt;p class="command"&gt;$ /usr/bin/mysql-zrm-reporter --where backup-set=netflix --show backup-status-info&lt;/p&gt; &lt;p class="system"&gt; REPORT TYPE : backup-status-info&lt;br /&gt;&lt;br /&gt;         backup_set  backup_date                  backup_level  backup_status         comment&lt;br /&gt;-----------------------------------------------------------------------------------------------------------&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:44:33                1  Backup succeeded      ----&lt;br /&gt;                     PM PDT&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:16:52                0  Backup succeeded      ----&lt;br /&gt;                     PM PDT&lt;/p&gt;  &lt;p&gt;* ZRM reports can also provide information on impact on MySQL application. &lt;/p&gt;&lt;p class="command"&gt;$ /usr/bin/mysql-zrm-reporter --where backup-set=netflix --show  backup-app-performance-info&lt;/p&gt;  &lt;p class="system"&gt; REPORT TYPE : backup-app-performance-info&lt;br /&gt;&lt;br /&gt;         backup_set  backup_date                  backup_level     backup_size  backup_time   read_locks_time     flush_logs_time&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:44:33                1         0.03 MB  00:00:00      00:00:00            00:00:00&lt;br /&gt;                     PM PDT&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:16:52                0       122.27 MB  00:00:15      00:00:01            00:00:00&lt;br /&gt;                     PM PDT&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Database Recovery&lt;/h3&gt;  &lt;p&gt;* Use ZRM reporting tool to identify the location of MySQL backup images. &lt;/p&gt; &lt;p class="command"&gt;$ /usr/bin/mysql-zrm-reporter --where backup-set=netflix --show restore-info&lt;/p&gt;  &lt;p class="system"&gt; REPORT TYPE : restore-info&lt;br /&gt;&lt;br /&gt;         backup_set  backup_date                  backup_level  backup_directory                           backup_status         comment&lt;br /&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:44:33                1  /var/lib/mysql-zrm/netflix/20080326164433  Backup succeeded      ----&lt;br /&gt;                     PM PDT&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:16:52                0  /var/lib/mysql-zrm/netflix/20080326161652  Backup succeeded      ----&lt;br /&gt;                     PM PDT&lt;/p&gt;    &lt;p&gt;* You can parse incremental backups to identify database events of interest. In our example, we will look  for the "DELETE" event.&lt;/p&gt; &lt;p class="command"&gt;$ /usr/bin/mysql-zrm-parse-binlogs --source-directory /var/lib/mysql-zrm/netflix/20080326164433 | grep delete&lt;/p&gt;  &lt;p class="system"&gt; parse-binlogs:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;/var/lib/mysql-zrm/netflix/20080326164433/mysql-bin.000011 | 13634 | 08-03-26 16:28:03 | Query | use myisamnetflix/*!*/; delete from MovieID where MovieTitle = "Alien Hunter"/*!*/;&lt;/p&gt;  &lt;p&gt;* Restore the database from the full backup done at 16:16:52. &lt;/p&gt;  &lt;p class="command"&gt;$ /usr/bin/mysql-zrm-restore --user=root --password=boot12 --source-directory=/var/lib/mysql-zrm/netflix/20080326161652&lt;/p&gt; &lt;p class="system"&gt; restore:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;BackupSet1:restore:INFO: Restored database from raw backup: myisamnetflix&lt;br /&gt;BackupSet1:restore:INFO: Restore done in 9 seconds.&lt;br /&gt;MySQL server has been shutdown. Please restart after verification.&lt;br /&gt;&lt;br /&gt;* Restart the MySQL server&lt;br /&gt;# /etc/init.d/mysql restart&lt;br /&gt;* Stopping MySQL database server mysqld                                 [ OK ]&lt;br /&gt;* Starting MySQL database server mysqld                                 [ OK ]&lt;br /&gt;* Checking for corrupt, not cleanly closed and upgrade needing tables.&lt;/p&gt;  &lt;p&gt;* Check the database recovery.&lt;/p&gt; &lt;p class="system"&gt; mysql&gt; use myisamnetflix;&lt;br /&gt;Reading table information for completion of table and column names&lt;br /&gt;You can turn off this feature to get a quicker startup with -A&lt;br /&gt;&lt;br /&gt;Database changed&lt;br /&gt;mysql&gt; select * from MovieID where MovieTitle = "Alien Hunter";&lt;br /&gt;+---------+------+--------------+&lt;br /&gt;| MovieID | Year | MovieTitle   |&lt;br /&gt;+---------+------+--------------+&lt;br /&gt;|   17770 | 2003 | Alien Hunter |&lt;br /&gt;+---------+------+--------------+&lt;br /&gt;1 row in set (0.02 sec)&lt;/p&gt; &lt;div style="text-align: right;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;" class="copyright-footer"&gt;Copyright © 2008 Paddy Sreenivasan&lt;br /&gt;All Rights Reserved. &lt;/div&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-32679318912547491?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/32679318912547491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/32679318912547491'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/mysql-backups-using-zrm-for-mysql-20.html' title='MySQL Backups Using ZRM For MySQL 2.0'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6127582381386337079</id><published>2008-04-10T01:37:00.005-07:00</published><updated>2008-04-29T03:19:31.580-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Scheduled Backups With Rsyncbackup On Debian Etch - Page 2</title><content type='html'>&lt;div class="content"&gt;   &lt;h4&gt;4.3 Configuration&lt;/h4&gt; &lt;h4&gt;4.3.1 Main&lt;/h4&gt; &lt;p&gt;This file contains the standard rsync options for all backups.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/rsyncbackup/config.conf&lt;/p&gt; &lt;p&gt;The content could look like this:&lt;/p&gt; &lt;pre&gt;--stats&lt;br /&gt;--progress&lt;br /&gt;--links&lt;br /&gt;--hard-links&lt;br /&gt;--times&lt;br /&gt;--recursive&lt;br /&gt;--perms&lt;br /&gt;--owner&lt;br /&gt;--group&lt;br /&gt;--compress&lt;br /&gt;--backup&lt;/pre&gt;  &lt;p&gt;Note: You can also use the short style - e.g.: "&lt;span class="system"&gt;-p&lt;/span&gt;" instead of "&lt;span class="system"&gt;--perms&lt;/span&gt;". I chose the long style for better understanding.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.3.2 Sources&lt;/h4&gt; &lt;p&gt;This file contains all files/folders that shall be available in the backup sets.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/rsyncbackup/sources.conf&lt;/p&gt; &lt;p&gt;The content could look like this:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;configs|local:/etc|true|&lt;br /&gt;logs|local:/var/log|true|&lt;/pre&gt;  &lt;p&gt;The syntax: &lt;span class="system"&gt;tag|source path|conditional shell code|optional rsync options&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Note: "&lt;span class="system"&gt;true&lt;/span&gt;" means that this source is enabled - "&lt;span class="system"&gt;false&lt;/span&gt;" would disable it.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.3.3 Destinations&lt;/h4&gt; &lt;p&gt;This file contains all destinations that shall be available in the backup sets.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/rsyncbackup/destinations.conf&lt;/p&gt; &lt;p&gt;The content could look like this:&lt;/p&gt; &lt;pre&gt;store_configs|ssh[key=id_rsa,incremental=7,tag=increment]:root@192.168.0.102:/backups/configs/|/usr/bin/traceroute -m 2 192.168.0.102|--bwlimit=300 --delete&lt;br /&gt;store_logs|ssh[key=id_rsa,incremental=7,tag=increment]root@192.168.0.102:/backups/logs/|/usr/bin/traceroute -m 2 192.168.0.102|--bwlimit=300 --delete&lt;br /&gt;store_manual|ssh[key=id_rsa]:root@192.168.0.102:/backups/manual/|/usr/bin/traceroute -m 2 192.168.0.102|&lt;/pre&gt;  &lt;p&gt;The syntax: &lt;span class="system"&gt;tag|destination path (optional with ssh &amp;amp; incremental settings)|conditional shell code|optional rsync options&lt;/span&gt;&lt;/p&gt; &lt;p&gt;In this example (first and second destination) we use our backup server as destination and authenticate against it with the private ssh key. We want to keep seven increments (&lt;span class="system"&gt;incremental=7&lt;/span&gt;) whose names begin with "increment" (&lt;span class="system"&gt;tag=increment&lt;/span&gt;). The optional shell code (&lt;span class="system"&gt;/usr/bin/traceroute -m 2 192.168.0.102&lt;/span&gt;) will return true (and start the backup) if the backup server is running and at least two hops away. Also we use two optional rsync options (&lt;span class="system"&gt;--bwlimit=300&lt;/span&gt; and &lt;span class="system"&gt;--delete&lt;/span&gt;) - so we have a bandwidth limit for this destination and deleted files on the main server will also be deleted on the backup server (for a new increment). Please note that you can only use &lt;span class="highlight"&gt;ONE&lt;/span&gt; source for a backup set that has an incremental destination.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.3.4 Backup Sets&lt;/h4&gt; &lt;p&gt;This file joins the souces with the destinations.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/rsyncbackup/backupset.conf&lt;/p&gt; &lt;p&gt;It could look like this:&lt;/p&gt; &lt;pre&gt;[manual]&lt;br /&gt;configs,logs|store_manual|true|&lt;br /&gt;&lt;br /&gt;[daily]&lt;br /&gt;logs|store_logs|true|&lt;br /&gt;&lt;br /&gt;[weekly]&lt;br /&gt;configs|store_configs|true|&lt;/pre&gt;  &lt;p&gt;As you can see, we've created three backup sets.&lt;/p&gt; &lt;p&gt;The syntax: &lt;span class="system"&gt;source tags|destination tags|conditional shell code|optional rsync options&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.4 Test&lt;/h4&gt; &lt;p&gt;Now let's test if our configuration is ok.&lt;/p&gt; &lt;p class="command"&gt;rsyncbackup -x /etc/rsyncbackup -vv -d -s manual&lt;/p&gt; &lt;p&gt;The output should look like this:&lt;/p&gt; &lt;p class="system"&gt;PATH DIR:/etc/rsyncbackup/&lt;br /&gt;LOG DIR:/etc/rsyncbackup/logs&lt;br /&gt;CONFIG_FILE:/etc/rsyncbackup/config.conf&lt;br /&gt;SOURCE FILE:/etc/rsyncbackup/sources.conf&lt;br /&gt;DESTS_FILE:/etc/rsyncbackup/destinations.conf&lt;br /&gt;BACKUPSET_FILE:/etc/rsyncbackup/backupset.conf&lt;br /&gt;BACKUPSET:manual&lt;/p&gt; &lt;p class="system"&gt;Backup set 1    configs         to              store_manual&lt;br /&gt;Source          : configs&lt;br /&gt;Source dir      : [local] /etc&lt;br /&gt;Source opts     :&lt;br /&gt;Source cond     : true&lt;br /&gt;Destination     : store_manual&lt;br /&gt;Destination dir : [ssh] root@192.168.0.102:/backups/manual/ [key=id_rsa,sshport=22]&lt;br /&gt;Destination opts:&lt;br /&gt;Destination cond: /usr/bin/traceroute -m 2 192.168.0.102&lt;br /&gt;Config options  : --stats --progress --links --hard-links --times --recursive --perms --owner --group --compress --backup&lt;br /&gt;Backupset opts  : true&lt;br /&gt;All options     : --stats --progress --links --hard-links --times --recursive --perms --owner --group --compress --backup&lt;br /&gt;All conditions  : /usr/bin/traceroute -m 2 192.168.0.102 true true&lt;/p&gt; &lt;p class="system"&gt;Backup set 2    logs            to              store_manual&lt;br /&gt;Source          : logs&lt;br /&gt;Source dir      : [local] /var/log&lt;br /&gt;Source opts     :&lt;br /&gt;Source cond     : true&lt;br /&gt;Destination     : store_manual&lt;br /&gt;Destination dir : [ssh] root@192.168.0.102:/backups/manual/ [key=id_rsa,sshport=22]&lt;br /&gt;Destination opts:&lt;br /&gt;Destination cond: /usr/bin/traceroute -m 2 192.168.0.102&lt;br /&gt;Config options  : --stats --progress --links --hard-links --times --recursive --perms --owner --group --compress --backup&lt;br /&gt;Backupset opts  : true&lt;br /&gt;All options     : --stats --progress --links --hard-links --times --recursive --perms --owner --group --compress --backup&lt;br /&gt;All conditions  : /usr/bin/traceroute -m 2 192.168.0.102 true true&lt;/p&gt; &lt;p&gt;If all looks ok, we'll do our first backup.&lt;/p&gt; &lt;p class="command"&gt;rsyncbackup -x /etc/rsyncbackup -b -s manual&lt;/p&gt; &lt;p&gt;After that the backup should be on the backup server - if not, have a look at the logs (&lt;span class="system"&gt;/etc/rsyncbackup/logs/&lt;/span&gt; or &lt;span class="system"&gt;/var/log/rsyncbackup/&lt;/span&gt;).&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.5 Cronjob&lt;/h4&gt; &lt;p&gt;Now we create cronjobs for the backups.&lt;/p&gt; &lt;p class="command"&gt;crontab -e&lt;/p&gt; &lt;p&gt;The content could look like this:&lt;/p&gt; &lt;pre&gt;# m h  dom mon dow   command&lt;br /&gt;# Backups&lt;br /&gt;00 02 * * *     /usr/local/bin/rsyncbackup -x /etc/rsyncbackup -b -v -s daily &gt;&gt; /var/log/rsyncbackup/backup.daily.log&lt;br /&gt;00 04 * * 0     /usr/local/bin/rsyncbackup -x /etc/rsyncbackup -b -v -s weekly &gt;&gt; /var/log/rsyncbackup/backup.weekly.log&lt;/pre&gt;  &lt;p&gt;The backup set "daily" will be backed up every day at 2:00am, the backup set "weekly" every sunday at 4:00am. Optional, if you want to get mails when errors occurs, you can add the option "&lt;span class="system"&gt;-e email@domain&lt;/span&gt;" to the rsyncbackup command - it should look like this:&lt;/p&gt; &lt;pre&gt;# m h  dom mon dow   command&lt;br /&gt;# Backups&lt;br /&gt;00 02 * * *     /usr/local/bin/rsyncbackup -x /etc/rsyncbackup -b -v -s daily -e email@domain &gt;&gt; /var/log/rsyncbackup/backup.daily.log&lt;br /&gt;00 04 * * 0     /usr/local/bin/rsyncbackup -x /etc/rsyncbackup -b -v -s weekly -e email@domain &gt;&gt; /var/log/rsyncbackup/backup.weekly.log&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.6 Manual&lt;/h4&gt; &lt;p&gt;Please have a look at the manual for further information. It is included in the package that you downloaded in step 4.1.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;5 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Debian: &lt;a title="http://www.debian.org/" target="_blank" href="http://www.debian.org/"&gt;http://www.debian.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Rsyncbackup: &lt;a title="http://code.google.com/p/rsync-backup/" target="_blank" href="http://code.google.com/p/rsync-backup/"&gt;http://code.google.com/p/rsync-backup/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="book"&gt;&lt;div class="nav"&gt; &lt;div class="links"&gt;&lt;div class="up"&gt;&lt;a href="http://howtoforge.com/scheduled-backups-with-rsyncbackup-debian-etch" title="View this page's parent section."&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="titles"&gt;&lt;div class="prev"&gt;Scheduled Backups With Rsyncbackup On Debian Etch&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;" class="copyright-footer"&gt;Copyright © 2008 Oliver Meyer&lt;br /&gt;All Rights Reserved. &lt;/div&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-6127582381386337079?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6127582381386337079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6127582381386337079'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/scheduled-backups-with-rsyncbackup-on.html' title='Scheduled Backups With Rsyncbackup On Debian Etch - Page 2'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6000806570744004053</id><published>2008-04-02T23:02:00.000-07:00</published><updated>2008-04-29T23:05:54.730-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Configure Snort to log packets to MySQL</title><content type='html'>Author : Vincent Danen, ZDNet Asia&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;Administrators can take advantage of the Snort facility to to detect intrusions to the network.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Snort, a network intrusion detection system, can be configured to log packets to a remote MySQL server. A graphical Web interface can be used to view captured packets and statistics. &lt;!--text blurb--&gt;  &lt;p&gt;To begin on the MySQL server, the database must first be created.  &lt;/p&gt;&lt;p&gt;In this scenario, the Snort server is “snort.host” and the MySQL server is "mysql.host".  &lt;/p&gt;&lt;p&gt;Connect to the database as root:&lt;/p&gt;  &lt;pre&gt;# mysql -u root -p&lt;/pre&gt; &lt;pre&gt;mysql&gt; create database snort;&lt;/pre&gt; &lt;pre&gt;mysql&gt; grant INSERT,SELECT,UPDATE,CREATE,DELETE,EXECUTE on snort.*&lt;br /&gt;to snort@snort.host;&lt;/pre&gt; &lt;pre&gt;mysql&gt; set password for snort@snort.host=PASSWORD('snortpass');&lt;/pre&gt; &lt;pre&gt;mysql&gt; flush privileges;&lt;/pre&gt; &lt;pre&gt;mysql&gt; q&lt;/pre&gt;  &lt;p&gt;With the Snort documentation comes a file called &lt;i&gt;create_mysql&lt;/i&gt;, which has the schema for the database.  &lt;/p&gt;&lt;p&gt;On a typical Linux install, this file would be found in &lt;i&gt;/usr/share/doc/snort-[version]/create_mysql&lt;/i&gt;.  &lt;/p&gt;&lt;p&gt;Load this file as root:&lt;/p&gt; &lt;pre&gt;# mysql -u root -p snort &lt;/usr/share/doc/snort-doc/create_mysql&gt;&lt;/pre&gt;  &lt;p&gt;Next, on the system where Snort will be running, edit the &lt;i&gt;/etc/snort/snort.conf&lt;/i&gt; configuration file and tell it to log to the database:&lt;/p&gt; &lt;pre&gt;output database: log, mysql, user=snort password=snortpass&lt;br /&gt;dbname=snort host=mysql.host&lt;/pre&gt;  &lt;p&gt;Finally, make sure that &lt;i&gt;/etc/snort/snort.conf&lt;/i&gt; is mode 0640 and owned root:snort:&lt;/p&gt; &lt;pre&gt;# chown root:snort /etc/snort/snort.conf&lt;/pre&gt; &lt;pre&gt;# chmod 0640 /etc/snort/snort.conf&lt;/pre&gt; &lt;p&gt;The next step is to start Snort; a supplied initscript will start Snort monitoring or you can launch it to the background:&lt;/p&gt; &lt;pre&gt;# /usr/sbin/snort -c /etc/snort/snort.conf &amp;amp;&lt;/pre&gt; &lt;p&gt;Starting Snort once without sending it to the background is a good idea to ensure the connection takes. You can also look on the MySQL server to ensure that logging is active:&lt;/p&gt; &lt;pre&gt;# echo "SELECT hostname FROM sensor;" | mysql -u root -p snort&lt;/pre&gt;  &lt;p&gt;The IP address that Snort is listening on should be displayed.  &lt;/p&gt;&lt;p&gt;Now that Snort is logging data to MySQL, using BASE (&lt;a href="http://base.secureideas.net/" target="_blank"&gt;Basic Analysis and Security Engine&lt;/a&gt;) is a great way to view the data via a Web interface. BASE requires a Web server and PHP. Once you have unarchived it where it needs to be, copy the &lt;i&gt;base_conf.php.dist&lt;/i&gt; file to &lt;i&gt;base_conf.php&lt;/i&gt; and edit it, in particular, setting the &lt;i&gt;$alert_dbname&lt;/i&gt; and related variables to point to the Snort log database.&lt;/p&gt;  &lt;p&gt;You will also want to add a snort@localhost user with privileges to the MySQL database if you did not do so earlier (i.e., if your Snort and MySQL servers are physically separate).&lt;/p&gt;  &lt;p&gt;Once that is done, navigate to the BASE install that you just set up and follow the instructions presented to set up the caching table for BASE. When that is complete, BASE is now available to view and graph the logged Snort data.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-6000806570744004053?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6000806570744004053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6000806570744004053'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/configure-snort-to-log-packets-to-mysql.html' title='Configure Snort to log packets to MySQL'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2583768946363661133</id><published>2008-03-30T01:54:00.002-07:00</published><updated>2008-04-29T02:01:30.326-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>How To Install The Openbravo ERP On Debian Etch</title><content type='html'>Author: Oliver Meyer &lt;o&gt;&lt;br /&gt;Last edited 03/07/2008 &lt;/o&gt;&lt;p&gt;This document describes how to set up Openbravo ERP (enterprise management system) on Debian Etch. Taken from the Openbravo page: "Openbravo is an open source ERP solution designed specifically for the SME (small to midsize firm). Developed in a web based environment, it includes many robust functionalities which are considered part of the extended ERP: procurement and warehouse management, project and service management, production management, and financial management."&lt;/p&gt; &lt;p&gt;I can't list all the features here - please have a look at http://www.openbravo.com/product/product-features/.&lt;/p&gt; &lt;p&gt;This howto is a practical guide without any warranty - it doesn't cover the theoretical backgrounds. There are many ways to set up such a system - this is the way I chose.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;1 Preparation&lt;/h3&gt; &lt;h4&gt;1.1 Debian Backports&lt;/h4&gt; &lt;p&gt;This repository provides Sun's JDK that we need for this setup.&lt;/p&gt;&lt;script type="text/javascript"&gt; &lt;!-- document.write('&lt;div align="center"&gt;'); //--&gt; &lt;/script&gt;&lt;div align="center"&gt;&lt;!-- BEGIN NetShelter Ad Tag for HowtoForge 300x250,336x280 --&gt;  &lt;script language="JavaScript" src="http://ad.doubleclick.net/adj/ns.howtoforge/howtos;sz=300x250,336x280;tile=%27+netshel_tile+%27;ord=%27%20+%20netshel_ord%20+%20%27?" type="text/javascript"&gt;&lt;/scr' + 'ipt&gt;'); netshel_tile++; &lt;/script&gt;&lt;script language="JavaScript" src="http://ad.doubleclick.net/adj/ns.howtoforge/howtos;sz=300x250,336x280;tile=3;ord=5066799867726883?" type="text/javascript"&gt;&lt;/script&gt;&lt;script language="JavaScript" src="http://optimized-by.rubiconproject.com/a/1460/1472/3191.js?cb=0.14774591122950587" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;&lt;!--    e9 = new Object();    e9.size = "336x280,300x250";    e9.noAd = 1; //--&gt;&lt;/script&gt; &lt;script type="text/javascript" src="http://tags.expo9.exponential.com/tags/HowToForgecom/ROS/tags.js"&gt;&lt;/script&gt;&lt;center&gt;&lt;script type="text/javascript" src="http://a.tribalfusion.com/j.ad?site=howtoforgecom&amp;amp;adSpace=ros&amp;amp;size=336x280%7C300x250&amp;amp;p=2255179&amp;amp;a=3&amp;amp;flashVer=9&amp;amp;ver=1.14&amp;amp;center=1&amp;amp;noAd=1&amp;amp;url=http%3A%2F%2Fhowtoforge.com%2Finstalling-openbravo-erp-on-debian-etch&amp;amp;rurl=http%3A%2F%2Fhowtoforge.com%2Fhowtos%2Flinux%2Fdebian&amp;amp;rnd=2264362"&gt;&lt;/script&gt;&lt;iframe src="http://www.howtoforge.com/admedia/reste_300x250.php" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" height="250" scrolling="no" width="300"&gt;&lt;/iframe&gt;&lt;/center&gt;  &lt;!-- END AD TAG --&gt;&lt;script type="text/javascript"&gt; &lt;!-- document.write('&lt;/div&gt;'); //--&gt; &lt;/script&gt;&lt;/div&gt; &lt;p class="command"&gt;vi /etc/apt/sources.list&lt;/p&gt; &lt;p&gt;Add the following lines.&lt;/p&gt; &lt;pre&gt;# Debian Backports&lt;br /&gt;deb http://www.backports.org/debian etch-backports main contrib non-free&lt;/pre&gt; &lt;p&gt;Afterwards refresh apt ...&lt;/p&gt; &lt;p class="command"&gt;apt-get update&lt;/p&gt; &lt;p&gt;... and import the gpg-key.&lt;/p&gt; &lt;p class="command"&gt;apt-get install debian-backports-keyring&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2 Needed Packages&lt;/h4&gt; &lt;p&gt;Now let's install and configure the needed packages.&lt;/p&gt; &lt;h4&gt;1.2.1 PostgreSQL&lt;/h4&gt; &lt;p&gt;Install it via:&lt;/p&gt; &lt;p class="command"&gt;apt-get install postgresql-8.2&lt;/p&gt; &lt;p&gt;Afterwards we have to set the PostgreSQL admin password.&lt;/p&gt; &lt;p class="command"&gt;sed -i 's/ident sameuser$/trust/' /etc/postgresql/8.2/main/pg_hba.conf&lt;br /&gt;/etc/init.d/postgresql-8.2 restart&lt;/p&gt; &lt;p&gt;Open a PostgreSQL shell.&lt;/p&gt; &lt;p class="command"&gt;psql -U postgres&lt;br /&gt;alter role postgres with password '%new_PostgreSQL_admin_passowrd%';&lt;br /&gt;\q&lt;/p&gt; &lt;p class="command"&gt;sed -i 's/trust$/md5/' /etc/postgresql/8.2/main/pg_hba.conf&lt;br /&gt;/etc/init.d/postgresql-8.2 reload&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2.2 Java JDK&lt;/h4&gt; &lt;p&gt;Install it via:&lt;/p&gt; &lt;p class="command"&gt;apt-get install sun-java6-jdk&lt;/p&gt; &lt;p&gt;Afterwards make it systemwide available.&lt;/p&gt; &lt;p class="command"&gt;update-java-alternatives -s java-6-sun&lt;br /&gt;echo 'JAVA_HOME="/usr/lib/jvm/java-6-sun"' | tee -a /etc/environment&lt;/p&gt; &lt;p class="highlight"&gt;After that log out and in again to take the changes effect.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2.3 Apache Tomcat&lt;/h4&gt; &lt;p&gt;Install it via:&lt;/p&gt; &lt;p class="command"&gt;apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps&lt;/p&gt; &lt;p&gt;Afterwards we have to configure it.&lt;/p&gt; &lt;p class="command"&gt;rm /var/log/tomcat5.5/catalina.out&lt;br /&gt;vi /etc/init.d/tomcat5.5&lt;/p&gt; &lt;p&gt;Change:&lt;/p&gt; &lt;pre&gt;TOMCAT5_SECURITY=yes&lt;/pre&gt; &lt;p&gt;To:&lt;/p&gt; &lt;pre&gt;TOMCAT5_SECURITY=no&lt;/pre&gt; &lt;p&gt;Restart Tomcat.&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/tomcat5.5 restart&lt;/p&gt; &lt;p&gt;Now let's look if all went well.&lt;/p&gt; &lt;p class="command"&gt;netstat -tap | grep java&lt;/p&gt; &lt;p&gt;Tomcat should be listening on port 8180.&lt;/p&gt; &lt;p class="system"&gt;tcp6       0      0 *:8180                  *:*                     LISTEN     3571/java&lt;/p&gt; &lt;p&gt;As a last resort make it systemwide available.&lt;/p&gt; &lt;p class="command"&gt;echo 'CATALINA_HOME="/usr/share/tomcat5.5"' | tee -a /etc/environment&lt;br /&gt;echo 'CATALINA_BASE="/var/lib/tomcat5.5"' | tee -a /etc/environment&lt;br /&gt;echo 'CATALINA_OPTS="-server -Xms384M -Xmx512M"' | tee -a /etc/environment&lt;/p&gt; &lt;p class="highlight"&gt;After that log out and in again to take the changes effect.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2.4 Apache Ant&lt;/h4&gt; &lt;p&gt;Apache ant has already been installed as dependency at the step before - so only the configuration is left.&lt;/p&gt; &lt;p class="command"&gt;echo 'ANT_HOME="/usr/share/ant"' | tee -a /etc/environment&lt;/p&gt; &lt;p class="highlight"&gt;After that log out and in again to take the changes effect.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;2 Openbravo&lt;/h3&gt; &lt;h4&gt;2.1 Get It&lt;/h4&gt; &lt;p&gt;Please have a look at &lt;a href="http://sourceforge.net/projects/openbravo/" title="http://sourceforge.net/projects/openbravo/" target="_blank"&gt;http://sourceforge.net/projects/openbravo/&lt;/a&gt; to find out which is the latest version. When I was writing this howto it was version 2.35mp1.&lt;/p&gt; &lt;p class="command"&gt;cd /tmp/&lt;br /&gt;wget http://mesh.dl.sourceforge.net/sourceforge/openbravo/OpenbravoERP-2.35-MP1-linux-installer.bin&lt;br /&gt;chmod +x OpenbravoERP-2.35-MP1-linux-installer.bin&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;2.2 Installation&lt;/h4&gt; &lt;p&gt;A text based installer will guide you through the installation.&lt;/p&gt; &lt;p class="command"&gt;./OpenbravoERP-2.35-MP1-linux-installer.bin&lt;/p&gt; &lt;p&gt;First press a few times "Enter" to read the single parts of the license agreement. Type in "&lt;span class="system"&gt;yes&lt;/span&gt;" at the end if you agree with it.&lt;/p&gt; &lt;p&gt;Before the installation begins you'll be asked a few questions - answer them as follows.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;/opt/OpenbravoERP&lt;/span&gt;) when you're asked for the installation directory.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;/opt/OpenbravoERP/AppsOpenbravo/attach&lt;/span&gt;) when you're asked for the attachments directory.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;Full (standard) installation&lt;/span&gt;) when you're asked for the installation type.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;Full&lt;/span&gt;) when you're asked again for the installation type.&lt;/li&gt;&lt;li&gt;Choose PostgreSQL as database to use.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;/usr/lib/jvm/java-6-sun&lt;/span&gt;) when you're asked for the java home directory.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;/usr/share/ant&lt;/span&gt;) when you're asked for the Apache ant home directory.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;/var/lib/tomcat5.5&lt;/span&gt;) when you're asked for the Tomcat installation directory.&lt;/li&gt;&lt;li&gt;Type in your web server's domain (&lt;span class="system"&gt;e.g.: server1.example.com&lt;/span&gt;) when you're asked for it.&lt;/li&gt;&lt;li&gt;Enter "&lt;span class="system"&gt;8180&lt;/span&gt;" when you're asked for the http port.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;openbravo&lt;/span&gt;) when you're asked for the context name.&lt;/li&gt;&lt;li&gt;Enter "&lt;span class="system"&gt;/usr/bin&lt;/span&gt;" when you're asked for the directory that contains the PostgreSQL binaries.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;localhost&lt;/span&gt;) when you're asked for the database server parameters.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;4532&lt;/span&gt;) when you're asked for PostgreSQL's listening port.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;openbravo&lt;/span&gt;) when you're asked for the database name.&lt;/li&gt;&lt;li&gt;Next enter the PostgreSQL admin password (twice) that you created earlier at step 1.2.1.&lt;/li&gt;&lt;li&gt;Hit "Enter" to choose the default (&lt;span class="system"&gt;tad&lt;/span&gt;) when you're asked for the openbravo database user.&lt;/li&gt;&lt;li&gt;Next type in a password (twice) for the new user.&lt;/li&gt;&lt;li&gt;Now type in "&lt;span class="system"&gt;y&lt;/span&gt;" to start the installation - this will take a while...&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;2.3 Webinterface&lt;/h4&gt; &lt;p&gt;Now you can access Openbravo via &lt;span class="system"&gt;http://%servername%:8180/openbravo&lt;/span&gt; . Log in with the username "Openbravo" and the password "openbravo".&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/openbravo_on_etch/big/login.jpg" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/openbravo_on_etch/login.jpg" style="border: medium none ;" /&gt;&lt;div&gt;&lt;img src="http://images.howtoforge.com/images/click_to_enlarge.png" alt="Click to enlarge" border="0" height="12" width="100" /&gt; &lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;(JavaScript must be enabled in your browser to view the large image as an image overlay.)&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.howtoforge.com/images/openbravo_on_etch/big/welcome.jpg" class="thickbox"&gt;&lt;img src="http://images.howtoforge.com/images/openbravo_on_etch/welcome.jpg" style="border: medium none ;" /&gt;&lt;div&gt;&lt;img src="http://images.howtoforge.com/images/click_to_enlarge.png" alt="Click to enlarge" border="0" height="12" width="100" /&gt; &lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;(JavaScript must be enabled in your browser to view the large image as an image overlay.)&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;3 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Debian: &lt;a title="http://www.debian.org/" target="_blank" href="http://www.debian.org/"&gt;http://www.debian.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Openbravo: &lt;a title="http://www.openbravo.com/" target="_blank" href="http://www.openbravo.com/"&gt;http://www.openbravo.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Openbravo user manual: &lt;a title="http://wiki.openbravo.com/wiki/User_Manual_2.3" target="_blank" href="http://wiki.openbravo.com/wiki/User_Manual_2.3"&gt;http://wiki.openbravo.com/wiki/User_Manual_2.3&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;" class="copyright-footer"&gt;Copyright © 2008 Oliver Meyer&lt;br /&gt;All Rights Reserved. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-2583768946363661133?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2583768946363661133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2583768946363661133'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/03/how-to-install-openbravo-erp-on-debian.html' title='How To Install The Openbravo ERP On Debian Etch'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-4159433800423643976</id><published>2008-03-08T04:34:00.005-07:00</published><updated>2008-03-12T16:46:40.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>VMware Server v1.04 On Fedora 8 With Kernel 2.6.24</title><content type='html'>&lt;p&gt;Version 1.0&lt;br /&gt;Author: Oliver Meyer &lt;o meyer="" projektfarm="" de=""&gt;&lt;br /&gt;Last edited 03/07/2008&lt;/o&gt;&lt;/p&gt; &lt;p&gt;This document describes how to set up VMware Server v1.04 on Fedora 8 with the brand-new kernel 2.6.24 (2.6.24.3-12.fc8).&lt;/p&gt; &lt;p&gt;This howto is a practical guide without any warranty - it doesn't cover the theoretical backgrounds. There are many ways to set up such a system - this is the way I chose. &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;1 VMware Server Is Not Installed Yet&lt;br /&gt;&lt;/h3&gt; &lt;p&gt;Download and install the VMware Server as described at step 14.3.16, but DON'T apply the any-any patch. Afterwards proceed with step 2.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;2 VMware Server Is Already Installed&lt;/h3&gt; &lt;p&gt;Download &lt;a title="#" target="_blank" href="http://downloads.howtoforge.com/vmware_server_on_f8_2.6.24/vmware.tar.bz2"&gt;this patch&lt;/a&gt;. After that open a terminal, become root and switch to the folder where you downloaded the patch. Unpack the patch and copy the included .tar-files to the VMware module-sources directory.&lt;/p&gt; &lt;p class="command"&gt;tar xvfj vmware.tar.bz2&lt;br /&gt;cd vmware/&lt;br /&gt;cp vm* /usr/lib/vmware/modules/source/&lt;/p&gt; &lt;p&gt;Now type in:&lt;/p&gt; &lt;p class="command"&gt;vmware-config.pl&lt;/p&gt; &lt;p&gt;Answer all the questions with "yes" and accept the license agreement (if you agree with it). After that you'll be asked a few questions about install paths etc. - simply hit enter for every question. As a last resort you have to insert your serial number. Afterwards the VMware Server is available in the gnome applications menu.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;3 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Fedora: &lt;a title="http://fedoraproject.org/" target="_blank" href="http://fedoraproject.org/"&gt;http://fedoraproject.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;VMware Server: &lt;a title="http://www.vmware.com/download/server/" target="_blank" href="http://www.vmware.com/download/server/"&gt;http://www.vmware.com/download/server/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-4159433800423643976?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4159433800423643976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4159433800423643976'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/03/vmware-server-v104-on-fedora-8-with.html' title='VMware Server v1.04 On Fedora 8 With Kernel 2.6.24'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6043608852890660453</id><published>2008-02-21T20:42:00.005-07:00</published><updated>2008-12-10T10:18:40.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Network Diagnostic Tool (NDT) On Ubuntu 7.10 Server</title><content type='html'>Author : Shakey1&lt;p&gt;This guide will walk you through the setup process for implementing NDT running under Ubuntu 7.10 server. For those unfamiliar with NDT, it is a network performance testing application. NDT will measure the throughput between your server and the desktops that you run the java client from.&lt;/p&gt;  &lt;p&gt;Some of the issues that NDT can identify on your network, include: &lt;/p&gt;  &lt;ul&gt;&lt;li&gt;The slowest link in the end-to-end path (Dial-up modem to 10 Gbps Ethernet/OC-192)&lt;/li&gt;&lt;li&gt;The Ethernet duplex setting (full or half)&lt;/li&gt;&lt;li&gt;If congestion is limiting end-to-end throughput&lt;/li&gt;&lt;li&gt;Duplex Mismatch&lt;/li&gt;&lt;li&gt;Excessive packet loss due to faulty cables&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt; An example of the output that you can expect is shown in the image below.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VjzGym6MKg/R75GHRFvVrI/AAAAAAAAAHs/8BLGKEiryVs/s1600-h/gbr1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5VjzGym6MKg/R75GHRFvVrI/AAAAAAAAAHs/8BLGKEiryVs/s320/gbr1.png" alt="" id="BLOGGER_PHOTO_ID_5169646512928413362" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="highlight"&gt;WARNING!&lt;/span&gt; Before you begin, I need to make sure that a few things are understood first. This is a very complicated process that involves recompiling and patching the kernel. As such, you should &lt;span class="highlight"&gt;NEVER&lt;/span&gt; attempt this on a production server (or even an existing server, for that matter). You could very well wind up with a bricked operating system. I take absolutely no responsibility whatsoever should this go awry. That being said, I have stepped through this guide several times, since I got the initial sequence down and it has worked for me. I hope that it will do the same for you. Once again though, just to be sure, &lt;span style="font-weight: bold;color:red;" &gt;ONLY&lt;/span&gt; perform this on a new server that you are willing to re-install the OS on should things go bad!&lt;/p&gt;  &lt;p&gt;With that said, let's get started (&lt;span style="font-style: italic;"&gt;you did read the warning, right&lt;/span&gt;?).&lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;h3&gt;Install the base operating system&lt;/h3&gt; &lt;p&gt;This guide requires starting with a fresh installation of Ubuntu 7.10 Server. I would recommend following pages one and two of the &lt;a mce_real_href="http://www.howtoforge.com/perfect_server_ubuntu7.10" target="_blank" href="http://www.howtoforge.com/perfect_server_ubuntu7.10"&gt;The Perfect Server - Ubuntu Gutsy Gibbon (Ubuntu 7.10)&lt;/a&gt; guide, as this is what I used. Be sure to install openssh-server as the guide recommends as you will be performing most of this process remotely.  My preferred SSH tool is &lt;a mce_real_href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html" href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html" target="_blank"&gt;PuTTY&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;h3&gt;Post installation&lt;/h3&gt; &lt;p&gt;Using putty, login to your newly built Ubuntu server. The first step you need to take is to edit your sources.list and comment out the cdrom entry. Run the following commands to do so:&lt;/p&gt;  &lt;p class="command"&gt;sudo nano /etc/apt/sources.list&lt;/p&gt;  &lt;p&gt;You will now be prompted for the password that you created during the installation. Once you have entered it, you need to find the following line and comment it out by placing a "#" in front of it.&lt;/p&gt;  &lt;pre&gt;deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted&lt;/pre&gt; &lt;p&gt;When done, it should look like this:&lt;/p&gt;  &lt;pre&gt;# deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted&lt;/pre&gt; &lt;p&gt;Press Ctrl-O to write out your changes and Ctrl-X to exit the nano editor.&lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;h3&gt;Update and upgrade&lt;/h3&gt; &lt;p&gt;Run the following two commands to make sure that your server is up to date.&lt;/p&gt;  &lt;p class="command"&gt;sudo apt-get update&lt;/p&gt;  &lt;p class="command"&gt;sudo apt-get upgrade&lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;h3&gt;Prepare root access&lt;/h3&gt; &lt;p&gt;I understand that there are some who say that root access is completely unnecessary as the sudo command should suffice. I tend to agree, but as this guide calls for patching and recompiling the kernel, I felt that it was justified.&lt;/p&gt;  &lt;p&gt;Run the following command to set the password for root.&lt;/p&gt;  &lt;p class="command"&gt;sudo passwd root&lt;/p&gt;  &lt;p&gt;You will now be prompted to enter the new root password.&lt;/p&gt;  &lt;p&gt;Once done, become root by issuing the following command.&lt;/p&gt;  &lt;p class="command"&gt;su&lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;h3&gt;Install pre-requisite software&lt;/h3&gt; &lt;p&gt;You now need to install some software that is necessary for further compilations.&lt;/p&gt;  &lt;p&gt;Run the following command to install everything that you will need.&lt;/p&gt;  &lt;p class="command"&gt;apt-get install binutils cpp sendmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential libstdc++2.10-glibc2.2 rcconf libio-pty-perl libnet-ssleay-perl libauthen-pam-perl libmd5-perl gcc cpp libpcap-dev kernel-package libncurses5-dev fakeroot wget bzip2 python2.4-dev libncurses5-dev libreadline5-dev libimlib2 libimlib2-dev sun-java5-bin sun-java5-jdk sun-java5-jre csh&lt;/p&gt;Read Full Article :&lt;br /&gt;&lt;div class="tree"&gt;&lt;div class="menu"&gt;&lt;ul&gt;&lt;li class="leaf"&gt;&lt;a href="http://www.howtoforge.com/network-diagnostic-tool-ndt-ubuntu-7.10-server-p2"&gt;Network Diagnostic Tool (NDT) On Ubuntu 7.10 Server - Page 2&lt;/a&gt;&lt;/li&gt;&lt;li class="leaf"&gt;&lt;a href="http://www.howtoforge.com/network-diagnostic-tool-ndt-ubuntu-7.10-server-p3"&gt;Network Diagnostic Tool (NDT) On Ubuntu 7.10 Server - Page 3&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class="command"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-6043608852890660453?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6043608852890660453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6043608852890660453'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/network-diagnostic-tool-ndt-on-ubuntu.html' title='Network Diagnostic Tool (NDT) On Ubuntu 7.10 Server'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5VjzGym6MKg/R75GHRFvVrI/AAAAAAAAAHs/8BLGKEiryVs/s72-c/gbr1.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2987183060452897046</id><published>2008-02-21T20:24:00.003-07:00</published><updated>2008-02-21T20:30:45.131-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Handle error : mismatch in /etc/passwd and /etc/shadow</title><content type='html'>Author : &lt;a href="http://www.redhatmagazine.com/author/editor/"&gt;Redhat Magazine editorial team&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When you trying add a user, sometimes following error occurs "mismatch in /etc/passwd and /etc/shadow", the error can occurs when there is inconsistencies between the /etc/passswd and /etc/shadow files. The files needed to neither modified or removed. You need to run the following command as root, to find out which account is causing the issue :&lt;br /&gt;&lt;br /&gt;pwck&lt;br /&gt;&lt;br /&gt;All entries in the /etc/passwd and /etc/shadow are checked to see that the entry has the proper format and valid data in each field. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors.&lt;br /&gt;&lt;br /&gt;An example of an account that is in /etc/shadow but not in /etc/passwd:&lt;br /&gt;&lt;br /&gt;no matching password file entry in /etc/passwd&lt;br /&gt;delete line 'someuser:!!:13758:0:99999:8:::'?&lt;br /&gt;&lt;br /&gt;Source : &lt;a href="http://www.redhatmagazine.com/2008/02/20/tips-and-tricks-when-i-am-trying-to-add-a-user-the-following-error-occurs-mismatch-in/"&gt;Redhat Magazine&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-2987183060452897046?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2987183060452897046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2987183060452897046'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/handle-error-mismatch-in-etcpasswd-and.html' title='Handle error : mismatch in /etc/passwd and /etc/shadow'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6434779214369778827</id><published>2008-02-21T19:57:00.003-07:00</published><updated>2008-02-21T20:08:43.145-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>Open source project: Func, the Fedora Unified Network Controller</title><content type='html'>&lt;p&gt;Author :&lt;a href="http://www.redhatmagazine.com/author/mdehaan/" title="Posts by Michael DeHaan"&gt;Michael DeHaan&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://fedorahosted.org/func"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://fedorahosted.org/func"&gt;Func&lt;/a&gt; had an interesting beginning. It began not in a whiteboard-lined conference room, but in a small coffeeshop in Chapel Hill, North Carolina. Greg DeKoenigsberg, Adrian Likins, Seth Vidal, and I were discussing how to make Linux easier to manage for large install bases. That’s when we came up with the idea for Func. &lt;/p&gt; &lt;p&gt;While Fedora contains excellent open source management applications for a variety of tasks, it still lacked a good remote scripting framework roughly analogous to the features provided by system-config-* applications. It turns out this was something many of us wanted to write for a long time–but for some reason, we never did. So, why not build it?  &lt;/p&gt; &lt;p&gt;A fair amount of commercial management software seems to get built and sold without consulting the people who end up using it–systems administrators. While these applications may present extremely well-crafted graphical user interfaces with enterprise-grade reliability and scalability features, they often lack solid scripting ability or require development using complex SOAP APIs to get things done. &lt;/p&gt; &lt;p&gt;For managing very large install bases, these aspects impose barriers to automation. System administrators tend to prefer things written in Perl, Python, or bash. Automation is critical.&lt;/p&gt; &lt;p&gt;The most commonly used remote management tool for Linux is probably SSH. While being a very useful tool for manipulating a single machine remotely, it is challenging to integrate with an environment where machines are frequently reinstalled or where complex remote actions need to be scripted. SSH wasn’t meant to be a multi-system remote scripting tool, and it’s definitely not meant to be something you build other applications on top of. Futhermore, integrating SSH key deployment with kickstart (even with tools like Cobbler to help) can be difficult.&lt;/p&gt; &lt;p&gt;On the other end of the management spectrum, there are configuration management systems such as Puppet, cfengine, and bcfg2. These solutions are great for pushing configuration files around and describing the way infrastructure should look (or making it look that way), but are not as well-suited for remote scripting and one-off tasks. &lt;/p&gt; &lt;p&gt;We wanted to create a solution that filled this void–something absolutely simple, rapid to deploy, easy to use and easy to expand. This would become Func. &lt;/p&gt; &lt;p&gt;Furthermore, we wanted to challenge ourselves, so we decided to create the first release of Func in two weeks time. This was a goal we managed to exceed, as we had it submitted to Fedora in about eight days.&lt;/p&gt; &lt;p&gt;Func works by having a very minimalistic daemon (funcd) installed on each managed machine, which we call a “minion.” Each minion, when it is first run, receives SSL certificates from a remote “certmaster,” which can either be automatically signed or manually approved by an administrator. Client software (in the form of the command line tool (“func”) or the Client API) can then address specific minions from the central server (called the “overlord”), or even address a large set of them at once. Communication is currently only from the overlord to the minion, but intra-minion communication is coming.&lt;/p&gt; &lt;p&gt;To help describe what func can do, the following command shows the available system memory on all example.org machines being managed.&lt;/p&gt; &lt;pre&gt;func “*.example.org” show hardware systemMemory&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;The above also illustrates Func’s globbing feature. Similar globs, such as “*” or “a*” work as expected–communicating with all servers, or all servers starting with “a”, respectively. Of course, addressing only a single system works as well. &lt;/p&gt; &lt;p&gt;The &lt;a href="https://fedorahosted.org/func"&gt;Func project page&lt;/a&gt; also lists example code for doing the same thing (for various func modules) in just a handful of lines of Python. This should be easily understandable even if you do not know Python. (And if you don’t, it’s easy to pick up.)&lt;/p&gt; &lt;p&gt;Here’s a quick Python example:&lt;/p&gt; &lt;pre&gt;import func.overlord.client as fc&lt;br /&gt;client = fc.Client("*.example.org;*.example.com")&lt;br /&gt;client.service.start("acme-server")&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;The initial Func release contained modules for remotely manipulating services, viewing hardware inventory (via Smolt), running remote commands, and many other tasks commonly found in systems management apps. More importantly though, it exposed a trivially simple pluggable model, allowing any application to drop in a module on a remote machine and instantly have it be accessible by the Func “overlord”, whether by command-line or Python scripting. Func is not strictly for systems management–Func is a truly pluggable framework for any application that needs two-way secure communication.&lt;/p&gt; &lt;p&gt;An example of Func’s power is shown by the func-inventory application. Func-inventory is an application that checks on all of the nodes in your infrastructure, and inventories all the Func modules they have running. The results are stored in git (a distributed version control system), and can be viewed with apps like “gitk,” “gitweb,” or “git log.” Func-inventory can therefore be used to see if drives disappear, or if new packages are installed. It is very easy to use Func-inventory to report on all types of changes throughout an organization. &lt;/p&gt; &lt;p&gt;While this is interesting, it is more impressive to note that Func-inventory is only about 200 lines of Python, and was written in only half of a work day. Func contains a very powerful scripting API. Func-inventory ships as part of Func and is installed into /usr/bin.&lt;/p&gt; &lt;p&gt;Other applications contained in Func’s source tree as examples include an exploding battery finder for laptops (which would have been very handy earlier this year) and a failed drive detector (that works by using SMART). Each of these applications are really only a handful of lines of Python. If you’re a Perl or bash hacker, Python is very easy to pick up and Func may get you hooked.&lt;/p&gt; &lt;p&gt;Another useful feature of Func is newly added support for parallelism. Func operations running on remote machines may be slow to complete. They can now be executed in multiple processes, with Func handling the multi-process aspects and combining results as if things were executed in a single process. This is supported both via the Func command line and the Python API. More performance-related tweaks will go into Func as time goes on.&lt;/p&gt; &lt;p&gt;Func is still young. Since starting the project only a few months ago, interest in Func has grown rapidly. It has a IRC channel (#func) on irc.freenode.net, as well as a &lt;a href="http://www.redhat.com/mailman/listinfo/func-list"&gt;mailing list&lt;/a&gt;. We’ve received a wide variety of patches, and are happy to see the beginnings of support for other distributions, with contributions including both BSD and OpenSuSE. The great advantage to open source is in being able to collaborate with such a diverse user base. Whether you have an idea for a new module, need a secure network communication path for your new application, or just want to use existing Func modules to automate your environment, everyone is invited to stop by IRC and the mailing list. &lt;/p&gt; &lt;p&gt;Want to install Func and try it out?  Func is available in Fedora and EPEL.   See the &lt;a href="https://fedorahosted.org/func"&gt;Func project page&lt;/a&gt; for more details.&lt;/p&gt; &lt;p&gt;We would like to reiterate that Func is your application–by sharing ideas and features among its users, Func grows more powerful for everyone that uses it–the true beauty of Open Source. If you write an interesting Func module, we hope you’ll share it with us. Func modules are easy to write and we expect to amass a very large library of them.&lt;/p&gt; &lt;p&gt;If you have a need to manage a very large number of remote machines and are wish for something a bit more sophisticated than SSH for automation purposes–or just need a secure remote communications channel for a new project–Func is the application for you. &lt;/p&gt; &lt;h2&gt;Resources&lt;/h2&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="https://fedorahosted.org/func"&gt;Func project pages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.redhat.com/mailman/listinfo/func-list"&gt;Func mailing list&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.redhatmagazine.com/2008/02/07/python-for-bash-scripters-a-well-kept-secret/"&gt;Python for Bash scripters: A well-kept secret&lt;/a&gt; by Noah Gift (Red Hat Magazine, February 7, 2008)&lt;/li&gt;&lt;/ul&gt;Source : &lt;a href="http://www.redhatmagazine.com/2008/02/21/open-source-project-func-the-fedora-unified-network-controller/"&gt;Func&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-6434779214369778827?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6434779214369778827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6434779214369778827'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/open-source-project-func-fedora-unified.html' title='Open source project: Func, the Fedora Unified Network Controller'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-4160966413940676061</id><published>2008-02-19T01:29:00.000-07:00</published><updated>2008-02-19T01:32:48.455-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Creating Custom Ubuntu Live-CD With Remastersys</title><content type='html'>Remastersys is a tool that can be used to do 2 things with an existing Klikit or Ubuntu or derivative installation.It can make a full system backup including personal data to a live cd or dvd that you can use anywhere and install. It can make a distributable copy you can share with friends. This will not have any of your personal user data in it.&lt;br /&gt;&lt;br /&gt;Install Remastersys in Ubuntu&lt;br /&gt;&lt;br /&gt;The Remastersys repository needs to be added to your /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;sudo vi /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;Paste the following into the sources.list:&lt;br /&gt;&lt;br /&gt;# Remastersys&lt;br /&gt;deb http://www.remastersys.klikit.org/repository remastersys/&lt;br /&gt;&lt;br /&gt;Save and exit the file.&lt;br /&gt;&lt;br /&gt;Update the source list using the following command&lt;br /&gt;&lt;br /&gt;sudo apt-get update&lt;br /&gt;&lt;br /&gt;Install remastersys using the following command&lt;br /&gt;&lt;br /&gt;sudo apt-get install remastersys&lt;br /&gt;&lt;br /&gt;This will complete the installation&lt;br /&gt;&lt;br /&gt;Using Remastersys&lt;br /&gt;&lt;br /&gt;In order to learn how you can use remastersys, run&lt;br /&gt;&lt;br /&gt;sudo remastersys&lt;br /&gt;&lt;br /&gt;remastersys Syntax&lt;br /&gt;&lt;br /&gt;sudo remastersys backup|clean|dist [cdfs|iso] [filename.iso]&lt;br /&gt;&lt;br /&gt;remastersys Examples&lt;br /&gt;&lt;br /&gt;1) to make a livecd/dvd backup of your system&lt;br /&gt;&lt;br /&gt;sudo remastersys backup&lt;br /&gt;&lt;br /&gt;2) to make a livecd/dvd backup and call the iso custom.iso&lt;br /&gt;&lt;br /&gt;sudo remastersys backup custom.iso&lt;br /&gt;&lt;br /&gt;3) to clean up temporary files of remastersys&lt;br /&gt;&lt;br /&gt;sudo remastersys clean&lt;br /&gt;&lt;br /&gt;4) to make a distributable livecd/dvd of your system&lt;br /&gt;&lt;br /&gt;sudo remastersys dist&lt;br /&gt;&lt;br /&gt;5) to make a distributable livecd/dvd filesystem only&lt;br /&gt;&lt;br /&gt;sudo remastersys dist cdfs&lt;br /&gt;&lt;br /&gt;6) to make a distributable iso named custom.iso but only if the cdfs is already present&lt;br /&gt;&lt;br /&gt;sudo remastersys dist iso custom.iso&lt;br /&gt;&lt;br /&gt;cdfs and iso options should only be used if you wish to modify something on the cd before the iso is created. An example of this would be to modify the isolinux portion of the livecd/dvd&lt;br /&gt;&lt;br /&gt;Creating An ISO Image&lt;br /&gt;&lt;br /&gt;To create an iso image of your installation, simply run&lt;br /&gt;&lt;br /&gt;sudo remastersys dist&lt;br /&gt;&lt;br /&gt;This will create an iso image called customdist.iso in the /home/remastersys directory. The dist option makes that your personal folder (e.g. /home/ruchi) will not be included in the iso image. You might have to insert your Ubuntu installation CD during the process.&lt;br /&gt;&lt;br /&gt;This is how the end of the process looks:&lt;br /&gt;&lt;br /&gt;[…]&lt;br /&gt;92.16% done, estimate finish Wed DEC 28 15:31:25 2007&lt;br /&gt;93.39% done, estimate finish Wed DEC 28 15:31:25 2007&lt;br /&gt;94.62% done, estimate finish Wed DEC 28 15:31:24 2007&lt;br /&gt;95.85% done, estimate finish Wed DEC 28 15:31:24 2007&lt;br /&gt;97.08% done, estimate finish Wed DEC 28 15:31:25 2007&lt;br /&gt;98.31% done, estimate finish Wed DEC 28 15:31:25 2007&lt;br /&gt;99.54% done, estimate finish Wed DEC 28 15:31:25 2007&lt;br /&gt;Total translation table size: 2048&lt;br /&gt;Total rockridge attributes bytes: 3950&lt;br /&gt;Total directory bytes: 9094&lt;br /&gt;Path table size(bytes): 54&lt;br /&gt;Max brk space used 0&lt;br /&gt;406890 extents written (794 MB)&lt;br /&gt;&lt;br /&gt;/home/remastersys/customdist.iso is ready to be burned or tested in a virtual machine.&lt;br /&gt;&lt;br /&gt;Check the size and if it is larger than 700MB you will need to burn it to a dvd&lt;br /&gt;&lt;br /&gt;796M /home/remastersys/customdist.iso&lt;br /&gt;&lt;br /&gt;Clean Up&lt;br /&gt;&lt;br /&gt;After you’ve burnt the iso image onto a CD/DVD, you can run&lt;br /&gt;&lt;br /&gt;sudo remastersys clean&lt;br /&gt;&lt;br /&gt;to remove all temporary file created during the iso generation as well as the /home/remastersys directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-4160966413940676061?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4160966413940676061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4160966413940676061'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/creating-custom-ubuntu-live-cd-with.html' title='Creating Custom Ubuntu Live-CD With Remastersys'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1735965834589406416</id><published>2008-02-18T23:10:00.002-07:00</published><updated>2008-12-10T10:18:41.019-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Mandriva Directory Server On Debian Etch - Page 7</title><content type='html'>&lt;span style="font-weight: bold;font-size:180%;" &gt;20 The Client Side&lt;/span&gt; &lt;p&gt;I've tested this with Windows XP Pro SP2 - but it should also work with other Windows versions.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Be sure that no other DHCP server than the one on the server is running&lt;/li&gt;&lt;li&gt;Start Windows and log in as local administrator&lt;/li&gt;&lt;li&gt;Configure your network connection to use DHCP&lt;/li&gt;&lt;li&gt;Right click on "&lt;span class="system"&gt;My Computer&lt;/span&gt;" and select "&lt;span class="system"&gt;Properties&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;Switch to the tab "&lt;span class="system"&gt;Computer Name&lt;/span&gt;" and click on "&lt;span class="system"&gt;Change&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;Insert a desired computer name, mark the radio button "&lt;span class="system"&gt;Domain&lt;/span&gt;" and enter "&lt;span class="system"&gt;EXAMPLE&lt;/span&gt;" (without the quotes!)&lt;/li&gt;&lt;li&gt;Click on "&lt;span class="system"&gt;OK&lt;/span&gt;" to take the changes effect&lt;/li&gt;&lt;li&gt;A few moments later you'll be asked for a username and password. Use the domain administrator account that you created at step 5.2 (e.g.: Username "&lt;span class="system"&gt;Administrator&lt;/span&gt;" with the password "&lt;span class="system"&gt;howtoforge&lt;/span&gt;") and click on "&lt;span class="system"&gt;OK&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;If all went ok, you'll get a welcome message&lt;/li&gt;&lt;li&gt;Restart the system&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;When the system is up again, log in with the domain administrator account that you created at step 5.2 (e.g.: Username "&lt;span class="system"&gt;Administrator&lt;/span&gt;" with the password "&lt;span class="system"&gt;howtoforge&lt;/span&gt;"). Be sure that you select the domain from the drop down menu!&lt;/li&gt;&lt;li&gt;Click on "&lt;span class="system"&gt;Start&lt;/span&gt;" and afterwards on "&lt;span class="system"&gt;execute&lt;/span&gt;". Enter "&lt;span class="system"&gt;gpedit.msc&lt;/span&gt;" and click on "&lt;span class="system"&gt;OK&lt;/span&gt;".&lt;/li&gt;&lt;li&gt;Browse to the Internet Explorer settings and activate "&lt;span class="system"&gt;proxy settings per computer.&lt;/span&gt;"&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VjzGym6MKg/R7qCmRFvVoI/AAAAAAAAAHU/Amob80gZiZg/s1600-h/gpedit1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5VjzGym6MKg/R7qCmRFvVoI/AAAAAAAAAHU/Amob80gZiZg/s320/gpedit1.jpg" alt="" id="BLOGGER_PHOTO_ID_5168587116295181954" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VjzGym6MKg/R7qCmxFvVpI/AAAAAAAAAHc/IDKM418unIM/s1600-h/gpedit2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5VjzGym6MKg/R7qCmxFvVpI/AAAAAAAAAHc/IDKM418unIM/s320/gpedit2.jpg" alt="" id="BLOGGER_PHOTO_ID_5168587124885116562" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Now open the Internet Explorer, click on "&lt;span class="system"&gt;Extras&lt;/span&gt;" and afterwards on "&lt;span class="system"&gt;Internet Options&lt;/span&gt;". Edit the proxy settings as shown on the screenshot below.&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VjzGym6MKg/R7qCnBFvVqI/AAAAAAAAAHk/NX8iuACpMwE/s1600-h/proxy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5VjzGym6MKg/R7qCnBFvVqI/AAAAAAAAAHk/NX8iuACpMwE/s320/proxy.jpg" alt="" id="BLOGGER_PHOTO_ID_5168587129180083874" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/big/proxy.jpg" class="thickbox"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Log out and in again with the domain user account that you configured at step 19.4 (e.g.: Username "&lt;span class="system"&gt;olli&lt;/span&gt;" with the password "&lt;span class="system"&gt;howtoforge&lt;/span&gt;"). Be sure that you select the domain from the drop down menu! Domain users won't be able to change the proxy settings.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1735965834589406416?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1735965834589406416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1735965834589406416'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_5245.html' title='Mandriva Directory Server On Debian Etch - Page 7'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5VjzGym6MKg/R7qCmRFvVoI/AAAAAAAAAHU/Amob80gZiZg/s72-c/gpedit1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8818050811190155210</id><published>2008-02-18T23:05:00.003-07:00</published><updated>2008-12-10T10:18:43.183-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Mandriva Directory Server On Debian Etch - Page 6</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;19 MMC Webinterface&lt;/span&gt; &lt;p&gt;Now you can access the MMC webinterface via https://192.168.0.100 (http is not working at the moment). Log in as root. Later, when the nameserver and the dhcp-server are configured (and you are using them), you should connect via http://server1.example.com (the connection will automatically be diverted to https) or https://server1.example.com.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VjzGym6MKg/R7p81RFvVZI/AAAAAAAAAFc/gBCSGw4tumE/s1600-h/login.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5VjzGym6MKg/R7p81RFvVZI/AAAAAAAAAFc/gBCSGw4tumE/s320/login.jpg" alt="" id="BLOGGER_PHOTO_ID_5168580776923452818" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Welcome to the Mandriva Management Console.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VjzGym6MKg/R7p81hFvVaI/AAAAAAAAAFk/fYDO2VKYrHU/s1600-h/overview.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_5VjzGym6MKg/R7p81hFvVaI/AAAAAAAAAFk/fYDO2VKYrHU/s320/overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5168580781218420130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;19.1 First Steps: DNS Zone&lt;/h4&gt; &lt;p&gt;Click on "&lt;span class="system"&gt;Network&lt;/span&gt;" in the main-menu at the top and afterwards on "&lt;span class="system"&gt;Add DNS Zone&lt;/span&gt;" in the left menu. Edit the settings as shown on the screenshot below. Click on "&lt;span class="system"&gt;Create&lt;/span&gt;" to save the settings. Note: A DHCP subnet with basic settings will be created - you'll edit it in the next step (19.2).&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VjzGym6MKg/R7p-TBFvVbI/AAAAAAAAAFs/pWPY5GR27FI/s1600-h/add_dns_zone.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5VjzGym6MKg/R7p-TBFvVbI/AAAAAAAAAFs/pWPY5GR27FI/s320/add_dns_zone.jpg" alt="" id="BLOGGER_PHOTO_ID_5168582387536188850" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/big/add_dns_zone.jpg" class="thickbox"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;Now you have to add an alias to the first member of the DNS zone to make the Squid redirect-VHost accessible. Click on "&lt;span class="system"&gt;DNS zones&lt;/span&gt;" on the left side and then on the little magnifier next to the zone entry.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VjzGym6MKg/R7p-TRFvVcI/AAAAAAAAAF0/yrXWeKelCQ0/s1600-h/add_host_alias1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5VjzGym6MKg/R7p-TRFvVcI/AAAAAAAAAF0/yrXWeKelCQ0/s320/add_host_alias1.jpg" alt="" id="BLOGGER_PHOTO_ID_5168582391831156162" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/big/add_host_alias1.jpg" class="thickbox"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;Click on the "&lt;span class="system"&gt;pen &amp;amp; paper&lt;/span&gt;" symbol next to the host entry.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VjzGym6MKg/R7p-ThFvVdI/AAAAAAAAAF8/LWtE4lfSkYg/s1600-h/add_host_alias2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_5VjzGym6MKg/R7p-ThFvVdI/AAAAAAAAAF8/LWtE4lfSkYg/s320/add_host_alias2.jpg" alt="" id="BLOGGER_PHOTO_ID_5168582396126123474" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/big/add_host_alias2.jpg" class="thickbox"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;Insert "&lt;span class="system"&gt;blocked&lt;/span&gt;" as hostname alias and confirm the setting.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VjzGym6MKg/R7p-TxFvVeI/AAAAAAAAAGE/LuNHpQK7JtY/s1600-h/add_host_alias3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5VjzGym6MKg/R7p-TxFvVeI/AAAAAAAAAGE/LuNHpQK7JtY/s320/add_host_alias3.jpg" alt="" id="BLOGGER_PHOTO_ID_5168582400421090786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;19.2 First Steps: DHCP Subnet Configuration&lt;/h4&gt; &lt;p&gt;Now you have to edit the DHCP subnet. Click on "&lt;span class="system"&gt;DCHP subnets&lt;/span&gt;" on the left side and afterwards on the "&lt;span class="system"&gt;pen &amp;amp; paper&lt;/span&gt;" symbol next to the subnet entry.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VjzGym6MKg/R7p_tRFvVfI/AAAAAAAAAGM/XEhf3yjSjdM/s1600-h/edit_dhcp_subnet1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5VjzGym6MKg/R7p_tRFvVfI/AAAAAAAAAGM/XEhf3yjSjdM/s320/edit_dhcp_subnet1.jpg" alt="" id="BLOGGER_PHOTO_ID_5168583938019382770" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/big/edit_dhcp_subnet1.jpg" class="thickbox"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;Edit the settings as shown on the screenshots below. Maybe you want to use another ip-range for the address pool or other lease-times. Click on "&lt;span class="system"&gt;Confirm&lt;/span&gt;" to save the settings.&lt;/p&gt;  &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VjzGym6MKg/R7p_thFvVgI/AAAAAAAAAGU/9xw_CnWXReQ/s1600-h/edit_dhcp_subnet2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_5VjzGym6MKg/R7p_thFvVgI/AAAAAAAAAGU/9xw_CnWXReQ/s320/edit_dhcp_subnet2.jpg" alt="" id="BLOGGER_PHOTO_ID_5168583942314350082" border="0" /&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VjzGym6MKg/R7qA6xFvVkI/AAAAAAAAAG0/v7ShMk98F3U/s1600-h/edit_dhcp_subnet3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5VjzGym6MKg/R7qA6xFvVkI/AAAAAAAAAG0/v7ShMk98F3U/s320/edit_dhcp_subnet3.jpg" alt="" id="BLOGGER_PHOTO_ID_5168585269459244610" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/big/edit_dhcp_subnet3.jpg" class="thickbox"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;Now the DHCP settings are complete and you can start the DHCP server. Click on "&lt;span class="system"&gt;Network services management&lt;/span&gt;" on the left side and afterwards click on the green triangle to start the DHCP server. Note: Whenever you create/delete/change DHCP subnets you have to restart the DHCP server.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VjzGym6MKg/R7p_txFvVhI/AAAAAAAAAGc/IOE0feUKFA0/s1600-h/start_dhcp_server.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5VjzGym6MKg/R7p_txFvVhI/AAAAAAAAAGc/IOE0feUKFA0/s320/start_dhcp_server.jpg" alt="" id="BLOGGER_PHOTO_ID_5168583946609317394" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/big/start_dhcp_server.jpg" class="thickbox"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;19.3 First Steps: Domain Administrator Mailaccount&lt;/p&gt;   &lt;p&gt;If you want to use the Administrator mailaccount you have to enable it. Click on "&lt;span class="system"&gt;Users&lt;/span&gt;" in the main menu on the top - you'll see the users list. Click on the "&lt;span class="system"&gt;pen &amp;amp; paper&lt;/span&gt;" symbol next to the Administrator entry.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VjzGym6MKg/R7p_uBFvViI/AAAAAAAAAGk/QZf84feYxU4/s1600-h/edit_admin.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5VjzGym6MKg/R7p_uBFvViI/AAAAAAAAAGk/QZf84feYxU4/s320/edit_admin.jpg" alt="" id="BLOGGER_PHOTO_ID_5168583950904284706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;Enter a mail address into the corresponding field.&lt;/p&gt; &lt;p&gt;&lt;img src="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/edit_admin_mail1.jpg" style="border: medium none ;" /&gt;&lt;/p&gt; &lt;p&gt;Enable the mail plugin, enter a desired quota and save the settings.&lt;br /&gt;* Maybe you have to insert the quota once again (because the MMC overwrote the quota with the default value) and save the settings. (I had to do so)&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VjzGym6MKg/R7p_uBFvVjI/AAAAAAAAAGs/1OLCZK5mUHY/s1600-h/edit_admin_mail2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5VjzGym6MKg/R7p_uBFvVjI/AAAAAAAAAGs/1OLCZK5mUHY/s320/edit_admin_mail2.jpg" alt="" id="BLOGGER_PHOTO_ID_5168583950904284722" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.howtoforge.com/images/mandriva_directory_server_on_debian_etch/big/edit_admin_mail2.jpg" class="thickbox"&gt;&lt;div&gt;&lt;img src="http://images.howtoforge.com/images/click_to_enlarge.png" alt="Click to enlarge" border="0" height="12" width="100" /&gt; &lt;/div&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;(JavaScript must be enabled in your browser to view the large image as an image overlay.)&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;19.4 First Steps: First Domain User Account&lt;/h4&gt; &lt;p&gt;Time to create the first domain user account. Click on "&lt;span class="system"&gt;Add&lt;/span&gt;" on the left side and create a user as shown on the screnshots below. Keep in mind, that you probably have to edit the quota twice. Note: Some settings have a red underline - when you hover over them you'll see a short description about this setting.&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VjzGym6MKg/R7qA7BFvVlI/AAAAAAAAAG8/JQfeYwl_bZQ/s1600-h/first_user1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5VjzGym6MKg/R7qA7BFvVlI/AAAAAAAAAG8/JQfeYwl_bZQ/s320/first_user1.jpg" alt="" id="BLOGGER_PHOTO_ID_5168585273754211922" border="0" /&gt;&lt;/a&gt;&lt;noscript style="font-size: 7pt;"&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VjzGym6MKg/R7qA7RFvVmI/AAAAAAAAAHE/QJkUON-x5AU/s1600-h/first_user2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5VjzGym6MKg/R7qA7RFvVmI/AAAAAAAAAHE/QJkUON-x5AU/s320/first_user2.jpg" alt="" id="BLOGGER_PHOTO_ID_5168585278049179234" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VjzGym6MKg/R7qA7xFvVnI/AAAAAAAAAHM/4eQ2TorIIo4/s1600-h/first_user3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5VjzGym6MKg/R7qA7xFvVnI/AAAAAAAAAHM/4eQ2TorIIo4/s320/first_user3.jpg" alt="" id="BLOGGER_PHOTO_ID_5168585286639113842" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_7337.html"&gt;Previous &lt;/a&gt;|| &lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_5245.html"&gt;Next&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-8818050811190155210?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8818050811190155210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8818050811190155210'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_2008.html' title='Mandriva Directory Server On Debian Etch - Page 6'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5VjzGym6MKg/R7p81RFvVZI/AAAAAAAAAFc/gBCSGw4tumE/s72-c/login.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7389924226497085205</id><published>2008-02-18T23:01:00.002-07:00</published><updated>2008-02-18T23:43:40.650-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Mandriva Directory Server On Debian Etch - Page 5</title><content type='html'>&lt;h3&gt;16 Webinterface Configuration&lt;/h3&gt; &lt;h4&gt;16.1 SSL Certificate&lt;/h4&gt; &lt;p&gt;This SSL certificate will be used for the MMC and the CUPS web-frontend.&lt;/p&gt;  &lt;p class="command"&gt;mkdir /etc/apache2/ssl/&lt;br /&gt;openssl req -new -x509 -keyout /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.crt -days 365 -nodes&lt;br /&gt;chmod 600 /etc/apache2/ssl/server.key&lt;br /&gt;cp /etc/apache2/ssl/* /etc/cups/ssl/&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;16.2 CUPS&lt;/h4&gt; &lt;p&gt;In order that you can access the CUPS web-frontend from other machines in your network, you have to adjust some settings.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/cups/cupsd.conf&lt;/p&gt;  &lt;p&gt;Change:&lt;/p&gt;  &lt;p class="system"&gt;Listen localhost:631&lt;/p&gt;  &lt;p&gt;To:&lt;/p&gt;  &lt;p class="system"&gt;Listen %server_ip%:631&lt;/p&gt;  &lt;p&gt;Change:&lt;/p&gt;  &lt;p class="system"&gt;# Restrict access to the server...&lt;br /&gt;&lt;location&gt;&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow localhost&lt;br /&gt;&lt;/location&gt;&lt;/p&gt;  &lt;p class="system"&gt;# Restrict access to the admin pages...&lt;br /&gt;&lt;location&gt;&lt;br /&gt;Encryption Required&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow localhost&lt;br /&gt;&lt;/location&gt;&lt;/p&gt;  &lt;p class="system"&gt;# Restrict access to configuration files...&lt;br /&gt;&lt;location&gt;&lt;br /&gt;AuthType Basic&lt;br /&gt;Require user @SYSTEM&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow localhost&lt;br /&gt;&lt;/location&gt;&lt;/p&gt;&lt;p&gt;To:&lt;/p&gt;  &lt;p class="system"&gt;# Restrict access to the server...&lt;br /&gt;&lt;location&gt;&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow localhost&lt;br /&gt;Allow 192.168.0.0/24&lt;br /&gt;&lt;/location&gt;&lt;/p&gt;  &lt;p class="system"&gt;# Restrict access to the admin pages...&lt;br /&gt;&lt;location&gt;&lt;br /&gt;Encryption Required&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow localhost&lt;br /&gt;Allow 192.168.0.0/24&lt;br /&gt;&lt;/location&gt;&lt;/p&gt;  &lt;p class="system"&gt;# Restrict access to configuration files...&lt;br /&gt;&lt;location&gt;&lt;br /&gt;AuthType Basic&lt;br /&gt;Require user @SYSTEM&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow localhost&lt;br /&gt;Allow 192.168.0.0/24&lt;br /&gt;&lt;/location&gt;&lt;/p&gt;  &lt;p&gt;Afterwards restart CUPS.&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/cupsys restart&lt;/p&gt;  &lt;p&gt;Now you're able to manage your CUPS printers via the CUPS webinterface from your workstation. Open https://192.168.0.100:631/ (Later, when the nameserver and the dhcp-server are configured, you should connect via https://server1.example.com:631) within your preferred browser and log in as root. Please note that if there is no Linux driver available for your printer and you want to use this printer only from your Windows workstations trough SAMBA, you can use the printer manufacturer "RAW" and install the correct driver on your Windows workstations.&lt;/p&gt;  &lt;p&gt;Please note that if you are going to set up a HP printer, you should add it to CUPS via hplip (command line). The exact command depends on the connection type of your device - have a look at "hp-setup --help". E.g.: For a network-printer with the IP 192.168.0.20 the command is "&lt;span class="system"&gt;hp-setup -i 192.168.0.20&lt;/span&gt;". Afterwards you can adjust the printer settings (resolution etc.) within the CUPS webinterface.&lt;/p&gt;  &lt;p&gt;After you added a new printer to CUPS, you'll have to add it to Samba via&lt;/p&gt;  &lt;p class="command"&gt;cupsaddsmb -a&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;16.3 MMC&lt;/h4&gt; &lt;p&gt;We'll create two vhosts - one for http-connections and one for https-connections.&lt;/p&gt; &lt;h4&gt;16.3.1 HTTP VHost&lt;/h4&gt; &lt;p class="command"&gt;vi /etc/apache2/sites-available/http&lt;/p&gt;  &lt;p&gt;Add the following configuration.&lt;/p&gt;  &lt;p class="system"&gt;&lt;virtualhost&gt;&lt;/virtualhost&gt;&lt;/p&gt;  &lt;p class="system"&gt;   ServerName server1.example.com&lt;/p&gt;  &lt;p class="system"&gt;   RewriteEngine On&lt;br /&gt;  RewriteCond %{HTTPS} off&lt;br /&gt;  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}&lt;/p&gt;  &lt;p class="system"&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;16.3.2 HTTPS VHost&lt;/h4&gt; &lt;p class="command"&gt;vi /etc/apache2/sites-available/https&lt;/p&gt;  &lt;p&gt;Add the following configuration.&lt;/p&gt;  &lt;p class="system"&gt;NameVirtualHost 192.168.0.100:443&lt;/p&gt;  &lt;p class="system"&gt;&lt;virtualhost&gt;&lt;/virtualhost&gt;&lt;/p&gt;  &lt;p class="system"&gt;   ServerName server1.example.com&lt;br /&gt;  ServerAdmin Administrator@example.com&lt;br /&gt;  DocumentRoot /usr/share/mmc/&lt;/p&gt;  &lt;p class="system"&gt;   SSLEngine on&lt;br /&gt;  SSLCertificateKeyFile ssl/server.key&lt;br /&gt;  SSLCertificateFile ssl/server.crt&lt;br /&gt;  SSLProtocol all&lt;br /&gt;  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL&lt;/p&gt;  &lt;p class="system"&gt;   &lt;directory&gt;&lt;br /&gt;      AllowOverride None&lt;br /&gt;      Order allow,deny&lt;br /&gt;      Allow from 192.168.0.0/24&lt;br /&gt;      php_flag short_open_tag on&lt;br /&gt;      SSLRequire %{SSL_CIPHER_USEKEYSIZE} &gt;= 128&lt;br /&gt;  &lt;/directory&gt;&lt;/p&gt;  &lt;p class="system"&gt;   ErrorLog /var/log/apache2/mmc_error.log&lt;br /&gt;  CustomLog /var/log/apache2/mmc_access.log combined&lt;br /&gt;  LogLevel warn&lt;/p&gt;  &lt;p class="system"&gt;&lt;/p&gt;  &lt;p&gt;Add the HTTPS listen port to the apache configuration.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/apache2/ports.conf&lt;/p&gt;  &lt;p&gt;Add the following line:&lt;/p&gt;  &lt;p class="system"&gt;Listen 443&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;16.4 Modules &amp;amp; Sites&lt;/h4&gt; &lt;p&gt;After that we enable the new sites, ...&lt;/p&gt;  &lt;p class="command"&gt;a2ensite http&lt;br /&gt;a2ensite https&lt;/p&gt;  &lt;p&gt;... the rewrite module ...&lt;/p&gt;  &lt;p class="command"&gt;a2enmod rewrite&lt;/p&gt;  &lt;p&gt;... and the ssl module.&lt;/p&gt;  &lt;p class="command"&gt;a2enmod ssl&lt;/p&gt;  &lt;p&gt;Now restart apache.&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/apache2 restart&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;17 MMC Plugins&lt;/h3&gt; &lt;h4&gt;17.1 MMC Base-Plugin Configuration&lt;/h4&gt; &lt;p&gt;Edit MMC base-plugin configuration file.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/mmc/plugins/base.ini&lt;/p&gt;  &lt;p&gt;Edit the baseDN that it fits to your domain, insert the correct ldap admin password and change the destination path for the archives - the content should look like this:&lt;/p&gt;  &lt;pre&gt;[ldap]&lt;br /&gt;# LDAP we are connected to&lt;br /&gt;host = 127.0.0.1&lt;br /&gt;# LDAP base DN&lt;br /&gt;baseDN = dc=example, dc=com&lt;br /&gt;# Users location in the LDAP&lt;br /&gt;baseUsersDN = ou=Users, %(basedn)s&lt;br /&gt;# Groups location in the LDAP&lt;br /&gt;baseGroupsDN = ou=Groups, %(basedn)s&lt;br /&gt;# Computers Locations&lt;br /&gt;baseComputersDN = ou=Computers, %(basedn)s&lt;br /&gt;# LDAP manager&lt;br /&gt;rootName = cn=admin, %(basedn)s&lt;br /&gt;password = howtoforge&lt;br /&gt;# If enabled, the MMC will create/move/delete the home of the users&lt;br /&gt;# Else will do nothing, but only write user informations into LDAP&lt;br /&gt;userHomeAction = 1&lt;br /&gt;# Skeleton directory to populate a new home directory&lt;br /&gt;skelDir = /etc/skel&lt;br /&gt;# If set, all new users will belong to this group when created&lt;br /&gt;defaultUserGroup = Domain Users&lt;br /&gt;# Default home directory for users&lt;br /&gt;defaultHomeDir = /home&lt;br /&gt;# user uid number start&lt;br /&gt;uidStart = 10000&lt;br /&gt;# group gid number start&lt;br /&gt;gidStart = 10000&lt;br /&gt;# LDAP log file path&lt;br /&gt;logfile = /var/log/ldap.log&lt;br /&gt;# FDS log file path&lt;br /&gt;# logfile = /opt/fedora-ds/slapd-hostname/logs/access&lt;br /&gt;# you can specify here where you can authorized creation of your homedir&lt;br /&gt;# default is your defaultHomeDir&lt;br /&gt;# example:&lt;br /&gt;# authorizedHomeDir = /home, /home2, /mnt/depot/newhome&lt;br /&gt;[backup-tools]&lt;br /&gt;# Path of the backup tools&lt;br /&gt;path = /usr/lib/mmc/backup-tools&lt;br /&gt;# Where are put the archives&lt;br /&gt;destpath = /home/samba/archives&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;17.2 MMC Mail-Plugin Configuration&lt;/h4&gt; &lt;p&gt;Edit MMC mail-plugin configuration file.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/mmc/plugins/mail.ini&lt;/p&gt;  &lt;p&gt;Edit the vDomainDN that it fits to your domain, comment the line for postfix delivery and comment out the line for dovecot delivery - the content should look like this:&lt;/p&gt;  &lt;pre&gt;[main]&lt;br /&gt;disable = 0&lt;br /&gt;# Enable virtual domain support&lt;br /&gt;vDomainSupport = 0&lt;br /&gt;# If vdomain enabled, OU where the domain are stored&lt;br /&gt;vDomainDN = ou=mailDomains, dc=example, dc=com&lt;br /&gt;[userDefault]&lt;br /&gt;# For Postfix delivery&lt;br /&gt;# mailbox = %homeDirectory%/Maildir/&lt;br /&gt;# For Dovecot delivery&lt;br /&gt;mailbox = maildir:%homeDirectory%/Maildir/&lt;br /&gt;# Default quota (200 MBytes) set for user&lt;br /&gt;mailuserquota = 204800&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;17.3 MMC Network-Plugin Configuration&lt;/h4&gt; &lt;p&gt;Edit MMC network-plugin configuration file.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/mmc/plugins/network.ini&lt;/p&gt;  &lt;p&gt;Edit the domain name that it fits to your domain - the content should look like this:&lt;/p&gt;  &lt;pre&gt;[main]&lt;br /&gt;disable = 0&lt;br /&gt;[dhcp]&lt;br /&gt;dn = ou=DHCP,dc=example,dc=com&lt;br /&gt;pidfile = /var/run/dhcpd.pid&lt;br /&gt;init = /etc/init.d/dhcp3-server&lt;br /&gt;logfile = /var/log/daemon.log&lt;br /&gt;leases = /var/lib/dhcp3/dhcpd.leases&lt;br /&gt;[dns]&lt;br /&gt;dn = ou=DNS,dc=example,dc=com&lt;br /&gt;pidfile = /var/run/bind/run/named.pid&lt;br /&gt;init = /etc/init.d/bind9&lt;br /&gt;logfile = /var/log/daemon.log&lt;br /&gt;bindroot = /etc/bind/&lt;br /&gt;binduser = bind&lt;br /&gt;# dnsreader = DNS Reader&lt;br /&gt;# dnsreaderpassword = DNSReaderPassword&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;18 MMC Agent Initial Start&lt;/h3&gt; &lt;p&gt;At this point the mmc-agent is ready for the initial start.&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/mmc-agent start&lt;/p&gt;  &lt;p&gt;During the first startup the mmc-agent writes some bind and dhcp related settings into the LDAP - so you have to restart bind (the dhcp-server is not running at the moment).&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/bind9 restart&lt;/p&gt;&lt;br /&gt;&lt;p style="text-align: center;" class="command"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/11-amavisd-postfix-will-pass-incomming.html"&gt;Previous &lt;/a&gt;|| &lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_2008.html"&gt;Next&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="command"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-7389924226497085205?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7389924226497085205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7389924226497085205'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_7337.html' title='Mandriva Directory Server On Debian Etch - Page 5'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8508630354206462999</id><published>2008-02-18T22:54:00.003-07:00</published><updated>2008-02-18T23:39:53.381-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Mandriva Directory Server On Debian Etch - Page 4</title><content type='html'>&lt;h3&gt;11 Amavisd&lt;/h3&gt; &lt;p&gt;Postfix will pass incomming mails to Amavis. Amavis on the other hand will pass them to Spamassassin an ClamAV. After the mails have been checked they'll be passed back to Postfix. Configure Amavis as follows.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/amavis/conf.d/15-content_filter_mode&lt;/p&gt;  &lt;p&gt;It should look like this:&lt;/p&gt;  &lt;pre&gt;use strict;&lt;br /&gt;@bypass_virus_checks_maps = (&lt;br /&gt;\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);&lt;br /&gt;@bypass_spam_checks_maps = (&lt;br /&gt;\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);&lt;br /&gt;1;&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p class="command"&gt;vi /etc/amavis/conf.d/50-user&lt;/p&gt;  &lt;p&gt;It should look like this:&lt;/p&gt;  &lt;pre&gt;use strict;&lt;br /&gt;$pax='pax';&lt;br /&gt;1;&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Afterwards add the user clamav to the amavis group and restart amavis &amp;amp; ClamAV.&lt;/p&gt;  &lt;p class="command"&gt;adduser clamav amavis&lt;br /&gt;/etc/init.d/amavis restart&lt;br /&gt;/etc/init.d/clamav-daemon restart&lt;br /&gt;/etc/init.d/clamav-freshclam restart&lt;/p&gt;&lt;h3&gt;12 Spamassassin&lt;/h3&gt; &lt;p&gt;In this step you'll enable additional plugins to increase spam detection.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/spamassassin/local.cf&lt;/p&gt;  &lt;p&gt;Add the following content to the file:&lt;/p&gt;  &lt;p class="system"&gt;# dcc&lt;br /&gt;use_dcc 1&lt;br /&gt;dcc_path /usr/bin/dccproc&lt;/p&gt;  &lt;p class="system"&gt;#pyzor&lt;br /&gt;use_pyzor 1&lt;br /&gt;pyzor_path /usr/bin/pyzor&lt;/p&gt;  &lt;p class="system"&gt;#razor&lt;br /&gt;use_razor2 1&lt;br /&gt;razor_config /etc/razor/razor-agent.conf&lt;/p&gt;  &lt;p class="system"&gt;#bayes&lt;br /&gt;use_bayes 1&lt;br /&gt;use_bayes_rules 1&lt;br /&gt;bayes_auto_learn 1&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/spamassassin/v310.pre&lt;/p&gt;  &lt;p&gt;Uncomment the line for the dcc-plugin. It should look like this:&lt;/p&gt;  &lt;pre&gt;loadplugin Mail::SpamAssassin::Plugin::DCC&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::Pyzor&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::Razor2&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::SpamCop&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::AWL&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::MIMEHeader&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::ReplaceTags&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Now configure spamassassin to run as daemon.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/default/spamassassin&lt;/p&gt;  &lt;p&gt;Set &lt;span class="system"&gt;ENABLED=1&lt;/span&gt;. It should look like this:&lt;/p&gt;  &lt;pre&gt;ENABLED=1&lt;br /&gt;OPTIONS="--create-prefs --max-children 5 --helper-home-dir"&lt;br /&gt;PIDFILE="/var/run/spamd.pid"&lt;br /&gt;#NICE="--nicelevel 15"&lt;br /&gt;CRON=0&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Afterwards start spamassassin and restart amavis.&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/spamassassin start&lt;br /&gt;/etc/init.d/amavis restart&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;13 BIND Configuration&lt;/h3&gt; &lt;p&gt;First copy a customized configuration file into the bind directory.&lt;/p&gt;  &lt;p class="command"&gt;cp /usr/share/doc/python-mmc-base/contrib/bind/named.conf /etc/bind/&lt;/p&gt;  &lt;p&gt;Afterwards we change the slapd starting point that it starts before bind.&lt;/p&gt;  &lt;p class="command"&gt;update-rc.d -f slapd remove &amp;amp;&amp;amp; update-rc.d slapd start 14 2 3 4 5 . stop 86 0 1 6 .&lt;/p&gt;  &lt;p&gt;Edit the resolv configuration.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/resolv.conf&lt;/p&gt;  &lt;p&gt;It should look like this:&lt;/p&gt;  &lt;pre&gt;nameserver 127.0.0.1&lt;br /&gt;nameserver 192.168.0.2&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;14 DHCP Configuration&lt;/h3&gt; &lt;p&gt;First copy the customized configuration file into the dhcp3 directory.&lt;/p&gt;  &lt;p class="command"&gt;cp /usr/share/doc/python-mmc-base/contrib/dhcpd/dhcpd.conf /etc/dhcp3/&lt;br /&gt;vi /etc/dhcp3/dhcpd.conf&lt;/p&gt;  &lt;p&gt;Edit the file that it fits to your needs - it should look like this:&lt;/p&gt;  &lt;pre&gt;ldap-server "localhost";&lt;br /&gt;ldap-port 389;&lt;br /&gt;ldap-username "cn=admin, dc=example, dc=com";&lt;br /&gt;ldap-password "howtoforge";&lt;br /&gt;ldap-base-dn "dc=example, dc=com";&lt;br /&gt;ldap-method dynamic;&lt;br /&gt;ldap-debug-file "/var/log/dhcp-ldap-startup.log";&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;15 SquidGuard/Squid Configuration&lt;/h3&gt; &lt;p&gt;Squid with SquidGuard will be used to disable the accessibility of selected websites.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h4&gt;15.1 Configuration Files&lt;/h4&gt; &lt;h4&gt;15.1.1 SquidGuard&lt;/h4&gt; &lt;p&gt;Copy the example configuration file into the squid directory, create an empty bad-domins-list (otherwise the mmc-proxy-plugin won't load) and edit the configuration file.&lt;/p&gt;  &lt;p class="command"&gt;cp /usr/share/doc/python-mmc-base/contrib/proxy/squidGuard.conf /etc/squid/&lt;br /&gt;touch /var/lib/squidguard/db/bad.destdomainlist&lt;br /&gt;vi /etc/squid/squidGuard.conf&lt;/p&gt;  &lt;p&gt;Change the line for the redirect that it looks like this:&lt;/p&gt;  &lt;p class="system"&gt;redirect http://blocked.example.com/squidGuard.cgi?clientaddr=%a&amp;amp;srcclass=%s&amp;amp;targetclass=%t&amp;amp;url=%u&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;15.1.2 Squid&lt;/h4&gt; &lt;p&gt;First rename the configuration file, create a new one without comments (the original configuration file has more than 4000 lines) and edit it.&lt;/p&gt;  &lt;p class="command"&gt;cd /etc/squid/&lt;br /&gt;mv squid.conf squid.conf.orig&lt;br /&gt;cat squid.conf.orig | egrep "^[^#]" &gt; squid.conf&lt;br /&gt;vi squid.conf&lt;/p&gt;  &lt;p&gt;Comment ...&lt;/p&gt;  &lt;p&gt;&lt;span class="system"&gt;http_access allow localhost&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;... and add the following lines to the configuration:&lt;/p&gt;  &lt;p&gt;&lt;span class="system"&gt;redirect_program /usr/bin/squidGuard&lt;br /&gt;acl SSL_ports port 3128&lt;br /&gt;acl our_networks src 192.168.0.0/24&lt;br /&gt;http_access allow our_networks&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Restart squid&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/squid restart&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;15.2 Redirect VHost&lt;/h4&gt; &lt;p&gt;When users want to visit websites that you have disabled, they'll be redirected to &lt;span class="system"&gt;blocked.example.com&lt;/span&gt;. Create the directory for the VHost, put the squidGuard.cgi into it and make it executable.&lt;/p&gt;  &lt;p class="command"&gt;mkdir /var/www/squidguard/&lt;br /&gt;zcat /usr/share/doc/squidguard/examples/squidGuard.cgi.gz &gt; /var/www/squidguard/squidGuard.cgi&lt;br /&gt;chmod +x /var/www/squidguard/squidGuard.cgi&lt;/p&gt;  &lt;p&gt;Afterwards create a VHost for the redirection.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/apache2/sites-available/http&lt;/p&gt;  &lt;p&gt;Add this configuration:&lt;/p&gt;  &lt;p class="system"&gt;NameVirtualHost 192.168.0.100:80&lt;/p&gt;  &lt;p class="system"&gt;&lt;virtualhost&gt;&lt;/virtualhost&gt;&lt;/p&gt;  &lt;p class="system"&gt;   ServerName blocked.example.com&lt;br /&gt; ServerAdmin Administrator@example.com&lt;br /&gt; DocumentRoot /var/www/squidguard/&lt;/p&gt;  &lt;p class="system"&gt;   AddHandler cgi-script .cgi&lt;/p&gt;  &lt;p class="system"&gt;   &lt;directory&gt;&lt;br /&gt;     AllowOverride None&lt;br /&gt;     Options ExecCGI&lt;br /&gt;     Order allow,deny&lt;br /&gt;     Allow from 192.168.0.0/24&lt;br /&gt; &lt;/directory&gt;&lt;/p&gt;  &lt;p class="system"&gt;   ErrorLog /var/log/apache2/squidguard_error.log&lt;br /&gt; CustomLog /var/log/apache2/squidguard_access.log combined&lt;br /&gt; LogLevel warn&lt;/p&gt;  &lt;p class="system"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="text-align: center;" class="command"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_6098.html"&gt;Previous &lt;/a&gt;|| &lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_7337.html"&gt;Next&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="command"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-8508630354206462999?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8508630354206462999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8508630354206462999'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/11-amavisd-postfix-will-pass-incomming.html' title='Mandriva Directory Server On Debian Etch - Page 4'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-5251597562840268637</id><published>2008-02-18T22:49:00.001-07:00</published><updated>2008-02-18T23:33:19.415-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Mandriva Directory Server On Debian Etch - Page 3</title><content type='html'>&lt;h3&gt;8 SASL Configuration&lt;/h3&gt; &lt;p&gt;Postfix will use SASL to authenticate users against the LDAP server.&lt;/p&gt;  &lt;p class="command"&gt;mkdir -p /var/spool/postfix/var/run/saslauthd/&lt;/p&gt;  &lt;p&gt;Adjust the default settings.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/default/saslauthd&lt;/p&gt;  &lt;p&gt;It should look like this:&lt;/p&gt;  &lt;pre&gt;START=yes&lt;br /&gt;MECHANISMS="ldap"&lt;br /&gt;MECH_OPTIONS=""&lt;br /&gt;THREADS=5&lt;br /&gt;OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;p class="command"&gt;vi /etc/saslauthd.conf&lt;/p&gt;  &lt;p&gt;It should look like this:&lt;/p&gt;  &lt;pre&gt;ldap_servers: ldap://127.0.0.1&lt;br /&gt;ldap_search_base: ou=Users,dc=example,dc=com&lt;br /&gt;ldap_filter: (&amp;amp;(objectClass=mailAccount)(mail=%u@%r)(mailenable=OK))&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p class="command"&gt;vi /etc/postfix/sasl/smtpd.conf&lt;/p&gt;  &lt;p&gt; It should look like this:&lt;/p&gt;  &lt;pre&gt;pwcheck_method: saslauthd&lt;br /&gt;&lt;br /&gt;mech_list: plain login&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Add Postfix to the SASL group ...&lt;/p&gt;  &lt;p class="command"&gt;adduser postfix sasl&lt;/p&gt;  &lt;p&gt;... and restart SASL.&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/saslauthd restart&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;9 Postfix Configuration&lt;/h3&gt; &lt;h4&gt;9.1 Example Configuration&lt;/h4&gt; For this setup I chose the configuration without virtual domains - maybe I'll add the needed steps for a virtual domain setup in the near future. First copy the example configuration file into the postfix directory. It's the base for the following configuration.&lt;br /&gt;&lt;p class="command"&gt;cp /usr/share/doc/python-mmc-base/contrib/postfix/no-virtual-domain/* /etc/postfix/&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;9.2 Main Configuration&lt;/h4&gt; &lt;p&gt;First adjust the main configuration file.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/postfix/main.cf&lt;/p&gt;  &lt;p&gt;Edit the file that it fits to your domain and additionally add some restrictions and the authentication settings - the content should look like this:&lt;/p&gt;  &lt;pre&gt;# See /usr/share/postfix/main.cf.dist for a commented, more complete version&lt;br /&gt;smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)&lt;br /&gt;biff = no&lt;br /&gt;&lt;br /&gt;# appending .domain is the MUA's job.&lt;br /&gt;append_dot_mydomain = yes&lt;br /&gt;append_at_myorigin = yes&lt;br /&gt;&lt;br /&gt;# Uncomment the next line to generate "delayed mail" warnings&lt;br /&gt;#delay_warning_time = 4h&lt;br /&gt;&lt;br /&gt;myhostname = server1.example.com&lt;br /&gt;mydomain = example.com&lt;br /&gt;alias_maps = ldap:/etc/postfix/ldap-aliases.cf,  hash:/etc/aliases&lt;br /&gt;alias_database = hash:/etc/aliases&lt;br /&gt;myorigin = /etc/mailname&lt;br /&gt;mydestination = server1.example.com,example.com,localhost.localdomain,localhost&lt;br /&gt;mail_destination_recipient_limit = 1&lt;br /&gt;mailbox_command = /usr/lib/dovecot/deliver -d "$USER"@"$DOMAIN"&lt;br /&gt;relayhost =&lt;br /&gt;mynetworks = 127.0.0.0/8&lt;br /&gt;mailbox_size_limit = 0&lt;br /&gt;recipient_delimiter = +&lt;br /&gt;inet_interfaces = all&lt;br /&gt;&lt;br /&gt;# Use Maildir&lt;br /&gt;home_mailbox = Maildir/&lt;br /&gt;&lt;br /&gt;# Wait until the RCPT TO command before evaluating restrictions&lt;br /&gt;smtpd_delay_reject = yes&lt;br /&gt;&lt;br /&gt;# Basics Restrictions&lt;br /&gt;smtpd_helo_required = yes&lt;br /&gt;strict_rfc821_envelopes = yes&lt;br /&gt;&lt;br /&gt;# Requirements for the connecting server&lt;br /&gt;smtpd_client_restrictions =&lt;br /&gt;  permit_mynetworks,&lt;br /&gt;  permit_sasl_authenticated,&lt;br /&gt;  reject_rbl_client bl.spamcop.net,&lt;br /&gt;  reject_rbl_client dnsbl.njabl.org,&lt;br /&gt;  reject_rbl_client cbl.abuseat.org,&lt;br /&gt;  reject_rbl_client sbl-xbl.spamhaus.org,&lt;br /&gt;  reject_rbl_client list.dsbl.org,&lt;br /&gt;  permit&lt;br /&gt;&lt;br /&gt;# Requirements for the HELO statement&lt;br /&gt;smtpd_helo_restrictions =&lt;br /&gt;  permit_mynetworks,&lt;br /&gt;  permit_sasl_authenticated,&lt;br /&gt;  reject_non_fqdn_hostname,&lt;br /&gt;  reject_invalid_hostname,&lt;br /&gt;  permit&lt;br /&gt;&lt;br /&gt;# Requirements for the sender address&lt;br /&gt;smtpd_sender_restrictions =&lt;br /&gt;  permit_mynetworks,&lt;br /&gt;  permit_sasl_authenticated,&lt;br /&gt;  reject_non_fqdn_sender,&lt;br /&gt;  reject_unknown_sender_domain,&lt;br /&gt;  permit&lt;br /&gt;&lt;br /&gt;# Requirement for the recipient address&lt;br /&gt;smtpd_recipient_restrictions =&lt;br /&gt;  permit_mynetworks,&lt;br /&gt;  permit_sasl_authenticated,&lt;br /&gt;  reject_non_fqdn_recipient,&lt;br /&gt;  reject_unknown_recipient_domain,&lt;br /&gt;  reject_unauth_destination,&lt;br /&gt;  permit&lt;br /&gt;&lt;br /&gt;# Enable SASL authentication for the smtpd daemon&lt;br /&gt;smtpd_sasl_auth_enable = yes&lt;br /&gt;smtpd_sasl_type = dovecot&lt;br /&gt;smtpd_sasl_path = private/auth&lt;br /&gt;&lt;br /&gt;# Fix for outlook&lt;br /&gt;broken_sasl_auth_clients = yes&lt;br /&gt;&lt;br /&gt;# Reject anonymous connections&lt;br /&gt;smtpd_sasl_security_options = noanonymous&lt;br /&gt;smtpd_sasl_local_domain =&lt;br /&gt;&lt;br /&gt;# SSL/TLS&lt;br /&gt;smtpd_tls_security_level = may&lt;br /&gt;smtpd_tls_loglevel = 1&lt;br /&gt;smtpd_tls_cert_file = /etc/ssl/certs/mail.pem&lt;br /&gt;smtpd_tls_key_file = /etc/ssl/private/mail.key&lt;br /&gt;smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache&lt;br /&gt;&lt;br /&gt;# Amavis&lt;br /&gt;content_filter = amavis:[127.0.0.1]:10024&lt;br /&gt;receive_override_options = no_address_mappings&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;9.3 LDAP Aliases Configuration&lt;/h4&gt; &lt;p&gt;Now you have to edit the aliases configuration.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/postfix/ldap-aliases.cf&lt;/p&gt;  &lt;p&gt;Edit the file that it fits to your domain - it should look like this:&lt;/p&gt;  &lt;pre&gt;server_host = 127.0.0.1&lt;br /&gt;search_base = ou=Users,dc=example,dc=com&lt;br /&gt;query_filter = (&amp;amp;(objectClass=mailAccount)(mailalias=%s)(mailenable=OK))&lt;br /&gt;result_attribute = maildrop&lt;br /&gt;version = 3&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;9.4 Master Configuration&lt;/h4&gt; &lt;p&gt;The master configuration is the last part of the postfix configuration.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/postfix/master.cf&lt;/p&gt;  &lt;p&gt;Add the following lines:&lt;/p&gt;  &lt;p class="system"&gt;# SMTPS&lt;br /&gt;smtps     inet  n       -       -       -       -      smtpd&lt;br /&gt;  -o smtpd_tls_wrappermode=yes&lt;br /&gt;  -o smtpd_sasl_auth_enable=yes&lt;/p&gt;  &lt;p class="system"&gt;# Dovecot&lt;br /&gt;dovecot   unix  -       n       n       -       -      pipe&lt;br /&gt;  flags=DRhu user=dovecot:mail argv=/usr/lib/dovecot/deliver -d $recipient&lt;/p&gt;  &lt;p class="system"&gt;# Mail to Amavis&lt;br /&gt;amavis unix     -       -       -       -       10     smtp&lt;br /&gt;  -o smtp_data_done_timeout=1200&lt;br /&gt;  -o smtp_send_xforward_command=yes&lt;br /&gt;  -o disable_dns_lookups=yes&lt;br /&gt;  -o max_use=20&lt;/p&gt;  &lt;p class="system"&gt;# Mail from Amavis&lt;br /&gt;127.0.0.1:10025 inet n  -       -       -       -      smtpd&lt;br /&gt;  -o content_filter=&lt;br /&gt;  -o local_recipient_maps=&lt;br /&gt;  -o relay_recipient_maps=&lt;br /&gt;  -o smtpd_restriction_classes=&lt;br /&gt;  -o smtpd_delay_reject=no&lt;br /&gt;  -o smtpd_client_restrictions=permit_mynetworks,reject&lt;br /&gt;  -o smtpd_helo_restrictions=&lt;br /&gt;  -o smtpd_sender_restrictions=&lt;br /&gt;  -o smtpd_recipient_restrictions=permit_mynetworks,reject&lt;br /&gt;  -o smtpd_data_restrictions=reject_unauth_pipelining&lt;br /&gt;  -o smtpd_end_of_data_restrictions=&lt;br /&gt;  -o mynetworks=127.0.0.0/8&lt;br /&gt;  -o smtpd_error_sleep_time=0&lt;br /&gt;  -o smtpd_soft_error_limit=1001&lt;br /&gt;  -o smtpd_hard_error_limit=1000&lt;br /&gt;  -o smtpd_client_connection_count_limit=0&lt;br /&gt;  -o smtpd_client_connection_rate_limit=0&lt;br /&gt;  -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks&lt;/p&gt;  &lt;p&gt;Restart Postfix:&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/postfix restart&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;10 Dovecot&lt;/h3&gt; &lt;p&gt;Dovecot will provide POP3- (SSL/TLS), IMAP- (SSL/TLS) and quota-support to the mailserver.&lt;/p&gt;  &lt;h4&gt;10.1 Main Configuration&lt;/h4&gt; &lt;p class="command"&gt;echo "" &gt; /etc/dovecot/dovecot.conf&lt;br /&gt;vi /etc/dovecot/dovecot.conf&lt;/p&gt;  &lt;p&gt;The content should look like this:&lt;/p&gt;  &lt;pre&gt;protocols = imap imaps pop3 pop3s&lt;br /&gt;listen = 0.0.0.0&lt;br /&gt;login_greeting = example.com mailserver ready.&lt;br /&gt;mail_location = maildir:~/Maildir&lt;br /&gt;disable_plaintext_auth = no&lt;br /&gt;ssl_cert_file = /etc/ssl/certs/mail.pem&lt;br /&gt;ssl_key_file = /etc/ssl/private/mail.key&lt;br /&gt;log_path = /var/log/dovecot.log&lt;br /&gt;info_log_path = /var/log/dovecot.log&lt;br /&gt;&lt;br /&gt;# IMAP configuration&lt;br /&gt;protocol imap {&lt;br /&gt;  mail_plugins = quota imap_quota&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# POP3 configuration&lt;br /&gt;protocol pop3 {&lt;br /&gt;  pop3_uidl_format = %08Xu%08Xv&lt;br /&gt;  mail_plugins = quota&lt;br /&gt;}&lt;br /&gt;         &lt;br /&gt;# LDA configuration&lt;br /&gt;protocol lda {&lt;br /&gt;  postmaster_address = postmaster&lt;br /&gt;  auth_socket_path = /var/run/dovecot/auth-master&lt;br /&gt;  mail_plugins = quota&lt;br /&gt;}&lt;br /&gt;                                     &lt;br /&gt;# LDAP authentication&lt;br /&gt;&lt;br /&gt;auth default {&lt;br /&gt;  mechanisms = plain login&lt;br /&gt;&lt;br /&gt;  passdb ldap {&lt;br /&gt;      args = /etc/dovecot/dovecot-ldap.conf&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  userdb ldap {&lt;br /&gt;      args = /etc/dovecot/dovecot-ldap.conf&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  socket listen {&lt;br /&gt;      master {&lt;br /&gt;          path = /var/run/dovecot/auth-master&lt;br /&gt;          mode = 0660&lt;br /&gt;          user = dovecot&lt;br /&gt;          group = mail&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      client {&lt;br /&gt;          path = /var/spool/postfix/private/auth&lt;br /&gt;          mode = 0660&lt;br /&gt;          user = postfix&lt;br /&gt;          group = postfix&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;10.2 LDAP Configuration&lt;/h4&gt; &lt;p class="command"&gt;echo "" &gt; /etc/dovecot/dovecot-ldap.conf&lt;br /&gt;vi /etc/dovecot/dovecot-ldap.conf&lt;/p&gt;  &lt;p&gt;The content should look like this:&lt;/p&gt;  &lt;pre&gt;hosts = 127.0.0.1&lt;br /&gt;auth_bind = yes&lt;br /&gt;ldap_version = 3&lt;br /&gt;base = dc=example,dc=com&lt;br /&gt;scope = subtree&lt;br /&gt;user_attrs = homeDirectory=home,uidNumber=uid,mailbox=mail,mailuserquota=quota=maildir:storage&lt;br /&gt;user_filter = (&amp;amp;(objectClass=mailAccount)(mail=%u)(mailenable=OK))&lt;br /&gt;pass_attrs = mail=user,userPassword=password&lt;br /&gt;pass_filter = (&amp;amp;(objectClass=mailAccount)(mail=%u)(mailenable=OK))&lt;br /&gt;default_pass_scheme = CRYPT&lt;br /&gt;user_global_gid = mail&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;10.3 Deliver&lt;/h4&gt; &lt;p&gt;Next adjust the rights for the dovecot deliver - so dovecot will use the right uid and gid when it stores messages in the maildirs.&lt;/p&gt;  &lt;p class="command"&gt;dpkg-statoverride --update --add root dovecot 4755  /usr/lib/dovecot/deliver&lt;/p&gt;  &lt;p&gt;Afterwards restart Dovecot.&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/dovecot restart&lt;/p&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_18.html"&gt;Previous &lt;/a&gt;|| &lt;a href="http://linuxtomorrow.blogspot.com/2008/02/11-amavisd-postfix-will-pass-incomming.html"&gt;Next&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-5251597562840268637?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/5251597562840268637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/5251597562840268637'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_6098.html' title='Mandriva Directory Server On Debian Etch - Page 3'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-3803678748476492273</id><published>2008-02-18T22:44:00.002-07:00</published><updated>2008-02-18T23:37:17.764-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Mandriva Directory Server On Debian Etch - Page 2</title><content type='html'>&lt;h3&gt;5 SAMBA&lt;/h3&gt; &lt;h4&gt;5.1 Basic Configuration&lt;/h4&gt; &lt;p&gt;First stop SAMBA.&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/samba stop&lt;/p&gt;  &lt;p&gt;Copy the example SAMBA configuration file into the SAMBA directory ...&lt;/p&gt;  &lt;p class="command"&gt;cp /usr/share/doc/python-mmc-base/contrib/samba/smb.conf /etc/samba/&lt;/p&gt;  &lt;p&gt;... and adjust it to your needs.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/samba/smb.conf&lt;/p&gt;  &lt;p&gt;Set the following values in the section [global]:&lt;/p&gt;  &lt;p&gt;workgroup = &lt;span class="system"&gt;EXAMPLE&lt;/span&gt;&lt;br /&gt;netbiosname = &lt;span class="system"&gt;PDC-SRV-EXAMPLE&lt;/span&gt;&lt;br /&gt;ldap admin dn = &lt;span class="system"&gt;cn=admin,dc=example,dc=com&lt;/span&gt;&lt;br /&gt;ldap suffix = &lt;span class="system"&gt;dc=example,dc=com&lt;/span&gt;&lt;br /&gt;logon path = &lt;span class="system"&gt;\\%N\profiles\%U&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Add the following lines to the section [global]:&lt;/p&gt;  &lt;p&gt;&lt;span class="system"&gt;preferred master = yes&lt;br /&gt;os level = 65&lt;br /&gt;wins support = yes&lt;br /&gt;timeserver = yes&lt;br /&gt;socket options = SO_KEEPALIVE IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192&lt;br /&gt;logon drive = H:&lt;br /&gt;passwd program = /usr/sbin/smbldap-passwd -u %u&lt;br /&gt;passwd chat = "Changing password for*\nNew password*" %n\n "*Retype new password*" %n\n&lt;br /&gt;add user script = /usr/sbin/smbldap-useradd -m "%u"&lt;br /&gt;add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"&lt;br /&gt;set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"&lt;br /&gt;add group script = /usr/sbin/ambldap-groupadd -p "%g"&lt;br /&gt;delete user script = /usr/sbin/smbldap-userdel "%u"&lt;br /&gt;delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"&lt;br /&gt;delete group script = /usr/sbin/smbldap-groupdel "%g"&lt;br /&gt;obey pam restrictions = no&lt;br /&gt;ldap idmap suffix = ou=Users&lt;br /&gt;ldap delete dn = yes&lt;br /&gt;security = user&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Add the following line to the section [homes]:&lt;/p&gt;&lt;p class="system"&gt;hide files = /Maildir/&lt;/p&gt;  &lt;p&gt;Remove the following line from the sections [printers] and [print$]:&lt;/p&gt;  &lt;p class="system"&gt;printer admin = root,@lpadmin&lt;/p&gt;  &lt;p&gt;Set the following values in the section [print$]:&lt;/p&gt;  &lt;p&gt;write list = &lt;span class="system"&gt;Administrator,root,@lpadmin&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Add the following line to the section [profiles]:&lt;/p&gt;  &lt;p class="system"&gt;hide files = /desktop.ini/ntuser.ini/NTUSER.*/&lt;/p&gt;  &lt;p&gt;Set the following values in the section [archives]:&lt;/p&gt;  &lt;p&gt;path = &lt;span class="system"&gt;/home/samba/archives&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;At this point the SAMBA configuration file should look like this:&lt;/p&gt;  &lt;pre&gt;     [global]&lt;br /&gt;      workgroup = EXAMPLE&lt;br /&gt;      netbiosname = PDC-SRV-EXAMPLE&lt;br /&gt;      preferred master = yes&lt;br /&gt;      os level = 65&lt;br /&gt;      wins support = yes&lt;br /&gt;      enable privileges = yes&lt;br /&gt;      timeserver = yes&lt;br /&gt;      socket options = SO_KEEPALIVE IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192&lt;br /&gt;      log level = 3&lt;br /&gt;      null passwords = yes&lt;br /&gt;      security = user&lt;br /&gt;      # unix charset = ISO8859-1&lt;br /&gt;      name resolve order = bcast host&lt;br /&gt;      domain logons = yes&lt;br /&gt;      domain master = yes&lt;br /&gt;      printing = cups&lt;br /&gt;      printcap name = cups&lt;br /&gt;      logon path = \\%N\profiles\%U&lt;br /&gt;      logon script = logon.bat&lt;br /&gt;      logon drive = H:&lt;br /&gt;      map acl inherit = yes&lt;br /&gt;      nt acl support = yes&lt;br /&gt;      passdb backend = ldapsam:ldap://127.0.0.1/&lt;br /&gt;      obey pam restrictions = no&lt;br /&gt;&lt;br /&gt;      ldap admin dn = cn=admin,dc=example,dc=com&lt;br /&gt;      ldap suffix = dc=example,dc=com&lt;br /&gt;      ldap group suffix = ou=Groups&lt;br /&gt;      ldap user suffix = ou=Users&lt;br /&gt;      ldap machine suffix = ou=Computers&lt;br /&gt;      ldap idmap suffix = ou=Users&lt;br /&gt;      ldap passwd sync = yes&lt;br /&gt;      ldap delete dn = yes&lt;br /&gt;&lt;br /&gt;      passwd program = /usr/sbin/smbldap-passwd -u %u&lt;br /&gt;      passwd chat = "Changing password for*\nNew password*" %n\n "*Retype new password*" %n\n&lt;br /&gt;   &lt;br /&gt;add user script = /usr/sbin/smbldap-useradd -m "%u"&lt;br /&gt;      add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"&lt;br /&gt;      set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"&lt;br /&gt;      add group script = /usr/sbin/ambldap-groupadd -p "%g"&lt;br /&gt;      add machine script = /usr/lib/mmc/add_machine_script '%u'&lt;br /&gt;      delete user script = /usr/sbin/smbldap-userdel "%u"&lt;br /&gt;      delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"&lt;br /&gt;      delete group script = /usr/sbin/smbldap-groupdel "%g"&lt;br /&gt;&lt;br /&gt;   [homes]&lt;br /&gt;      comment = Home directories&lt;br /&gt;      browseable = no&lt;br /&gt;      writeable = yes&lt;br /&gt;      create mask = 0700&lt;br /&gt;      directory mask = 0700&lt;br /&gt;hide files = /Maildir/&lt;br /&gt;&lt;br /&gt;   [public]&lt;br /&gt;      comment = Public share&lt;br /&gt;      path = /home/samba/shares/public&lt;br /&gt;      browseable = yes&lt;br /&gt;      public = yes&lt;br /&gt;      writeable = yes&lt;br /&gt;&lt;br /&gt;   [archives]&lt;br /&gt;      comment = Backup share&lt;br /&gt;      path = /home/samba/archives&lt;br /&gt;      browseable = yes&lt;br /&gt;      public = no&lt;br /&gt;      writeable = no&lt;br /&gt;&lt;br /&gt;   [printers]&lt;br /&gt;      comment = Printers&lt;br /&gt;      path = /tmp&lt;br /&gt;      browseable = no&lt;br /&gt;      public = yes&lt;br /&gt;      guest ok = yes&lt;br /&gt;      writeable = no&lt;br /&gt;      printable = yes&lt;br /&gt;&lt;br /&gt;   [print$]&lt;br /&gt;      comment = Drivers&lt;br /&gt;      path = /var/lib/samba/printers&lt;br /&gt;      browseable = yes&lt;br /&gt;      guest ok = yes&lt;br /&gt;      read only = yes&lt;br /&gt;      write list = Administrator,root,@lpadmin&lt;br /&gt;&lt;br /&gt;   [netlogon]&lt;br /&gt;      path = /home/samba/netlogon&lt;br /&gt;      public = no&lt;br /&gt;      writeable = no&lt;br /&gt;      browseable = no&lt;br /&gt;&lt;br /&gt;   [profiles]&lt;br /&gt;      path = /home/samba/profiles&lt;br /&gt;      writeable = yes&lt;br /&gt;      create mask = 0700&lt;br /&gt;      directory mask = 0700&lt;br /&gt;      browseable = no&lt;br /&gt;      hide files = /desktop.ini/ntuser.ini/NTUSER.*/&lt;br /&gt;&lt;br /&gt;   [partage]&lt;br /&gt;      comment = aucun&lt;br /&gt;      path = /home/samba/partage&lt;br /&gt;      browseable = yes&lt;br /&gt;      public = no&lt;br /&gt;      writeable = yes&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p&gt;If all went ok, the command ...&lt;/p&gt;  &lt;p class="command"&gt;testparm&lt;/p&gt;  &lt;p&gt;... should give no errors.&lt;/p&gt;  &lt;p&gt;Now give SAMBA the needed credentials to write into the LDAP.&lt;/p&gt;  &lt;p class="command"&gt;smbpasswd -w %ldap_admin_password%&lt;/p&gt;  &lt;p&gt;E.g.:&lt;/p&gt;  &lt;p class="command"&gt;smbpasswd -w howtoforge&lt;/p&gt;  &lt;p&gt;The output should look like this:&lt;/p&gt;  &lt;p class="system"&gt;Setting stored password for "cn=admin,dc=example,dc=com" in secrets.tdb&lt;/p&gt;  &lt;p&gt;Next you need to create a SID for your workgroup.&lt;/p&gt;  &lt;p class="command"&gt;net getlocalsid %your_workgroup%&lt;/p&gt;  &lt;p&gt;E.g.:&lt;/p&gt;  &lt;p class="command"&gt;net getlocalsid EXAMPLE&lt;/p&gt;  &lt;p&gt;The output should look like this - note it down you'll need it in a few moments:&lt;/p&gt;  &lt;p class="system"&gt;SID for domain EXAMPLE is: S-1-5-21-3159899821-123882392-54881133&lt;/p&gt;  &lt;p&gt;Check if the SID has really been recorded into LDAP.&lt;/p&gt;  &lt;p class="command"&gt;slapcat | grep sambaDomainName&lt;/p&gt;  &lt;p&gt;The output should look like this:&lt;/p&gt;  &lt;p class="system"&gt;dn: sambaDomainName=EXAMPLE,dc=example,dc=com&lt;br /&gt;sambaDomainName: EXAMPLE&lt;/p&gt;  &lt;p&gt;Now start SAMBA&lt;/p&gt;  &lt;p class="command"&gt;/etc/init.d/samba start&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;5.2 LDAP Directory&lt;/h4&gt; &lt;p&gt;First you need to create the smbldap-tools configuration file - it defines how to communicate with the LDAP server.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/smbldap-tools/smbldap_bind.conf&lt;/p&gt;  &lt;p&gt;The content should look like this:&lt;/p&gt;  &lt;pre&gt;slaveDN="cn=admin,dc=example,dc=com"&lt;br /&gt;slavePw="howtoforge"&lt;br /&gt;masterDN="cn=admin,dc=example,dc=com"&lt;br /&gt;masterPw="howtoforge"&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now create the main configuration file.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/smbldap-tools/smbldap.conf&lt;/p&gt;  &lt;p&gt;The content should look like this (Replace the SID with your own!):&lt;/p&gt;  &lt;pre&gt;SID="S-1-5-21-3159899821-123882392-54881133"&lt;br /&gt;sambaDomain="EXAMPLE"&lt;br /&gt;ldapTLS="0"&lt;br /&gt;suffix="dc=example,dc=com"&lt;br /&gt;usersdn="ou=Users,${suffix}"&lt;br /&gt;computersdn="ou=Computers,${suffix}"&lt;br /&gt;groupsdn="ou=Groups,${suffix}"&lt;br /&gt;idmapdn="ou=Idmap,${suffix}"&lt;br /&gt;sambaUnixIdPooldn="sambaDomainName=EXAMPLE,${suffix}"&lt;br /&gt;scope="sub"&lt;br /&gt;hash_encrypt="SSHA"&lt;br /&gt;userLoginShell="/bin/bash"&lt;br /&gt;userHome="/home/%U"&lt;br /&gt;userHomeDirectoryMode="700"&lt;br /&gt;userGecos="System User"&lt;br /&gt;defaultUserGid="513"&lt;br /&gt;defaultComputerGid="515"&lt;br /&gt;skeletonDir="/etc/skel"&lt;br /&gt;defaultMaxPasswordAge="45"&lt;br /&gt;userSmbHome="\\PDC-SRV-EXAMPLE\%U"&lt;br /&gt;userProfile="\\PDC-SRV-EXAMPLE\profiles\%U"&lt;br /&gt;userHomeDrive="H:"&lt;br /&gt;userScript="logon.bat"&lt;br /&gt;mailDomain="example.com"&lt;br /&gt;smbpasswd="/usr/bin/smbpasswd"&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Time to populate the LDAP diretory. This will also create the domain administrator account (Administrator)&lt;/p&gt;  &lt;p class="command"&gt;smbldap-populate -m 512 -a Administrator&lt;/p&gt;  &lt;p&gt;Note: You'll be asked to enter a password for the domain administrator account.&lt;/p&gt;  &lt;p&gt;Afterwards you have to modify the uid-number for this account - otherwise you won't be able to use the mailserver with this account. Additionally we add this account to the group "Domain Users" :&lt;/p&gt;  &lt;p class="command"&gt;smbldap-usermod -u 3000 -G "Domain Users" Administrator&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;5.3 NSS LDAP Configuration&lt;/h4&gt; &lt;p&gt;In this step we configure the system to use the LDAP directory to get user and group lists.&lt;/p&gt;  &lt;p&gt;Edit the nsswitch configuration.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/nsswitch.conf&lt;/p&gt;  &lt;p&gt;The content should look like this:&lt;/p&gt;  &lt;pre&gt;# /etc/nsswitch.conf&lt;br /&gt;#&lt;br /&gt;# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;# If you have the `glibc-doc' and `info' packages installed, try:&lt;br /&gt;# `info libc "Name Service Switch"' for information about this file.&lt;br /&gt;passwd:         compat ldap&lt;br /&gt;group:          compat ldap&lt;br /&gt;shadow:         compat ldap&lt;br /&gt;hosts:          files dns&lt;br /&gt;networks:       files&lt;br /&gt;protocols:      db files&lt;br /&gt;services:       db files&lt;br /&gt;ethers:         db files&lt;br /&gt;rpc:            db files&lt;br /&gt;netgroup:       nis&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;5.4 SAMBA Directories&lt;/h4&gt; &lt;p&gt;Create the needed directories for the SAMBA server, ...&lt;/p&gt;  &lt;p class="command"&gt;mkdir -p /home/samba/shares/public/&lt;br /&gt;mkdir /home/samba/netlogon/&lt;br /&gt;mkdir /home/samba/profiles/&lt;br /&gt;mkdir /home/samba/partage/&lt;br /&gt;mkdir /home/samba/archives/&lt;/p&gt;  &lt;p&gt;... change the ownership and adjust the rights.&lt;/p&gt;  &lt;p class="command"&gt;chown -R :"Domain Users" /home/samba/&lt;br /&gt;chmod 777 /var/spool/samba/ /home/samba/shares/public/&lt;br /&gt;chmod 755 /home/samba/netlogon/&lt;br /&gt;chmod 770 /home/samba/profiles/ /home/samba/partage/&lt;br /&gt;chmod 700 /home/samba/archives/&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;6 PAM LDAP Configuration&lt;/h3&gt; &lt;p&gt;In this step you'll add LDAP-support to PAM.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/pam.d/common-account&lt;/p&gt;  &lt;p&gt;The content should look like this:&lt;/p&gt;  &lt;pre&gt;#&lt;br /&gt;# /etc/pam.d/common-account - authorization settings common to all services&lt;br /&gt;#&lt;br /&gt;# This file is included from other service-specific PAM config files,&lt;br /&gt;# and should contain a list of the authorization modules that define&lt;br /&gt;# the central access policy for use on the system.  The default is to&lt;br /&gt;# only deny service to users whose accounts are expired in /etc/shadow.&lt;br /&gt;#&lt;br /&gt;account required        pam_unix.so&lt;br /&gt;account sufficient      pam_ldap.so&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p class="command"&gt;vi /etc/pam.d/common-auth&lt;/p&gt;  &lt;p&gt;The content should look like this:&lt;/p&gt;  &lt;pre&gt;#&lt;br /&gt;# /etc/pam.d/common-auth - authentication settings common to all services&lt;br /&gt;#&lt;br /&gt;# This file is included from other service-specific PAM config files,&lt;br /&gt;# and should contain a list of the authentication modules that define&lt;br /&gt;# the central authentication scheme for use on the system&lt;br /&gt;# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the&lt;br /&gt;# traditional Unix authentication mechanisms.&lt;br /&gt;#&lt;br /&gt;auth    sufficient      pam_unix.so nullok_secure&lt;br /&gt;auth    sufficient      pam_ldap.so use_first_pass&lt;br /&gt;auth    required        pam_deny.so&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p class="command"&gt;vi /etc/pam.d/common-password&lt;/p&gt;  &lt;p&gt;The content should look like this:&lt;/p&gt;  &lt;pre&gt;#&lt;br /&gt;# /etc/pam.d/common-password - password-related modules common to all services&lt;br /&gt;#&lt;br /&gt;# This file is included from other service-specific PAM config files,&lt;br /&gt;# and should contain a list of modules that define  the services to be&lt;br /&gt;#used to change user passwords.  The default is pam_unix&lt;br /&gt;# The "nullok" option allows users to change an empty password, else&lt;br /&gt;# empty passwords are treated as locked accounts.&lt;br /&gt;#&lt;br /&gt;# (Add `md5' after the module name to enable MD5 passwords)&lt;br /&gt;#&lt;br /&gt;# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in&lt;br /&gt;# login.defs. Also the "min" and "max" options enforce the length of the&lt;br /&gt;# new password.&lt;br /&gt;password        sufficient      pam_unix.so nullok obscure min=4 max=8 md5&lt;br /&gt;password        sufficient      pam_ldap.so use_first_pass use_authtok&lt;br /&gt;password        required        pam_deny.so&lt;br /&gt;# Alternate strength checking for password. Note that this&lt;br /&gt;# requires the libpam-cracklib package to be installed.&lt;br /&gt;# You will need to comment out the password line above and&lt;br /&gt;# uncomment the next two in order to use this.&lt;br /&gt;# (Replaces the `OBSCURE_CHECKS_ENAB', `CRACKLIB_DICTPATH')&lt;br /&gt;#&lt;br /&gt;# password required       pam_cracklib.so retry=3 minlen=6 difok=3&lt;br /&gt;# password required       pam_unix.so use_authtok nullok md5&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;p class="command"&gt;vi /etc/pam.d/common-session&lt;/p&gt;  &lt;p&gt;The content should look like this:&lt;/p&gt;  &lt;pre&gt;#&lt;br /&gt;# /etc/pam.d/common-session - session-related modules common to all services&lt;br /&gt;#&lt;br /&gt;# This file is included from other service-specific PAM config files,&lt;br /&gt;# and should contain a list of modules that define tasks to be performed&lt;br /&gt;# at the start and end of sessions of *any* kind (both interactive and&lt;br /&gt;# non-interactive).  The default is pam_unix.&lt;br /&gt;#&lt;br /&gt;session required        pam_unix.so&lt;br /&gt;session optional        pam_ldap.so&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Afterwards reboot the system.&lt;/p&gt; &lt;p class="command"&gt;reboot&lt;/p&gt; &lt;p&gt;When the system is up again, give the group "Domain Admins" the right to add machines to the domain.&lt;/p&gt; &lt;p class="command"&gt;net -U Administrator rpc rights grant 'DOMAIN\Domain Admins' SeMachineAccountPrivilege&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;7 SSL For Mail&lt;/h3&gt; &lt;p&gt;First prepare a configuration file with the needed information.&lt;/p&gt;  &lt;p class="command"&gt;vi /etc/ssl/mail.cnf&lt;/p&gt;  &lt;p&gt;Add the following content:&lt;/p&gt;  &lt;pre&gt;[ req ]&lt;br /&gt;default_bits            = 2048&lt;br /&gt;default_keyfile         = privkey.pem&lt;br /&gt;distinguished_name      = req_distinguished_name&lt;br /&gt;prompt                  = no&lt;br /&gt;string_mask             = nombstr&lt;br /&gt;x509_extensions         = server_cert&lt;br /&gt;[ req_distinguished_name ]&lt;br /&gt;countryName             = DE&lt;br /&gt;stateOrProvinceName     = Niedersachsen&lt;br /&gt;localityName            = Lueneburg&lt;br /&gt;organizationName        = Projektfarm GmbH&lt;br /&gt;organizationalUnitName  = IT&lt;br /&gt;commonName              = server1.example.com&lt;br /&gt;emailAddress            = postmaster@example.com&lt;br /&gt;[ server_cert ]&lt;br /&gt;basicConstraints        = critical, CA:FALSE&lt;br /&gt;subjectKeyIdentifier    = hash&lt;br /&gt;keyUsage                = digitalSignature, keyEncipherment&lt;br /&gt;extendedKeyUsage        = serverAuth, clientAuth&lt;br /&gt;nsCertType              = server&lt;br /&gt;nsComment               = "mailserver"&lt;/pre&gt; &lt;p&gt;Now create the SSL certificate ...&lt;/p&gt;  &lt;p class="command"&gt;openssl req -x509 -new -config /etc/ssl/mail.cnf -out /etc/ssl/certs/mail.pem -keyout /etc/ssl/private/mail.key -days 365 -nodes -batch&lt;/p&gt;  &lt;p&gt;... and adjust the rights for the key in order that only root is allowed to read it.&lt;/p&gt;  &lt;p class="command"&gt;chmod 600 /etc/ssl/private/mail.key&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: center;" class="command"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian.html"&gt;Previous  &lt;/a&gt;||  &lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_6098.html"&gt;Next&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-3803678748476492273?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/3803678748476492273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/3803678748476492273'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_18.html' title='Mandriva Directory Server On Debian Etch - Page 2'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7724008538091293573</id><published>2008-02-18T22:39:00.003-07:00</published><updated>2008-02-18T23:24:17.583-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Mandriva Directory Server On Debian Etch</title><content type='html'>&lt;p&gt;This document describes how to set up the &lt;a mce_real_href="http://mds.mandriva.org/" href="http://mds.mandriva.org/" target="_blank"&gt;Mandriva Directory Server (MDS)&lt;/a&gt; on Debian Etch. The resulting system provides a full-featured office server for small and medium companies - easy to administer via the web-based Mandriva Management Console (MMC).&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Main Features&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Easy administration via MMC&lt;/li&gt;&lt;li&gt;System wide OpenLDAP integration&lt;/li&gt;&lt;li&gt;SAMBA Primary Domain Controller (PDC)&lt;/li&gt;&lt;li&gt;Postfix Mailserver with Dovecot, Amavis, Spamassassin and ClamAV (POP3/IMAP/SSL/TLS/Quota)&lt;/li&gt;&lt;li&gt;BIND DNS-server&lt;/li&gt;&lt;li&gt;ISC DHCP-server&lt;/li&gt;&lt;li&gt;Squid web-proxy with SquidGuard&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This howto is a practical guide without any warranty - it doesn't cover the theoretical backgrounds. There are many ways to set up such a system - this is the way I chose.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Preamble&lt;/h3&gt; &lt;p&gt;This howto is quite complex. Please take your time, read it extensively and follow the steps minutely. The smallest amount of variance might effect that your setup won't work accurately.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;1 Preparation&lt;/h3&gt; &lt;h4&gt;1.1 Basic System&lt;/h4&gt; &lt;p&gt;Set up a standard debian etch system and update it. I used the following configuration for this howto and the attached virtual machine that is available for our subscribers:&lt;/p&gt; &lt;p&gt;Hostname: &lt;span class="system"&gt;server1.example.com&lt;/span&gt;&lt;br /&gt;SAMBA domain: &lt;span class="system"&gt;EXAMPLE&lt;/span&gt;&lt;br /&gt;IP: &lt;span class="system"&gt;192.168.0.100&lt;/span&gt;&lt;br /&gt;Gateway: &lt;span class="system"&gt;192.168.0.2&lt;/span&gt;&lt;br /&gt;All Passwords: &lt;span class="system"&gt;howtoforge&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2 Hostname&lt;/h4&gt; &lt;p&gt;Edit the hosts file - assign the hostname to the server IP.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/hosts&lt;/p&gt; &lt;p&gt;It should look like this:&lt;/p&gt; &lt;pre&gt;127.0.0.1       localhost.localdomain   localhost&lt;br /&gt;192.168.0.100   server1.example.com     server1&lt;br /&gt;&lt;br /&gt;# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;::1     ip6-localhost ip6-loopback&lt;br /&gt;fe00::0 ip6-localnet&lt;br /&gt;ff00::0 ip6-mcastprefix&lt;br /&gt;ff02::1 ip6-allnodes&lt;br /&gt;ff02::2 ip6-allrouters&lt;br /&gt;ff02::3 ip6-allhosts&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Afterwards insert the hostname into the hostname file ...&lt;/p&gt; &lt;p class="command"&gt;echo server1.example.com &gt; /etc/hostname&lt;/p&gt; &lt;p&gt;... and reboot the system.&lt;/p&gt; &lt;p class="command"&gt;reboot&lt;/p&gt; &lt;p&gt;When the system is up again, the output of the both commands ...&lt;/p&gt; &lt;p class="command"&gt;hostname&lt;/p&gt; &lt;p&gt;... and ...&lt;/p&gt; &lt;p class="command"&gt;hostname -f&lt;/p&gt; &lt;p&gt;... should be:&lt;/p&gt; &lt;p class="system"&gt;server1.example.com&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.3 Filesystem ACLs&lt;/h4&gt; &lt;p&gt;In order that SAMBA is able to map filesystem-ACLs between the Linux server and the Windows clients you need to add ACL-support to the corresponding mount point.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/fstab&lt;/p&gt; &lt;p&gt;Add the option "&lt;span class="system"&gt;acl&lt;/span&gt;" to the mount point where the SAMBA directories will be stored and the SAMBA users will have their homes. In my case it's "&lt;span class="system"&gt;/&lt;/span&gt;" - the content should look like this:&lt;/p&gt; # /etc/fstab: static file system information. # # &lt;file&gt; &lt;mount&gt;   &lt;type&gt;  &lt;options&gt;       &lt;dump&gt;  &lt;pass&gt; proc            /proc           proc    defaults        0       0 /dev/sda1       /               ext3    defaults,acl,errors=remount-ro 0       1 /dev/sda5       none            swap    sw              0       0 /dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0 /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0 &lt;/pass&gt;&lt;/dump&gt;&lt;/options&gt;&lt;/type&gt;&lt;/mount&gt;&lt;/file&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Afterwards remount the mountpoint to take the changes effect.&lt;/p&gt; &lt;p class="command"&gt;mount -o remount /&lt;/p&gt; &lt;p&gt;If all went well, the command ...&lt;/p&gt; &lt;p class="command"&gt;mount -l&lt;/p&gt; &lt;p&gt;... should show the option "&lt;span class="system"&gt;acl&lt;/span&gt;" for the corresponding mountpoint:&lt;/p&gt; &lt;p class="system"&gt;/dev/sda1 on / type ext3 (rw,acl,errors=remount-ro)&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;2 Repositories&lt;/h3&gt; &lt;h4&gt;2.1 MDS&lt;/h4&gt; &lt;p&gt;The MDS repository provides the MDS related packages and also patched packages for bind9 &amp;amp; dhcp3.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/apt/sources.list&lt;/p&gt; &lt;p&gt;Add the following lines to the file.&lt;/p&gt; &lt;p class="system"&gt;# MDS repository&lt;br /&gt;deb http://mds.mandriva.org/pub/mds/debian etch main&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;2.2 Debian Volatile&lt;/h4&gt; &lt;p&gt;The Debian Volatile repository provides newer packages for ClamAV &amp;amp; Spamassassin than the standard debian repository.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/apt/sources.list&lt;/p&gt; &lt;p&gt;Add the following lines to the file.&lt;/p&gt; &lt;p class="system"&gt;# Debian Volatile&lt;br /&gt;deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;2.3 Debian Backports&lt;/h4&gt; &lt;p&gt;The Debian Backports repository provides newer packages for dovecot.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/apt/sources.list&lt;/p&gt; &lt;p&gt;Add the following lines to the file.&lt;/p&gt; &lt;p class="system"&gt;# Debian Etch Backports&lt;br /&gt;deb http://www.backports.org/debian etch-backports main&lt;/p&gt; &lt;p&gt;Afterwards refresh apt.&lt;/p&gt; &lt;p class="command"&gt;apt-get update&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;3 Needed packages&lt;/h3&gt; &lt;h4&gt;3.1 Install&lt;/h4&gt; &lt;p&gt;Install the needed packages for this setup.&lt;/p&gt; &lt;p class="command"&gt;apt-get install mmc-web-base mmc-web-mail mmc-web-network mmc-web-proxy mmc-web-samba mmc-agent python-mmc-plugins-tools python-mmc-base python-mmc-mail python-mmc-network python-mmc-proxy python-mmc-samba postfix postfix-ldap sasl2-bin libsasl2 libsasl2-modules amavisd-new libdbd-ldap-perl libnet-ph-perl libnet-snpp-perl libnet-telnet-perl lzop nomarch zoo clamav clamav-daemon gzip bzip2 unzip unrar-free unzoo arj spamassassin libnet-dns-perl razor pyzor dcc-client slapd ldap-utils libnss-ldap libpam-ldap dhcp3-server dhcp3-server-ldap bind9 samba smbclient smbldap-tools cupsys cupsys-client foomatic-db-engine foomatic-db foomatic-db-hpijs foomatic-db-gutenprint foomatic-filters foomatic-filters-ppds fontconfig hpijs-ppds linuxprinting.org-ppds&lt;/p&gt; &lt;p&gt;The actual dovecot-packages in the standard debian repository have a bug in conjunction with LDAP - so you have to use the dovecot-packages from Debian Backports.&lt;/p&gt; &lt;p class="command"&gt;apt-get install -t etch-backports dovecot-common dovecot-imapd dovecot-pop3d&lt;/p&gt; &lt;p&gt;If you want to use HP printers it's recommeded to install a few more packages.&lt;/p&gt; &lt;p class="command"&gt;apt-get install hplip libusb-dev python-dev python-reportlab libcupsys2-dev libjpeg62-dev libsnmp9-dev lsb-core&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;3.2 Configuration&lt;/h4&gt; &lt;p&gt;During the installation of the new packages you'll be asked a few questions - answer them as follows.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;3.2.1 LDAP&lt;/h4&gt; &lt;p&gt;Enter the password for the LDAP admin and confirm it. (&lt;span class="system"&gt;howtoforge&lt;/span&gt;)&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;3.2.2 Samba&lt;/h4&gt; &lt;p&gt;Enter a name for your domain. (&lt;span class="system"&gt;EXAMPLE&lt;/span&gt;)&lt;br /&gt;Select "&lt;span class="system"&gt;No&lt;/span&gt;" when you're asked if the &lt;span class="system"&gt;smb.conf&lt;/span&gt; should be modified to use WINS settings from DHCP.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;3.2.3 Postfix&lt;/h4&gt; &lt;p&gt;Select "&lt;span class="system"&gt;Internet Site&lt;/span&gt;" as general type of configuration.&lt;br /&gt;Enter "&lt;span class="system"&gt;server1.example.com&lt;/span&gt;" as mail name.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;3.2.4 Libnss-LDAP&lt;/h4&gt; &lt;p&gt;Enter "&lt;span class="system"&gt;ldap://127.0.0.1/&lt;/span&gt;" as LDAP server URI.&lt;br /&gt;Enter "&lt;span class="system"&gt;dc=example,dc=com&lt;/span&gt;" as name for the search base.&lt;br /&gt;Select the LDAP version. (&lt;span class="system"&gt;3&lt;/span&gt;)&lt;br /&gt;Enter "&lt;span class="system"&gt;cn=admin,dc=example,dc=com&lt;/span&gt;" as LDAP account for root.&lt;br /&gt;Enter the password for the LDAP admin. (&lt;span class="system"&gt;howtoforge&lt;/span&gt;)&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;3.2.5 Libpam-LDAP&lt;/h4&gt; &lt;p&gt;Select "&lt;span class="system"&gt;Yes&lt;/span&gt;" when you're asked if the local root should be the database admin.&lt;br /&gt;Select "&lt;span class="system"&gt;No&lt;/span&gt;" when you're asked if the LDAP database requires login.&lt;br /&gt;Enter "&lt;span class="system"&gt;cn=admin,dc=example,dc=com&lt;/span&gt;" as LDAP account for root.&lt;br /&gt;Enter the password for the LDAP admin. (&lt;span class="system"&gt;howtoforge&lt;/span&gt;)&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;4 LDAP Configuration&lt;/h3&gt; &lt;h4&gt;4.1 Schema Files&lt;/h4&gt; &lt;p&gt;First copy the schema files for MMC, mail, SAMBA, printer, DNS and DHCP into the LDAP schema directory.&lt;/p&gt; &lt;p class="command"&gt;cp /usr/share/doc/python-mmc-base/contrib/ldap/mmc.schema /etc/ldap/schema/&lt;br /&gt;cp /usr/share/doc/python-mmc-base/contrib/ldap/mail.schema /etc/ldap/schema/&lt;br /&gt;zcat /usr/share/doc/python-mmc-base/contrib/ldap/samba.schema.gz &gt; /etc/ldap/schema/samba.schema&lt;br /&gt;zcat /usr/share/doc/python-mmc-base/contrib/ldap/printer.schema.gz &gt; /etc/ldap/schema/printer.schema&lt;br /&gt;zcat /usr/share/doc/python-mmc-base/contrib/ldap/dnszone.schema.gz &gt; /etc/ldap/schema/dnszone.schema&lt;br /&gt;zcat /usr/share/doc/python-mmc-base/contrib/ldap/dhcp.schema.gz &gt; /etc/ldap/schema/dhcp.schema&lt;/p&gt; &lt;p&gt;Next include the schema files into the LDAP configuration&lt;/p&gt; &lt;p class="command"&gt;vi /etc/ldap/slapd.conf&lt;/p&gt; &lt;p&gt;Include the schema files after the inetorgperson schema.&lt;/p&gt; &lt;p class="system"&gt;include /etc/ldap/schema/mmc.schema&lt;br /&gt;include /etc/ldap/schema/samba.schema&lt;br /&gt;include /etc/ldap/schema/printer.schema&lt;br /&gt;include /etc/ldap/schema/mail.schema&lt;br /&gt;include /etc/ldap/schema/dnszone.schema&lt;br /&gt;include /etc/ldap/schema/dhcp.schema&lt;/p&gt; &lt;p&gt;Enable the schemacheck (below the included schema files).&lt;/p&gt; &lt;p class="system"&gt;schemacheck    on&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.2 Basic Configuration&lt;/h4&gt; &lt;p&gt;In this step you'll need the ldap admin password (that you defined during the package installation in step 3) in encrypted form (SSHA) - so let's encrypt it.&lt;/p&gt; &lt;p class="command"&gt;slappasswd -s %ldap_admin_password%&lt;/p&gt; &lt;p&gt;E.g.:&lt;/p&gt; &lt;p class="command"&gt;slappasswd -s howtoforge&lt;/p&gt; &lt;p&gt;The output should look like this:&lt;/p&gt; &lt;p class="system"&gt;{SSHA}kPd9OeiwGx4lyZUiQ2NFmzXV0JWyLV9A&lt;/p&gt; &lt;p&gt;Note it down and proceed - open the LDAP server configuration file.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/ldap/slapd.conf&lt;/p&gt; &lt;p&gt;Search the commented line with the entry for the LDAP admin (rootdn) ...&lt;/p&gt; &lt;p class="system"&gt;# rootdn          "cn=admin,dc=example,dc=com"&lt;/p&gt; &lt;p&gt;... and comment it out. After that add a new line straight below. You have to enter the encrypted ldap admin password that you generated at the beginning of this step.&lt;/p&gt; &lt;p class="system"&gt;rootpw          %encrypted_ldap_admin_password%&lt;/p&gt; &lt;p&gt;E.g.:&lt;/p&gt; &lt;p class="system"&gt;rootpw          {SSHA}kPd9OeiwGx4lyZUiQ2NFmzXV0JWyLV9A&lt;/p&gt; &lt;p&gt;Next we have to modify the indexing options for the database. Search the following entry:&lt;/p&gt; &lt;p class="system"&gt;# Indexing options for database #1&lt;/p&gt; &lt;p&gt;Remove the line below ...&lt;/p&gt; &lt;p class="system"&gt;index        objectClass eq&lt;/p&gt; &lt;p&gt;... and insert the following lines:&lt;/p&gt; &lt;p class="system"&gt;index      objectClass,uidNumber,gidNumber                  eq&lt;br /&gt;index      cn,sn,uid,displayName                            pres,sub,eq&lt;br /&gt;index      memberUid,mail,givenname                         eq,subinitial&lt;br /&gt;index      sambaSID,sambaPrimaryGroupSID,sambaDomainName    eq&lt;br /&gt;index        zoneName,relativeDomainName                 eq&lt;br /&gt;index        dhcpHWAddress,dhcpClassData                 eq&lt;/p&gt; &lt;p&gt;Now add SAMBA to the access-list for the database. Search the following line:&lt;/p&gt; &lt;p class="system"&gt;access to attrs=userPassword,shadowLastChange&lt;/p&gt; &lt;p&gt;Change it that it looks like this:&lt;/p&gt; &lt;p class="system"&gt;access to attrs=userPassword,sambaLMPassword,sambaNTPassword&lt;/p&gt; &lt;p&gt;At this point the LDAP server configuration file should look like this:&lt;/p&gt; # This is the main slapd configuration file. See slapd.conf(5) for more # info on the configuration options. ####################################################################### # Global Directives: # Features to permit #allow bind_v2 # Schema and objectClass definitions include         /etc/ldap/schema/core.schema include         /etc/ldap/schema/cosine.schema include         /etc/ldap/schema/nis.schema include         /etc/ldap/schema/inetorgperson.schema include         /etc/ldap/schema/mmc.schema include         /etc/ldap/schema/samba.schema include         /etc/ldap/schema/printer.schema include         /etc/ldap/schema/mail.schema include         /etc/ldap/schema/dnszone.schema include         /etc/ldap/schema/dhcp.schema  schemacheck     on  # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile         /var/run/slapd/slapd.pid  # List of arguments that were passed to the server argsfile        /var/run/slapd/slapd.args  # Read slapd.conf(5) for possible values loglevel        0  # Where the dynamically loaded modules are stored modulepath      /usr/lib/ldap moduleload      back_bdb  # The maximum number of entries that is returned for a search operation sizelimit 500  # The tool-threads parameter sets the actual amount of cpu's that is used # for indexing. tool-threads 1  ####################################################################### # Specific Backend Directives for bdb: # Backend specific directives apply to this backend until another # 'backend' directive occurs backend         bdb checkpoint 512 30  ####################################################################### # Specific Backend Directives for 'other': # Backend specific directives apply to this backend until another # 'backend' directive occurs #backend                &lt;other&gt;  ####################################################################### # Specific Directives for database #1, of type bdb: # Database specific directives apply to this databasse until another # 'database' directive occurs database        bdb  # The base of your directory in database #1 suffix          "dc=example,dc=com"  # rootdn directive for specifying a superuser on the database. This is needed # for syncrepl. rootdn          "cn=admin,dc=example,dc=com" rootpw          {SSHA}kPd9OeiwGx4lyZUiQ2NFmzXV0JWyLV9A  # Where the database file are physically stored for database #1 directory       "/var/lib/ldap"  # For the Debian package we use 2MB as default but be sure to update this # value if you have plenty of RAM dbconfig set_cachesize 0 2097152 0  # Sven Hartge reported that he had to set this value incredibly high # to get slapd running at all. See http://bugs.debian.org/303057 # for more information. # Number of objects that can be locked at the same time. dbconfig set_lk_max_objects 1500  # Number of locks (both requested and granted) dbconfig set_lk_max_locks 1500  # Number of lockers dbconfig set_lk_max_lockers 1500  # Indexing options for database #1 index      objectClass,uidNumber,gidNumber                  eq index      cn,sn,uid,displayName                            pres,sub,eq index      memberUid,mail,givenname                         eq,subinitial index      sambaSID,sambaPrimaryGroupSID,sambaDomainName    eq index      zoneName,relativeDomainName                      eq  index      dhcpHWAddress,dhcpClassData                      eq  # Save the time that the entry gets modified, for database #1 lastmod         on  # Where to store the replica logs for database #1 # replogfile    /var/lib/ldap/replog # The userPassword by default can be changed # by the entry owning it if they are authenticated. # Others should not be able to see it, except the # admin entry below # These access lines apply to database #1 only access to attrs=userPassword,sambaLMPassword,sambaNTPassword         by dn="cn=admin,dc=example,dc=com" write         by anonymous auth         by self write         by * none  # Ensure read access to the base for things like # supportedSASLMechanisms.  Without this you may # have problems with SASL not knowing what # mechanisms are available and the like. # Note that this is covered by the 'access to *' # ACL below too but if you change that as people # are wont to do you'll still need this if you # want SASL (and possible other things) to work  # happily. access to dn.base="" by * read  # The admin dn has full write access, everyone else # can read everything. access to *         by dn="cn=admin,dc=example,dc=com" write         by * read  # For Netscape Roaming support, each user gets a roaming # profile for which they have write access to #access to dn=".*,ou=Roaming,o=morsnet" #        by dn="cn=admin,dc=example,dc=com" write #        by dnattr=owner write  ####################################################################### # Specific Directives for database #2, of type 'other' (can be bdb too): # Database specific directives apply to this databasse until another # 'database' directive occurs #database        &lt;other&gt;  # The base of your directory for database #2 #suffix         "dc=debian,dc=org" &lt;/other&gt;&lt;/other&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Additionally you have to edit the LDAP configuration file.&lt;/p&gt; &lt;p class="command"&gt;vi /etc/ldap/ldap.conf&lt;/p&gt; &lt;p&gt;Add the following lines:&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;host 127.0.0.1&lt;br /&gt;base dc=example,dc=com&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Afterwards restart the LDAP server.&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/slapd restart&lt;/p&gt;&lt;pre&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_18.html"&gt;Mandriva Directory Server On Debian Etch -Page 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_6098.html"&gt;Mandriva Directory Server On Debian Etch -Page 3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/11-amavisd-postfix-will-pass-incomming.html"&gt;Mandriva Directory Server On Debian Etch -Page 4&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_7337.html"&gt;Mandriva Directory Server On Debian Etch -Page 5&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_2008.html"&gt;Mandriva Directory Server On Debian Etch -Page 6&lt;/a&gt;&lt;br /&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian_5245.html"&gt;Mandriva Directory Server On Debian Etch -Page 7&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-7724008538091293573?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7724008538091293573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7724008538091293573'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/mandriva-directory-server-on-debian.html' title='Mandriva Directory Server On Debian Etch'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2358037285092622228</id><published>2008-02-18T12:14:00.001-07:00</published><updated>2008-02-18T12:14:46.080-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>In open source, money doesn't always talk</title><content type='html'>&lt;p class="first_paragraph"&gt;&lt;span id="ctl00_leftColumnContentPlaceHolder_IntroLabel" style="font-weight: bold;"&gt;Getting a job in open source development can mean getting a pay-cheque for working on your favourite hobby. But the equation is more complicated than just adding money, according to OpenLogic Director of Community and Partner Programs, Stormy Peters.&lt;/span&gt;&lt;/p&gt;                  &lt;p&gt;&lt;span id="ctl00_leftColumnContentPlaceHolder_ContentLabel"&gt;Companies seeking to employ programmers to work on open source projects need to maintain the non-financial benefits of open source programming to ensure the success of their commercial projects, keynote speaker Stormy Peters told Linux.conf.au this morning.&lt;br /&gt;&lt;br /&gt;"Open source developers work on open source software for a number of reasons; from scratching an itch, to gaining a reputation, to building a resume, to contributing to a good cause. You need to know what the developer's motivation was to begin with and how the company changes that software development model," she said.&lt;br /&gt;&lt;br /&gt;A study called, "Why hackers do what they do", found around 40 percent of open source developers are paid contributors.&lt;br /&gt;&lt;br /&gt;"Another 10 or 15 percent work on open source software but their manager doesn't know it," Peters said.&lt;br /&gt;&lt;br /&gt;Moving from working as a volunteer on an open source project to becoming an employee of a company changes the game, even if the developer is working on exactly the same project, she said.&lt;br /&gt;&lt;br /&gt;"The open source development model itself changes. A company paying for that development influences the project, whether you like it or not,” Peters said.&lt;br /&gt;&lt;br /&gt;"The open source community is very open - discussions happen on mailing lists or on IRC. In the workplace, decisions are made in meetings that you missed, or at a meeting you weren't invited to because it was for project managers. The problem is that design gets left out. All of a sudden you're not being creative, you're just writing code to spec."&lt;br /&gt;&lt;br /&gt;"Open source software isn't yet integrated into how companies do business - the people writing the code need to be involved through the whole process. Companies should be looking at how design discussions evolve in the open source community and take that on board to ensure that programmers are involved in the process,” she said.&lt;br /&gt;&lt;br /&gt;Stormy Peters founded and managed HP's open source program and is now the Director of Community and Partner Programs at OpenLogic.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-2358037285092622228?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2358037285092622228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2358037285092622228'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/in-open-source-money-doesnt-always-talk.html' title='In open source, money doesn&apos;t always talk'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-3513034044083772534</id><published>2008-02-18T12:04:00.001-07:00</published><updated>2008-02-18T12:09:19.381-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Meet the Anti-Nmap: PSAD (EnGarde Secure Linux)</title><content type='html'>The Port Scan Attack Detector (psad) is an excellent tool for detecting various types of suspicious traffic, including port scans from popular tools such as Nmap, DDoS attacks, and other efforts to brute force certain protocols on your system.  By analyzing firewall logs, psad can not only pick up on certain attack patterns, but even manipulate firewall rules to properly respond to suspicious activity. &lt;p&gt;This article will walk the reader through an EnGarde Secure Linux implementation of psad, from the initial iptables rules setup to the deployment of psad on the server side.  By the end of the article, the user will be able to detect certain Nmap scans and have psad respond to these scans by blocking the source.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Prerequisites&lt;/h3&gt; &lt;p&gt;You will need:&lt;br /&gt;&lt;br /&gt; - A machine with EnGarde Secure Community 3.0.18 or above installed to do your development on.  These commands should NOT be run on a production server since psad will eventually deny any type of access from the remote scanning machine!&lt;/p&gt; &lt;p&gt;  - A separate machine on the same network with Nmap installed on it.  You will be running certain scans on the server from this machine.&lt;/p&gt; &lt;p&gt;Once you have all the above you may log in as root, transition over to sysadm_r, and disable SELinux:&lt;/p&gt; &lt;p class="command"&gt;newrole -r sysadm_r&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;  [psad_server]# newrole -r sysadm_r&lt;br /&gt; Authenticating root.&lt;br /&gt; Password:&lt;br /&gt;&lt;br /&gt; [psad_server]# setenforce 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Throughout the HowTo, the server will be referred to as psad_server and the Nmap scanning machine as nmap_scanner.&lt;/p&gt;&lt;h3&gt;Install psad&lt;/h3&gt; &lt;p&gt;EnGarde Secure Linux makes the installation of psad a breeze due to its Guardian Digital Secure Network (GDSN).  You can install the package through the command line:&lt;/p&gt; &lt;p class="command"&gt;apt-get install psad&lt;/p&gt; &lt;p&gt;...or log in to WebTool and download the package from the package manager interface.&lt;/p&gt; &lt;p&gt;We shall get around to the setup of psad after we configure the firewalls on psad_server to log packets:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;iptables Rules Setup&lt;/h3&gt; &lt;p&gt;Since iptables is installed out of the box on EnGarde Secure Linux, you only have to run two simple commands to start logging packets with iptables:&lt;/p&gt; &lt;p class="command"&gt;iptables -A INPUT -j LOG&lt;br /&gt;iptables -A FORWARD -j LOG&lt;/p&gt; &lt;p&gt;From here on out incoming packets (especially those of Nmap scans) will be logged.  Let's see if we can start detecting such scans by setting up psad to do so.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;psad Configuration&lt;/h3&gt; &lt;p&gt;On psad_server, use your favorite editor to modify the &lt;span class="system"&gt;/etc/psad/psad.conf&lt;/span&gt; file.  We're interested in the following tunables:&lt;br /&gt;&lt;br /&gt;  &lt;span class="system"&gt;EMAIL_ADDRESSES&lt;br /&gt; HOSTNAME&lt;br /&gt; SYSLOG_DAEMON&lt;br /&gt; ETC_SYSLOGNG_CONF&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The EMAIL_ADDRESSES should be whichever email addresses you wish to have psad send feedback to.  This feedback includes error messages and alerts of potential dangerous scans depending on danger levels which can be fine-tuned for your purposes.&lt;/p&gt; &lt;p&gt; - The HOSTNAME tunable will be the hostname of the psad_server machine.&lt;/p&gt; &lt;p&gt; - The SYSLOG_DAEMON refers to the logging daemon for the machine.  For EnGarde Secure Linux, this should be set to 'syslog-ng'.&lt;/p&gt; &lt;p&gt; - The ETC_SYSLOGNG_CONF refers to the direct path of the syslog-ng daemon's configuration file.  For EnGarde Secure Linux, this should be set to '/etc/syslog-ng.conf'.&lt;/p&gt; &lt;p&gt; - Once you've properly configured those tunables, you can start the psad daemon:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/psad start&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;  [psad_server]# /etc/init.d/psad start&lt;br /&gt; [ SUCCESSFUL ] psad Daemons&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;Note:  &lt;/h4&gt; &lt;p&gt;As far as danger levels are concerned, these range from one to five&lt;br /&gt;and are assigned to the IP addresses from which an attack or scan is detected. They are assigned based on the number of packets sent, port range, thetime interval of the scan, whether or not the signatures of the packets match up with psad signature attacks, and the IP address where the packet originated from. Depending on the number of such packets, a level is assigned as per the configuration file.  For more information on danger levels and ideas for fine-tuning them, please refer to the resources at the end of the article. &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;psad  - Active Detection&lt;/h3&gt; &lt;p&gt;We will now use psad to detect certain Nmap scans.  On the Nmap scanning machine, run a TCP connect() scan by executing the following:&lt;/p&gt; &lt;p class="command"&gt;nmap -sT 1.2.3.4&lt;/p&gt; &lt;p&gt;Replace 1.2.3.4 with the IP address of your psad_server.&lt;/p&gt; &lt;p&gt;If we check the /var/log/psad/fwdata file on the psad_server, you will find the following:&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;  Feb  2 11:58:11 psad_server kernel: IN=eth0 OUT=&lt;br /&gt; MAC=00:0c:29:78:22:73:00:0c:76:4b:f6:3e:08:00 SRC=5.6.7.8&lt;br /&gt; DST=1.2.3.4 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=23609 DF PROTO=TCP&lt;br /&gt; SPT=49021 DPT=113 WINDOW=5840 RES=0x00 SYN URGP=0 &lt;/span&gt;&lt;/p&gt; &lt;p&gt;We can see that SRC will have the IP address of the nmap_scanner machine, and DST will have the address of the psad_server.  Also note that PROTO=TCP, showing that the attack was a TCP connect() scan.&lt;/p&gt; &lt;p&gt;If you had previously configured psad to send email alerts, you will begin receiving emails concerning this scan showing lots more data than these log messages can ever produce.  There are configuration tunables in the /etc/psad/psad.conf file to limit and even disable email:&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;  EMAIL_LIMIT&lt;br /&gt; ALERTING_METHODS&lt;br /&gt; EMAIL_ALERT_DANGER_LEVEL&lt;/span&gt;&lt;/p&gt; &lt;p&gt;EMAIL_LIMIT defines the maximum number of emails a configured user will receive for a given IP address.&lt;/p&gt; &lt;p&gt;ALERTING_METHODS can be set to noemail, nosyslog, and ALL, depending on whether you want only syslog-ng messages, email alerts, or both.&lt;/p&gt; &lt;p&gt;EMAIL_ALERT_DANGER_LEVEL is the minimum danger level that must be hit in order for psad to send email alerts concerning a detection.  The default setting is one, so you can expect lots of emails for this tutorial's purpose.&lt;/p&gt; &lt;p&gt;Here is an example email showing psad output of the previous Nmap scan:&lt;/p&gt; &lt;p class="system"&gt;&lt;b&gt;Subject&lt;/b&gt;: [psad-alert] DL2 src: nmap_scanner.yournetwork.com dst:&lt;br /&gt;   psad_server.yournetwork.com&lt;br /&gt;&lt;br /&gt;        Danger level: [2] (out of 5)&lt;br /&gt;&lt;br /&gt;   Scanned UDP ports: [32772: 1 packets, Nmap: -sU]&lt;br /&gt;      iptables chain: INPUT, 1 packets&lt;br /&gt;&lt;br /&gt;              Source: 5.6.7.8&lt;br /&gt;                 DNS: nmap_scanner.yournetwork.com&lt;br /&gt;            OS guess: Linux (2.4.x kernel)&lt;br /&gt;&lt;br /&gt;         Destination: 1.2.3.4&lt;br /&gt;                 DNS: psad_server.yournetwork.com&lt;br /&gt;&lt;br /&gt;  Overall scan start: Mon Feb  2 11:57:19 2008&lt;br /&gt;  Total email alerts: 2&lt;br /&gt;  Complete TCP range: [64-49400]&lt;br /&gt;  Complete UDP range: [32772]&lt;br /&gt;     Syslog hostname: unknown&lt;br /&gt;&lt;br /&gt;        Global stats: chain:   interface:   TCP:   UDP:   ICMP:&lt;br /&gt;                      INPUT    eth0         40     1      0    &lt;br /&gt;&lt;br /&gt;[+] TCP scan signatures:&lt;br /&gt;&lt;br /&gt;  "P2P Napster Client Data communication attempt"&lt;br /&gt;      dst port:  5555 (no server bound to local port)&lt;br /&gt;      flags:     SYN&lt;br /&gt;      sid:       564&lt;br /&gt;      chain:     INPUT&lt;br /&gt;      packets:   1&lt;br /&gt;      classtype: policy-violation &lt;/p&gt; &lt;p&gt;As you can see, psad does a wonderful job of taking packet data from logs, analyzing it and producing useful information on the type of scans used.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;psad  - Active Defense&lt;/h3&gt; &lt;p&gt;One of the more prominent features of psad is its active defense implementation - being able to detect Nmap scans is nice, but how do you respond?  Let's configure psad to automatically block the source of such scans upon detection.&lt;/p&gt; &lt;p&gt;Before implementing this feature, it is obvious for certain security veterans who are reading this article that there is a definite tradeoff for enforcing an active response policy.  Although malicious traffic will be blocked, there is always the risk of blocking out valid traffic.  Certain attackers can exploit active defenses and turn it against the target by attempting to spoof valid addresses, thus blocking out otherwise harmless traffic.&lt;/p&gt; &lt;p&gt;This only happens in cases where the active response system has been configured to respond to nearly ALL types of potentially harmful traffic, including port scans or port sweeps.  This also applies to traffic which does not require bidirectional communication with the target.  A better strategy to employ is to only respond to traffic where bidirectional communication is required i.e. TCP connections.  Even then, one must take care to tailor their active response to certain types of TCP connections, such as attempted SQL injection attacks, etc.  Please be sure you are absolutely positive of how your detection scheme is working before deploying an active defense.&lt;/p&gt; &lt;p&gt;Using your favorite editor, modify the /etc/psad/psad.conf file.  We're interested in the following tunables:&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;  ENABLE_AUTO_IDS&lt;br /&gt; AUTO_IDS_DANGER_LEVEL&lt;/span&gt;&lt;/p&gt; &lt;p&gt;  ENABLE_AUTO_IDS should be set to 'Y' to enable the automated IDS response.&lt;/p&gt; &lt;p&gt;  AUTO_IDS_DANGER_LEVEL, for this HowTo's sake, will be set to '3'.  This danger  level is customizable and the setting we use in this HowTo is for demonstration  purposes only.&lt;/p&gt; &lt;p&gt;Restart the psad on the psad_server:&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/psad restart&lt;/p&gt; &lt;p&gt;&lt;span class="system"&gt;  [psad_server]# /etc/init.d/psad restart&lt;br /&gt; [ SUCCESSFUL ] psadwatchd Daemon&lt;br /&gt; [ SUCCESSFUL ] psad Daemon&lt;br /&gt; [ SUCCESSFUL ] kmsgsd Daemon&lt;br /&gt; [ SUCCESSFUL ] psad Daemons&lt;/span&gt;&lt;/p&gt; &lt;p&gt;From the nmap_scanner machine, we'll run an Nmap SYN scan along with the '-P0' switch - this type of scan uses no ping and does not fully complete a TCP connection, resulting in fast scans.  This usually requires root privileges, and is considered more of a dangerous scan - just the type of scan that psad detects at a higher danger level.&lt;/p&gt; &lt;p class="command"&gt;nmap -sS -P0 -n 1.2.3.4&lt;/p&gt; &lt;p&gt;Replace the '1.2.3.4' with the IP address of your psad_server machine.&lt;/p&gt; &lt;p&gt;psad will detect the SYN scans, and since the danger level of this scan is 3, it manipulates the iptables rules to block the source of the scans.  This can be verified on the psad_server by running the following command:&lt;/p&gt; &lt;p class="command"&gt;psad --fw-list&lt;/p&gt; &lt;p&gt; &lt;span class="system"&gt; [psad_server]# psad --fw-list&lt;br /&gt; [+] Listing chains from IPT_AUTO_CHAIN keywords...&lt;br /&gt;&lt;br /&gt; Chain PSAD_BLOCK_INPUT (1 references)&lt;br /&gt;pkts bytes target     prot opt in     out     source               destination&lt;br /&gt; 820 36080 DROP       all  --  *      *       5.6.7.8              0.0.0.0/0&lt;br /&gt;&lt;br /&gt; Chain PSAD_BLOCK_OUTPUT (1 references)&lt;br /&gt;pkts bytes target     prot opt in     out     source               destination&lt;br /&gt;   0     0 DROP       all  --  *      *       0.0.0.0/0            5.6.7.8&lt;br /&gt;&lt;br /&gt; Chain PSAD_BLOCK_FORWARD (1 references)&lt;br /&gt;pkts bytes target     prot opt in     out     source               destination&lt;br /&gt;   0     0 DROP       all  --  *      *       0.0.0.0/0            5.6.7.8&lt;br /&gt;   0     0 DROP       all  --  *      *       5.6.7.8              0.0.0.0/0&lt;/span&gt;&lt;/p&gt; &lt;p&gt;You will even receive an email alerts that inform you of the scan detection, as well as an email informing you that iptables rules have been added to auto-block the nmap_scanner!&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Wrapping It All Up&lt;/h3&gt; &lt;p&gt;Congratulations, you've successfully implemented psad to actively detect and respond to signature Nmap scans!&lt;/p&gt; &lt;p&gt;Keep in mind this is one of the more basic setups for psad.  You can go even further and adjust danger levels to suit degrees of paranoia, put psad into forensics mode, incorporate the software with DShield, and even manually use psad to manipulate iptables rules.  A great resource for psad research is 'Linux Firewalls' by Michael Rash.  Rash includes several chapters on psad covering not only theory but advanced implementation of psad from start to finish.  If you wish to gain suggestions for an advanced, finely-tuned active defense setup with psad, be sure to check this book out!&lt;/p&gt; &lt;p&gt;Have fun implementing an active defense against those who try to scan your system!&lt;/p&gt;&lt;p&gt;(by Eckie S. from Linuxsecurity.com)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Resources&lt;/h3&gt;&lt;a title="http://www.linuxsecurity.com" target="_blank" mce_real_href="http://www.linuxsecurity.com" href="http://www.linuxsecurity.com/"&gt;http://www.linuxsecurity.com&lt;/a&gt; &lt;p&gt;&lt;a title="www.GuardianDigital.com" target="_blank" mce_real_href="http://www.guardiandigital.com" href="http://www.guardiandigital.com/"&gt;http://www.guardiandigital.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;"'Linux Firewalls' by Michael Rash"&lt;/p&gt;  &lt;p&gt;&lt;a title="'Knock, Knock, Knockin on EnGarde's Door'" target="_blank" mce_real_href="http://www.linuxsecurity.com/content/view/131846/171/" href="http://www.linuxsecurity.com/content/view/131846/171/"&gt;'Knock, Knock, Knockin' on EnGarde's Door'&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-3513034044083772534?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/3513034044083772534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/3513034044083772534'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/meet-anti-nmap-psad-engarde-secure.html' title='Meet the Anti-Nmap: PSAD (EnGarde Secure Linux)'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1865162990460438279</id><published>2008-02-18T11:54:00.002-07:00</published><updated>2008-02-18T12:02:02.211-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>Acer to launch low-cost PCs this year-paper</title><content type='html'>&lt;p class="first_paragraph"&gt;&lt;span id="ctl00_leftColumnContentPlaceHolder_IntroLabel" style="font-weight: bold;"&gt;Acer, the world's No. 3 computer vendor, plans to start selling low-cost laptop PCs this year, following a recent strong reception for similar models from competitors, media reported on Wednesday. &lt;/span&gt;&lt;/p&gt;                  &lt;p&gt;&lt;span id="ctl00_leftColumnContentPlaceHolder_ContentLabel"&gt;Acer, which previously said it had not planned to sell cheap notebook computers, has changed course to develop PCs to target a new customer base, the Chinese-language Commercial Times quoted company Chairman J.T. Wang as saying.&lt;br /&gt;&lt;br /&gt;The company planned to launch the PCs in the second or third quarter of this year, the report said.&lt;br /&gt;&lt;br /&gt;It said that Acer was still developing the new model, which could be 7-9 inches wide, and could cost around $470.&lt;br /&gt;&lt;br /&gt;Acer declined to comment on the report.&lt;br /&gt;&lt;br /&gt;On Wednesday, shares of Acer had risen 2.39 percent to T$49.25 by 0256 GMT, outperforming the benchmark TAIEX index which advanced 0.72 percent.&lt;br /&gt;&lt;br /&gt;Taiwan's Asustek Computer Inc, a competitor to Acer, launched its line of low-cost Eee PC laptops last year, with a price tag of as little as $200.&lt;br /&gt;&lt;br /&gt;Acer said the new computers would not cannibalise its current business, as such models were aimed at low penetration markets such as PCs for children and developing markets, according to the report, echoing similar previous comments from Asustek.&lt;br /&gt;&lt;br /&gt;Asustek has so far been successful in marketing and selling its child-friendly Linux-based notebook globally, although profit margins for the products are thin, analysts have said.&lt;br /&gt;&lt;br /&gt;Acer competes closely with China's Lenovo and larger rivals Hewlett-Packard and Dell.&lt;br /&gt;&lt;br /&gt;The firm posted a 77 percent surge in its fourth quarter net profit earlier in the week and said it expects to ship 40 percent more notebook PCs this year from 2007, while its overall PC shipments would rise by 30 to 35 percent.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="ctl00_leftColumnContentPlaceHolder_ContentLabel"&gt;"Yeah more Linux-based notebook !!!"&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1865162990460438279?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1865162990460438279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1865162990460438279'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/acer-to-launch-low-cost-pcs-this-year.html' title='Acer to launch low-cost PCs this year-paper'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1544248857982003757</id><published>2008-02-18T11:02:00.000-07:00</published><updated>2008-02-18T11:09:54.712-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>Fedora + Eee PC = Eeedora</title><content type='html'>I am a fan of affordable technology. I like relatively cheap gadgets, and I like open source. When I heard about Asus’ Eee PC, I took it with a certain grain of salt. I thought that maybe it was just another company trying to take a piece of the pie from the One Laptop Per Child initiative.&lt;br /&gt;&lt;br /&gt;Then the more I read about the OLPC, the more I realized that the two gadgets may have been created for different purposes. The OLPC is a non-profit, educational-social project, while the Eee PC is an affordable subnotebook being sold with the intent for profit.&lt;br /&gt;&lt;br /&gt;The Eee PC’s price range varies from approximately $300 to $500; within that range you can get a configuration with a 2 GB, 4 GB, or 8 GB solid state drive, and for the 4 GB and 8 GB models, you can opt for an embedded webcam as well. All models come with 3 USB ports, 1 MMC/SD port, and a VGA port for an external display, which can display up to 1600×1280 resolution.&lt;br /&gt;&lt;br /&gt;By default, the Eee PC comes with a slightly modified version of Xandros Linux with KDE as its window manager. The Linux layman will most likely not realize that it is indeed running KDE because of a feature called ”Easy Mode” that hides the KDE desktop and gives the user only icons to the main apps in the system.&lt;br /&gt;&lt;br /&gt;Note: The Xandros install uses unionfs for its filesystem, which is very common for Live CD installations. However, one of its features is that the space used by an application cannot be freed once that application is uninstalled. So, if you tried to uninstall OpenOffice to free up a few megabytes on your file system, unionfs would still report the same amount of used megabytes on your system.&lt;br /&gt;&lt;br /&gt;Because the Eee PC is a full-blown Intel-based computer, there is absolutely nothing stopping us from installing other Linux distributions on it. At first glance, the only catch is the fact that the Eee PC doesn’t have a built-in CD/DVD-ROM, but by using open source tools like livecd-iso-to-disk from the Fedora distribution, we can install live images onto a USB thumb drive and boot the Eee PC from it. That’s where Eeedora comes in.&lt;br /&gt;What’s Eeedora?&lt;br /&gt;&lt;br /&gt;Eeedora is a Fedora-based live distribution created and maintained by Martin Andrews. Martin decided to create the distribution for power users who are more comfortable in the Red Hat-based environment rather than Xandros, which is Debian-based.&lt;br /&gt;&lt;br /&gt;Eeedora is based on the most current version of Fedora (8); it uses XFCE as the window manager; the live image download is currently less than 350 MB; and it gives the user full access to the yum repos for the Fedora distribution, allowing you to install the larger packages like Gimp, OpenOffice, and Thunderbird.&lt;br /&gt;&lt;br /&gt;Eeedora in its current state works flawlessly with most of the hardware available under the Eee PC, coming up a little short still with webcam support and resume issues after a suspend. Yet it has been my experience so far that it works very well on the Eee PC.&lt;br /&gt;&lt;br /&gt;Also of note–Eeedora doesn’t use ext3. It uses ext2 to minimize disk use, so you should be aware that if devices are not unmounted properly, suspend/resume and hard shutdown could damage your install more frequently than if it was running ext3.&lt;br /&gt;Installing Eeedora on the Eee PC&lt;br /&gt;&lt;br /&gt;The following instructions will work on any of the models of the Eee PC:&lt;br /&gt;&lt;br /&gt;1. Download the Eeedora ISO image file.&lt;br /&gt;&lt;br /&gt;2. On your Fedora desktop (or laptop), install the livecd-iso-to-disk script.&lt;br /&gt;&lt;br /&gt;# yum  install livecd-tools&lt;br /&gt;&lt;br /&gt;3. Plug your USB thumbdrive into the computer. The haldaemon should automatically mount it, and you will see an icon for the thumbdrive show up on your desktop.&lt;br /&gt;&lt;br /&gt;4. Open Terminal and become root:&lt;br /&gt;&lt;br /&gt;# su -&lt;br /&gt;&lt;br /&gt;5. Find out which Linux device your USB thumbdrive is mapped as:&lt;br /&gt;&lt;br /&gt;# mount&lt;br /&gt;&lt;br /&gt;You will see a few lines on your terminal, and one of them will look like this:&lt;br /&gt;&lt;br /&gt;/dev/sdb1 on /media/disk1 vfat (rw)&lt;br /&gt;&lt;br /&gt;Haldaemon will mount your USB thumbdrive using the same label it identified the device with on your desktop when the icon showed up. In the case of this example “/dev/sdb1″ is my device.&lt;br /&gt;&lt;br /&gt;6. Install the image onto your USB thumbdrive:&lt;br /&gt;&lt;br /&gt;# livecd-iso-to-disk the-file-you-downloaded.iso /dev/sdb1&lt;br /&gt;&lt;br /&gt;Note: You don’t need to format your USB thumbdrive; livecd-iso-to-disk will install the image without destroying your existing data (assuming it has enough space on the drive). But it never hurts to have a backup copy.&lt;br /&gt;&lt;br /&gt;7. Unmount your USB thumbdrive and plug it into your Eee PC.&lt;br /&gt;&lt;br /&gt;8. Boot up your Eee PC. Press F2 to go into the BIOS, and make sure you make your USB thumbdrive the first hard disk the BIOS sees. Press F10 to save, and the Eeedora grub screen should start up.&lt;br /&gt;&lt;br /&gt;9. Once you are into the system, there will be an install icon on the desktop that you can use to install the OS on the actual SSD.&lt;br /&gt;Known issues&lt;br /&gt;&lt;br /&gt;As I’ve mentioned before, Eeedora is a work in progress, and Martin is always welcoming feedback from the community. I’ve had the chance to report a few bugs on it and got almost instant return from him.&lt;br /&gt;&lt;br /&gt;Read about more of the outstanding issues in Eeedora.&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;You might be asking why would anyone be interested in getting a notebook like the Eee PC. The keyboard is small, the screen is small (7 inches at 800×480), and the storage is minimal. Personally, I see the Eee PC as a tool that makes me a bit more mobile than before. Its dimensions could been seen as a disadvantage, although for my purposes it is an advantage. I even sold my iPod, because now I use the Eee PC as my media player in the car while going back and forth from work. I don’t necessarily recommend it to anyone who uses their MP3 player while exercising, but for a drive, it is pretty great.&lt;br /&gt;&lt;br /&gt;The Eee PC has also become a tool in which I started discovering applications in the open source world that I’ve never had the chance or desire to try. Most of us have plenty of storage space install everything from a Fedora DVD and use the “big apps” in our community like Gnome, KDE, Thunderbird, etc. Now with a very limited amount of space (in my case 2 GB), I’ve started playing with XFCE, Wifi-radar, and Sylpheed, among others.&lt;br /&gt;&lt;br /&gt;You get a chance to use Linux with a different mindset, from a different perspective.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1544248857982003757?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1544248857982003757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1544248857982003757'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/fedora-eee-pc-eeedora.html' title='Fedora + Eee PC = Eeedora'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1904763638964771920</id><published>2008-02-18T10:42:00.000-07:00</published><updated>2008-02-18T10:43:40.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>NEC shows off Linux mobile phones</title><content type='html'>&lt;p class="first_paragraph"&gt;&lt;span id="ctl00_leftColumnContentPlaceHolder_IntroLabel" style="font-weight: bold;"&gt;NEC has thrown its weight behind mobile Linux with the introduction of four handsets based on the LiMo specification..&lt;/span&gt;&lt;/p&gt;                  &lt;p&gt;&lt;span id="ctl00_leftColumnContentPlaceHolder_ContentLabel"&gt;&lt;a href="http://www.limofoundation.org/" target="_blank" title="LiMo"&gt;LiMo&lt;/a&gt; is a the result of a push towards a shared, hardware-independent mobile phone operating system by several handset manufacturers including Motorola, LG Electronics and Panasonic.&lt;br /&gt;&lt;br /&gt;NEC describes its handsets as the world's first LiMo-compliant mobile phones, even though several of its partners in the &lt;a href="http://www.limofoundation.org/" target="_blank" title="LiMo Foundation"&gt;LiMo Foundation&lt;/a&gt; have already released details of compatible handsets, including Motorola and Panasonic.&lt;br /&gt;&lt;br /&gt;"The breadth of the initial generation of LiMo handsets consolidates LiMo's role as the unifying force within mobile Linux and highlights the strong momentum established in the 12 months since LiMo was launched," said Morgan Gillis, executive director of the LiMo Foundation.&lt;br /&gt;&lt;br /&gt;Among NEC's new phones is the N905i, a 3G/GSM phone with HSDPA for data connectivity, mobile TV reception, GPS and support for wireless payment services.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1904763638964771920?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1904763638964771920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1904763638964771920'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/nec-shows-off-linux-mobile-phones.html' title='NEC shows off Linux mobile phones'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8849298805698458984</id><published>2008-02-18T10:33:00.004-07:00</published><updated>2008-02-18T10:39:48.200-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>Open source workers can earn more money !!!</title><content type='html'>IT workers who specialise in free and open source software are earning more than the national average for IT, according to the results of Australia's first open source census.&lt;br /&gt;&lt;br /&gt;The average full time salary of respondents to the Australian Open Source Industry and Community Census was between $76,000 and $100,000, but the 10 percent working on open source full time were earning “a lot more” according Pia Waugh of Waugh Partners consultancy, which conducted the survey.&lt;br /&gt;&lt;br /&gt;“The people who were working on free software full time were earning more than the average for the general community,” she said.&lt;br /&gt;&lt;br /&gt;When compared to Australian salaries across the board, salaries for full time open source workers were almost three times the national median.&lt;br /&gt;&lt;br /&gt;Women IT workers didn't fare as well though – the full time women workers who responded were earning an average of $46,000 to $60,000, Waugh said.&lt;br /&gt;&lt;br /&gt;Previewing the results of the census at Linux.conf.au on Friday, Pia and Jeff Waugh of Waugh Partners Consultancy said the online survey attracted 327 respondents who were working on open source software in either a personal or professional capacity. The majority of them (57 percent) were hobbyists who don't get paid to work on open source. Twenty-four percent were working on open source in their paid job some of the time, while the highest paid segment were the 10 percent working on open source full time.&lt;br /&gt;&lt;br /&gt;Waugh Partners believed the sample size was greater than 5 percent of the total open source industry size, making it a credible representation of the whole industry.&lt;br /&gt;&lt;br /&gt;“It suggests that people who work with open source are likely to have better skills and are likely to get better jobs,” Jeff Waugh said. “That is a really good message to take out to the education sector. We hope it will reinforce the decision by universities who do open source software, and the ones who aren't doing it will need to compete.”&lt;br /&gt;&lt;br /&gt;While many of the respondents said their knowledge of open source was a self taught skill, Queensland universities led the field of institutions attended by the respondents.&lt;br /&gt;&lt;br /&gt;The majority of respondents to the survey had completed some of their study at Queensland's University of Technology (QUT), while the University of Sydney came second. Two of the top four unis nominated were in Queensland.&lt;br /&gt;&lt;br /&gt;Source : &lt;a href="http://www.itnews.com.au"&gt;itnews&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-8849298805698458984?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8849298805698458984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8849298805698458984'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/open-source-workers-can-earn-more-money.html' title='Open source workers can earn more money !!!'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-5049346658554203885</id><published>2008-02-18T00:57:00.000-07:00</published><updated>2008-12-10T10:18:43.512-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>Five must-have apps for a new Linux install</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VjzGym6MKg/R7kDmBFvVXI/AAAAAAAAAFM/KqX5_PSJVi0/s1600-h/gftp.thumbnail.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_5VjzGym6MKg/R7kDmBFvVXI/AAAAAAAAAFM/KqX5_PSJVi0/s320/gftp.thumbnail.png" alt="" id="BLOGGER_PHOTO_ID_5168165999046776178" border="0" /&gt;&lt;/a&gt;I tend to hammer my Ubuntu laptop. Running a website like Tectonic means I am constantly installing new applications to try them out. Many of which I later have to remove or lie forgotten on the hard disk until I start to wonder where the +40GB of free hard disk space went to. And when that happens I tend to back up the essentials - email, documents and website backups - format my hard disk and install a clean version of Ubuntu. Doing this every few months means that a few times a year I get to really consider what the most important applications on my desktop are. &lt;p&gt;My most recent re-install was this weekend. I was running short of hard disk space and things were slowing down noticeably. I could have spent a good few hours cleaning out my hard disk but I don’t really want to. Sometimes a good clean-install is what is required.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The essential tools&lt;/strong&gt;&lt;br /&gt;So, having re-installed a brand new copy of Ubuntu and required updates, there are a few applications that I immediately download because, without them, I would not be able to do most of my day-to-day work. Here, in no particular order, are the five application or tools I have to have but aren’t included in a default Ubuntu install. If you work in media or website development many of these might sound familiar.&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.tectonic.co.za/wordpress/wp-content/uploads/2008/02/gftp.png" alt="gFTP" align="right" border="0" width="1" /&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;gFTP&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://gftp.seul.org/"&gt;gFTP&lt;/a&gt; has been around since the early days of Linux and while not flashy and full of features it does the job at hand, which is upload and download files for the sites I manage. gFTP’s clear interface and simple navigation make it an essential part of my desktop arsenal. I know that Ubuntu has the ability to connect to FTP sites using the nautilus file manager but I still find the side-by-side arrangement of gFTP, and the ability to compare a local development site with a live hosted one, essential. gFTP is also lightweight and quick, which makes it essential.&lt;br /&gt;Install gFTP:&lt;br /&gt;&lt;code&gt;sudo apt-get install gftp&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;a rel="attachment wp-att-2150" href="http://www.tectonic.co.za/?attachment_id=2150" title="Inkscape"&gt;&lt;img src="http://www.tectonic.co.za/wordpress/wp-content/uploads/2008/02/inkscape.png" alt="Inkscape" align="right" border="0" height="259" width="374" /&gt;&lt;/a&gt;&lt;img src="http://www.tectonic.co.za/wordpress/wp-content/uploads/2008/02/inkscape.png" alt="Inkscape" align="right" border="0" width="1" /&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Inkscape&lt;/strong&gt;&lt;br /&gt;For most graphic and drawing needs &lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt; is the best possible application. I use it every day for simple logos, icons and pictures for the websites I manage. There are many other, sometimes more feature-full, graphics alternatives available but I find that Inkscape is straighforward to use and the many features it does have don’t get in the way of doing simple graphics tasks. Combined with the Gimp, which is included in the Ubuntu default install, pretty much any graphics task is easy to do.&lt;br /&gt;Install Inkscape:&lt;br /&gt;&lt;code&gt;sudo apt-get install inkscape&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Apache, MySQL and PHP&lt;/strong&gt;&lt;br /&gt;I’ve put these together because there really is no point in having one but not the others. If you do any web development you’ll want to install the lot. Running a webserver on your own machine is the only way to develop and test websites. There was a time when installing these three and getting them to work together was something of a headache. In Ubuntu now it’s pretty much taken care of. To install MySQL you need to:&lt;br /&gt;&lt;code&gt;sudo apt-get install mysql-server-5.0&lt;/code&gt;&lt;br /&gt;During the install you will be prompted for a root password. Make sure to give one so you can log into MySQL when you’re done.&lt;br /&gt;Installing PHP and Apache next is equally simple:&lt;br /&gt;&lt;code&gt;sudo aptitude install apache2 php5 libapache2-mod-php5&lt;/code&gt;&lt;br /&gt;Once you’ve done that restart the Apache server:&lt;br /&gt;&lt;code&gt;sudo /etc/init.d/apache2 restart&lt;/code&gt;&lt;br /&gt;Point your browser to http://localhost to test if it works.&lt;/p&gt; &lt;p&gt;&lt;a rel="attachment wp-att-2149" href="http://www.tectonic.co.za/?attachment_id=2149" title="Bluefish"&gt;&lt;img src="http://www.tectonic.co.za/wordpress/wp-content/uploads/2008/02/bluefish.png" alt="Bluefish" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Bluefish&lt;/strong&gt;&lt;br /&gt;This is another of those applications that have been around since the early days of Linux and I have grown to feel quite attached to it. &lt;a href="http://bluefish.openoffice.nl/"&gt;Bluefish&lt;/a&gt; is a programming tool ideal for HTML and PHP work but equally at home with other languages. Syntax highlighting and a collection of pre-built HTML and PHP elements make Bluefish an everyday tool of mine. Like many of my other favourite and most-used applications Bluefish hides a great number of features behind a seemingly simple interface. One of these is Bluefish’s colour dropper feature which picks colours from anywhere on your screen and converts to HTML-friendly codes. It’s ideal for colour-matching for website designs.&lt;br /&gt;Install Bluefish:&lt;br /&gt;&lt;code&gt;sudo apt-get install bluefish&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Firefox extensions&lt;/strong&gt;&lt;br /&gt;The only other thing I need to install on a clean install of Ubuntu is a handful of Firefox extensions: &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;Firebug&lt;/a&gt;, &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/126"&gt;TinyURL Creator&lt;/a&gt; and &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;Web Developer&lt;/a&gt;. I find Firebug is fantastic at pinpointing weaknesses in the wbsites I am working on. It can isolate elements that are slowing down the site or just not working correctly. Web developer does similar things but I find that it is better for collecting amazing amounts of information about any website, from the size of the website to embedded images and styles. On a daily basis I use both.The other extension I always have is the TinyURL Creator. I spend a lot of my day sending or storing links to information I want to share. 300-character URLs are ugly and cumbersome.&lt;/p&gt; &lt;p&gt;Got favourite applications you can’t live without? Tell us in the comments.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-5049346658554203885?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/5049346658554203885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/5049346658554203885'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/five-must-have-apps-for-new-linux.html' title='Five must-have apps for a new Linux install'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5VjzGym6MKg/R7kDmBFvVXI/AAAAAAAAAFM/KqX5_PSJVi0/s72-c/gftp.thumbnail.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-9210054332465287357</id><published>2008-02-18T00:45:00.000-07:00</published><updated>2008-02-17T20:47:28.815-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>Prototype for a Fedora virtual machine appliance builder</title><content type='html'>&lt;div class="blog-entry-content"&gt; &lt;p&gt; For the &lt;a href="http://ovirt.org/"&gt;oVirt&lt;/a&gt; project the end product distributed to users consists of a LiveCD image to serve as the 'managed node' for hosting guests, and a virtual machine appliance to serve as the 'admin node' for the web UI. The excellant Fedora LiveCD creator tools obviously already deal with the first use case. For the second though we don't currently have a solution. The way we build the admin node appliance is to boot a virtual machine and run anaconda with a kickstart, and then grab the resulting installed disk image. While this works it involves a number of error-prone steps. Appliance images are not inherantly different from LiveCDs - instead of a ext3 filesystem inside an ISO using syslinux, we want a number of filesystems inside a partitioned disk using grub. The overall OS installation method is the same in both use cases. &lt;/p&gt; &lt;p&gt;After a day's hacking I've managed to re-factor the internals of the LiveCD creator, and add a new installation class able to create virtual machine appliances. As its input it takes a kickstart file, and the names and sizes for one or more output files (which will act as the disks). It reads the 'part' entries from the kickstart file and uses parted to create suitable partitions across the disks. It then uses kpartx to map the partitions and mounts them all in the chroot. The regular LiveCD installation process then takes place. Once complete, it writes a grub config and installs the bootloader into the MBR. The result is one or more files representing the appliance's virtual disks which can be directly booted in KVM / Xen / VMware. &lt;/p&gt; &lt;p&gt; The &lt;code&gt;virt-image&lt;/code&gt; tool defines a simple XML format which can be used to describe a virtual appliance. It specifies things like minimum recommended RAM and VCPUs, the disks associated with the appliance, and the hypervisor requirements for booting it (eg Xen paravirt vs bare metal / fullvirt). Given one of these XML files, the &lt;code&gt;virt-image&lt;/code&gt; tool can use libvirt to directly deploy a virtual machine without requiring any further user input. So an obvious extra feature for the virtual appliance creator is to output a virt-image XML description. With a demo kickstart file for the &lt;strong&gt;oVirt&lt;/strong&gt; admin node, I end up with 2 disks: &lt;/p&gt;  &lt;pre&gt;-rwxr-xr-x 1 root     root     5242880001 2008-02-17 14:48 ovirt-wui-os.raw&lt;br /&gt;-rwxr-xr-x 1 root     root     1048576001 2008-02-17 14:48 ovirt-wui-data.raw&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt; And an associated XML file &lt;/p&gt;  &lt;pre&gt;&lt;image&gt;&lt;br /&gt; &lt;name&gt;ovirt-wui&lt;/name&gt;&lt;br /&gt; &lt;domain&gt;&lt;br /&gt;   &lt;boot type="'hvm'"&gt;&lt;br /&gt;     &lt;guest&gt;&lt;br /&gt;       &lt;arch&gt;x86_64&lt;/arch&gt;&lt;br /&gt;     &lt;/guest&gt;&lt;br /&gt;     &lt;os&gt;&lt;br /&gt;       &lt;loader dev="'hd'/"&gt;&lt;br /&gt;     &lt;/os&gt;&lt;br /&gt;     &lt;drive disk="'ovirt-wui-os.raw'" target="'hda'/"&gt;&lt;br /&gt;     &lt;drive disk="'ovirt-wui-data.raw'" target="'hdb'/"&gt;&lt;br /&gt;   &lt;/boot&gt;&lt;br /&gt;   &lt;devices&gt;&lt;br /&gt;     &lt;vcpu&gt;1&lt;/vcpu&gt;&lt;br /&gt;     &lt;memory&gt;262144&lt;/memory&gt;&lt;br /&gt;     &lt;interface/&gt;&lt;br /&gt;     &lt;graphics/&gt;&lt;br /&gt;   &lt;/devices&gt;&lt;br /&gt; &lt;/domain&gt;&lt;br /&gt; &lt;storage&gt;&lt;br /&gt;   &lt;disk file="'ovirt-wui-os.raw'" use="'system'" format="'qcow2'/"&gt;&lt;br /&gt;   &lt;disk file="'ovirt-wui-data.raw'" use="'system'" format="'qcow2'/"&gt;&lt;br /&gt; &lt;/storage&gt;&lt;br /&gt;&lt;/image&gt;&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt; To deploy the appliance under KVM I run &lt;/p&gt;  &lt;pre&gt;# virt-image --connect qemu:///system ovirt-wui.xml&lt;br /&gt;# virsh --connect qemu:///system list&lt;br /&gt;Id Name                 State&lt;br /&gt;----------------------------------&lt;br /&gt; 1 ovirt-wui            running&lt;br /&gt;&lt;/pre&gt;   &lt;p&gt; Now raw disk images are really quite large - in this example I have a 5 GB and a 1 GB image. The LiveCD creator saves space by using resize2fs to shrink the ext3 filesystem, but this won't help disk images since the partitions are a fixed size regardless of what the filesystem size is. So to allow smaller the appliance creator is able to call out to &lt;code&gt;qemu-img&lt;/code&gt; to convert the raw file into a &lt;code&gt;qcow2&lt;/code&gt; (QEMU/KVM) or &lt;code&gt;vmdk&lt;/code&gt; (VMWare) disk image, both of which are grow on demand formats. The &lt;code&gt;qcow2&lt;/code&gt; image can even be compressed. Wtth the &lt;code&gt;qcow2&lt;/code&gt; format the disks for the &lt;strong&gt;oVirt&lt;/strong&gt; WUI reduce to 600 KB and 1.9 GB.  &lt;/p&gt;  &lt;p&gt; The LiveCD tools have already seen immense popularity in the Fedora community. Once I polish off &lt;a href="http://www.redhat.com/archives/fedora-livecd-list/2008-February/msg00085.html"&gt;this new code&lt;/a&gt; to be production quality, it is my hope that we'll see similar uptake by people interested in creating and distributing appliances. The great thing about basing the appliance creator on the Live CD codebase and using kickstart files for both, is that you can easily switch between doing regular anaconda installs, creating Live CDs and creating appliances at will, with a single kickstart file.&lt;/p&gt;&lt;p&gt;Source : &lt;a href="http://planet.fedoraproject.org/"&gt;Fedora&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;     &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-9210054332465287357?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9210054332465287357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9210054332465287357'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/prototype-for-fedora-virtual-machine.html' title='Prototype for a Fedora virtual machine appliance builder'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-158079803431493959</id><published>2008-02-18T00:43:00.000-07:00</published><updated>2008-12-10T10:18:43.657-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>The £99 laptop: how can it be so cheap?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VjzGym6MKg/R7kNNRFvVYI/AAAAAAAAAFU/xK2hItgZ60s/s1600-h/comp185_284300a.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_5VjzGym6MKg/R7kNNRFvVYI/AAAAAAAAAFU/xK2hItgZ60s/s320/comp185_284300a.jpg" alt="" id="BLOGGER_PHOTO_ID_5168176568961291650" border="0" /&gt;&lt;/a&gt;A new laptop computer for just £99 sounds like the kind of offer found in a spam e-mail or on a dodgy auction website. But the British company Elonex is launching the country’s first sub £100 computer later this month and hopes to be making 200,000 of them by the summer. It will be aimed at schoolchildren and teenagers, and looks set to throw the market for budget laptops wide open. &lt;p&gt; Called the One, it can be used as a traditional notebook computer or, with the screen detached from the keyboard, as a portable “tablet” – albeit without the planned touchscreen that Elonex had to abandon to hit its £99 price tag. Wi-fi technology lets users access the internet or swap music (and homework) files between computers wirelessly. &lt;/p&gt;&lt;p&gt; Personal files can be stored on the laptop’s 1GB of built-in memory or on a tough digital wristband (1-8GB, from £10) that children can plug into the USB socket of whichever computer they happen to be using, be it the One, a PC at school or their parents’ laptop. &lt;/p&gt;&lt;p&gt; So how can Elonex make a computer for so little? After all, UK consumers paid an average of £477 for a new laptop in 2007, according to the retail analyst GfK. &lt;/p&gt;&lt;!--#include file="m63-article-related-attachements.html"--&gt;&lt;p&gt; The secret is simple: open-source software. The One runs on Linux, which is a rival to Windows but completely free to use. Open-source software can be freely swapped or modified by anyone who wants it. In the past such operating systems (there are several of them) have been outgunned by the more sophisticated Windows programs. However, an open-source operating system is ideal for low-cost devices as it performs well on less powerful, cheaper hardware. &lt;/p&gt;&lt;p&gt; Naturally, the One is more basic than all-singing, all-dancing notebooks. Nonetheless, it includes a free word processor and spreadsheet, a free web browser and free e-mail software. It has a 7in screen, a rubbery little keyboard and no CD drive. And it all runs on an ageing chip that was designed before its target audience of seven-year-olds were even born. &lt;/p&gt;&lt;p&gt; InGear had an exclusive hands-on look at a preproduction One. The keyboard was slow and spongy and the built-in speakers could be louder but the screen was bright and the software package impressively varied (if rather sluggish) on this prototype. &lt;/p&gt;&lt;p&gt; Preloaded programs ranged from instant messaging software and a photo editor to games and an MP3 player. Moving files to and from the USB wristband was easy enough – and there’s a Bluetooth version with 2GB of memory (£120) that lets you swap files with mobile phones too. &lt;/p&gt;&lt;p&gt; Elonex will be launching the computer at the Education Show at the NEC in Birmingham at the end of this month, and is targeting schools as potential buyers. &lt;/p&gt;&lt;p&gt; The Elonex One isn’t the only low-cost educational laptop out there, however. Asus launched an open-source laptop in the run-up to Christmas last year. The Eee PC (about £200) has proved popular with adults as well as children, with its first shipment selling out nationwide within hours of its November release. &lt;/p&gt;&lt;p&gt; The One Laptop per Child initiative, which began in America, hopes to offer a “Give one, get one” event this year in Britain, where consumers can buy two computers – one for themselves and one for a child abroad – for about £200. &lt;/p&gt;&lt;p&gt; But open-source software has its problems. If no one owns it, there’s no one to complain to when things go wrong – and the One has no antivirus or firewall software built in. The old-fashioned feel of the One’s programs could also flummox modern cyber-kids used to the slick menus, wizards and plug-and-play simplicity of Windows. &lt;/p&gt;&lt;p&gt; Of course, in the context of laptops costing more than £1,000 – and even copies of Microsoft Office software retailing at as much as £120 – paying £99 for a fully functional, internet-ready laptop packed with software isn’t a huge risk to take. &lt;/p&gt;&lt;p&gt; And it’s this magic price that is the One’s biggest asset. The more that parents choose to buy Ones, the more music and games their kids will share, and the more sought after it will become. A laptop as the coolest thing in the playground? Stranger things have happened. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-158079803431493959?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/158079803431493959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/158079803431493959'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/99-laptop-how-can-it-be-so-cheap.html' title='The £99 laptop: how can it be so cheap?'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_5VjzGym6MKg/R7kNNRFvVYI/AAAAAAAAAFU/xK2hItgZ60s/s72-c/comp185_284300a.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7213385297685680490</id><published>2008-02-18T00:42:00.000-07:00</published><updated>2008-02-17T20:43:49.333-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>Red Hat unveils three new open-source projects</title><content type='html'>Red Hat has said its JBoss Enterprise SOA Platform will be available later this month and introduced three new open source projects designed to infuse transaction, management and other capabilities into its middleware.&lt;br /&gt;&lt;br /&gt;The announcements come a day after the company laid out its seven-year goal to own 50% of middleware deployments using JBoss to anchor platforms for portals, SOA, and application servers and services. Red Hat said its open source SOA platform would incorporate innovation derived from an array of open source projects offered on JBoss.org, three of which have just been introduced.&lt;br /&gt;&lt;br /&gt;The three projects are Black Tie, which will create a transaction engine to integrate or replace legacy transaction monitors, specifically Tuxedo, with the JBoss.org Transactions project, JBoss DNA, a registry for network services and RHQ, an SOA management platform that will eventually support both JBoss and Fedora platforms.&lt;br /&gt;&lt;br /&gt;The SOA Platform already incorporates components that started out as open source projects, including JBoss ESB, JBoss jBPM and JBoss Rules.&lt;br /&gt;&lt;br /&gt;ESB provides application and service integration, mediation, transformation and registry technology; jBPM adds service orchestration and workflow; while Rules includes management and integration of business policy and rules, as well as, content-based routing that relies on rules.&lt;br /&gt;&lt;br /&gt;Red Hat is following the same model it has for its Linux OS development. Court innovation among the vast Fedora open source project community and then tap the results for inclusion in Red Hat Enterprise Linux where it can be stabilised and supported.&lt;br /&gt;&lt;br /&gt;"We want to be disruptive with our innovation, but not disruptive in production" environments, said Sacha Labourey, vice president of engineering middleware at Red Hat.&lt;br /&gt;&lt;br /&gt;The SOA platform is designed to provide infrastructure to support SOAs, and application and business-process integration. The platform combines enterprise application integration, business process and rule management and event-driven architecture technologies. Red Hat officials say the platform is architected to support users involved in small-scale integration projects to full-blown SOA infrastructure deployments.&lt;br /&gt;&lt;br /&gt;Red Hat has taken on a number of partners to complement its efforts, including Active Endpoints, Amberpoint, SeeWhy, SOA Software, Vitria Technology, Information Builders and iWay Software.&lt;br /&gt;&lt;br /&gt;Red Hat said its Black Tie project would kick off in 60 days. The JBoss DNA project, the first in a series of SOA governance projects, is slated to begin in 30 days with more projects to be announced in 60 days.The RHQ project is already up and running.&lt;br /&gt;&lt;br /&gt;Craig Muzilla, vice president of the middleware business unit, said it was hard to say when commercial products would spring from the projects, but he said users could look for results by year-end.&lt;br /&gt;&lt;br /&gt;BlackTie will add C, C++ and mainframe compatible transaction capabilities to the JBoss.org Transactions project. The project will focus on emulating transaction-processing monitor application programming interfaces, and providing open source based legacy services that include security, naming, clustering and transactions.&lt;br /&gt;Red Hat said the project would support the ATMI programming interface to ease migrations. The Black Tie project is derived from technology from Ajuna, which JBoss acquired in 2005 before being bought by Red Hat.&lt;br /&gt;&lt;br /&gt;With its governance project, Red Hat hopes to set the tone for open source SOA management. JBoss DNA, a metadata repository and UDDI registry, is the kick-off project for what will be a number of management components, according to Muzilla. The project is based on technology Red Hat acquired when it bought MetaMetrix in April 2007.&lt;br /&gt;&lt;br /&gt;Red Hat also unveiled it RHQ management project, which it said would serve as the code base for the JBoss Operations Network v2.0, which is due to ship in the first half of this year. The Operations Network is the management foundation for Red Hat's middleware strategy. The RHQ project aims to develop a common services management platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-7213385297685680490?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7213385297685680490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7213385297685680490'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/red-hat-unveils-three-new-open-source.html' title='Red Hat unveils three new open-source projects'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1240207756694207581</id><published>2008-02-18T00:27:00.000-07:00</published><updated>2008-02-17T20:30:42.035-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Master-Master Replication With MySQL 5 On Fedora 8 - Page 3</title><content type='html'>&lt;h4&gt;3.4 Export MySQL Dump On System 1&lt;/h4&gt; &lt;p&gt;Now we create a dump of the existing database and transfer it to system 2.&lt;/p&gt; &lt;p class="command"&gt;mysql -u root -p&lt;/p&gt; &lt;p class="command"&gt;USE exampledb;&lt;br /&gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;SHOW MASTER STATUS;&lt;/p&gt; &lt;p&gt;The output should look like this. Note down the file and the position - you'll need both later.&lt;/p&gt; &lt;p class="system"&gt;+------------------+----------+---------------------+------------------+&lt;br /&gt;| File             | Position | Binlog_Do_DB        | Binlog_Ignore_DB |&lt;br /&gt;+------------------+----------+---------------------+------------------+&lt;br /&gt;| mysql-bin.000004 |       98 | exampledb,exampledb |                  |&lt;br /&gt;+------------------+----------+---------------------+------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;/p&gt; &lt;p&gt;Open a second terminal for system 1, create the dump and transfer it to system 2. &lt;span class="highlight"&gt;Don't leave the MySQL-shell at this point - otherwise you'll loose the read-lock.&lt;/span&gt;&lt;/p&gt; &lt;p class="command"&gt;cd /tmp/&lt;br /&gt;mysqldump -u root -p%mysql_root_password% --opt exampledb &gt; sqldump.sql&lt;br /&gt;scp sqldump.sql root@192.168.0.200:/tmp/&lt;/p&gt; &lt;p&gt; Afterwards close the second terminal and switch back to the first. Remove the read-lock and leave the MySQL-shell.&lt;/p&gt; &lt;p class="command"&gt;UNLOCK TABLES;&lt;br /&gt;quit;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;3.5 Import MySQL Dump On System 2&lt;/h4&gt; &lt;p&gt;Time to import the database dump on system 2.&lt;/p&gt; &lt;p class="command"&gt;mysqladmin --user=root --password=%mysql_root_password% stop-slave&lt;br /&gt;cd /tmp/&lt;br /&gt;mysql -u root -p%mysql_root_password% exampledb &lt;&gt;&lt;h4&gt;3.6 System 2 As Master&lt;/h4&gt; &lt;p&gt;Now we need information about the master status on system 2.&lt;/p&gt; &lt;p class="command"&gt;mysql -u root -p&lt;br /&gt;USE exampledb;&lt;br /&gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;SHOW MASTER STATUS;&lt;/p&gt; &lt;p&gt;The output should look like this. Note down the file and the position - you'll need both later.&lt;/p&gt; &lt;p class="system"&gt;+------------------+----------+---------------------+------------------+&lt;br /&gt;| File             | Position | Binlog_Do_DB        | Binlog_Ignore_DB |&lt;br /&gt;+------------------+----------+---------------------+------------------+&lt;br /&gt;| mysql-bin.000003 |      958 | exampledb,exampledb |                  |&lt;br /&gt;+------------------+----------+---------------------+------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;/p&gt; &lt;p&gt;Afterwards remove the read-lock.&lt;/p&gt; &lt;p class="command"&gt;UNLOCK TABLES;&lt;/p&gt; &lt;p&gt;At this point we're ready to become the master for system 1. &lt;span class="highlight"&gt;Replace %mysql_slaveuser_password% with the password you choose and be sure that you replace the values for MASTER_LOG_FILE and MASTER_LOG_POS with the values that you noted down at step 3.4!&lt;/span&gt;&lt;/p&gt; &lt;p class="command"&gt;CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave2_user', MASTER_PASSWORD='%mysql_slaveuser_password%', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=98;&lt;/p&gt; &lt;p&gt;Now start the slave ...&lt;/p&gt; &lt;p class="command"&gt;START SLAVE;&lt;/p&gt; &lt;p&gt;... and take a look at the slave status. It's very important that both, &lt;span class="system"&gt;Slave_IO_Running&lt;/span&gt; and &lt;span class="system"&gt;Slave_SQL_Running&lt;/span&gt; are set to  &lt;span class="system"&gt;Yes&lt;/span&gt;. If they're not, something went wrong and you should take a look at  the logs.&lt;span class="system"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="command"&gt;SHOW SLAVE STATUS;&lt;/p&gt; &lt;pre&gt;+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+&lt;br /&gt;| Slave_IO_State                   | Master_Host   | Master_User | Master_Port | Connect_Retry | Master_Log_File  | Read_Master_Log_Pos | Relay_Log_File     | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB     | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |&lt;br /&gt;+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+&lt;br /&gt;| Waiting for master to send event | 192.168.0.100 | slave2_user |        3306 |            60 | mysql-bin.000004 |                  98 | slave-relay.000002 |           235 | mysql-bin.000004      | Yes              | Yes               | exampledb,exampledb |                     |                    |                        |                         |                             |          0 |            |            0 |                  98 |             235 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 |&lt;br /&gt;+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;/pre&gt;   &lt;p&gt;Afterwards leave the MySQL-shell.&lt;/p&gt; &lt;p class="command"&gt;quit;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;3.7 System 1 As Master&lt;/h4&gt; &lt;p&gt;Open a MySQL-shell on system 1 ...&lt;/p&gt; &lt;p class="command"&gt;mysql -u root -p&lt;/p&gt; &lt;p&gt;... and stop the slave.&lt;/p&gt; &lt;p class="command"&gt;STOP SLAVE;&lt;/p&gt; &lt;p&gt;At this point we're ready to become the master for system 2. &lt;span class="highlight"&gt;Replace %mysql_slaveuser_password% with the password you choose and be sure that you replace the values for MASTER_LOG_FILE and MASTER_LOG_POS with the values that you noted down at step 3.6!&lt;/span&gt;&lt;/p&gt; &lt;p class="command"&gt;CHANGE MASTER TO MASTER_HOST='192.168.0.200', MASTER_USER='slave1_user', MASTER_PASSWORD='%mysql_slaveuser_password%', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=958;&lt;/p&gt; &lt;p&gt;Now start the slave ...&lt;/p&gt; &lt;p class="command"&gt;START SLAVE;&lt;/p&gt; &lt;p&gt; ... and take a look at the slave status. It's very important that both, &lt;span class="system"&gt;Slave_IO_Running&lt;/span&gt; and &lt;span class="system"&gt;Slave_SQL_Running&lt;/span&gt; are set to  &lt;span class="system"&gt;Yes&lt;/span&gt;. If they're not, something went wrong and you should take a look at  the logs.&lt;/p&gt; &lt;p class="command"&gt;SHOW SLAVE STATUS;&lt;/p&gt; &lt;pre&gt;+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+&lt;br /&gt;| Slave_IO_State                   | Master_Host   | Master_User | Master_Port | Connect_Retry | Master_Log_File  | Read_Master_Log_Pos | Relay_Log_File     | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB     | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |&lt;br /&gt;+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+&lt;br /&gt;| Waiting for master to send event | 192.168.0.200 | slave1_user |        3306 |            60 | mysql-bin.000003 |                 958 | slave-relay.000002 |           235 | mysql-bin.000003      | Yes              | Yes               | exampledb,exampledb |                     |                    |                        |                         |                             |          0 |            |            0 |                 958 |             235 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 |&lt;br /&gt;+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;/pre&gt; &lt;p&gt;Afterwards leave the MySQL shell.&lt;/p&gt; &lt;p class="command"&gt;quit;&lt;/p&gt; &lt;p&gt;If all went ok, the master-master replication is working now. Check your logs on both systems if you encounter problems.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;4 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Fedora: &lt;a title="http://fedoraproject.org/" target="_blank" href="http://fedoraproject.org/"&gt;http://fedoraproject.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;MySQL: &lt;a title="http://www.mysql.com/" target="_blank" href="http://www.mysql.com/"&gt;http://www.mysql.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/master-master-replication-with-mysql-5_17.html"&gt;Previous&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1240207756694207581?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1240207756694207581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1240207756694207581'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/master-master-replication-with-mysql-5_5836.html' title='Master-Master Replication With MySQL 5 On Fedora 8 - Page 3'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-3591661637832960409</id><published>2008-02-18T00:11:00.000-07:00</published><updated>2008-12-10T10:18:44.082-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Master-Master Replication With MySQL 5 On Fedora 8 - Page 2</title><content type='html'>&lt;h3&gt;3 Replication&lt;/h3&gt; &lt;h4&gt;3.1 Firewall Configuration On Both Systems&lt;/h4&gt; &lt;p&gt;Versions of &lt;span class="system"&gt;system-config-firewall-tui&lt;/span&gt; before 1.0.12-4.x had a bug in conjunction with custom rules (they were not aquired) - so check which version is installed on your system.&lt;/p&gt; &lt;p class="command"&gt;yum list installed | grep firewall&lt;/p&gt; &lt;p&gt;If the installed version is lower than 1.0.12-4.x you have to update to the new version. While I was writing this howto, the new version was only available in the updates-testing repository.&lt;/p&gt; &lt;p class="command"&gt;yum --enablerepo=updates-testing update system-config-firewall-tui&lt;/p&gt; &lt;p&gt;In order that the mysql servers are able to connect each other you have to open the port 3306 (tcp) on both systems.&lt;/p&gt; &lt;p class="command"&gt;system-config-firewall&lt;/p&gt;&lt;p style="text-align: left;" class="command"&gt;Click on "&lt;span class="system"&gt;Customize&lt;/span&gt;"&lt;/p&gt;&lt;p class="command"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VjzGym6MKg/R7j4rxFvVUI/AAAAAAAAAE0/qkcJDkpBjgU/s1600-h/fw1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5VjzGym6MKg/R7j4rxFvVUI/AAAAAAAAAE0/qkcJDkpBjgU/s320/fw1.jpg" alt="" id="BLOGGER_PHOTO_ID_5168154003203118402" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;Insert the MySQL-port into the section "&lt;span class="system"&gt;Other Ports&lt;/span&gt;" as shown on the screenshot below and click on "&lt;span class="system"&gt;OK&lt;/span&gt;" to save the settings.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VjzGym6MKg/R7j4sBFvVVI/AAAAAAAAAE8/AIBCC4gk6zQ/s1600-h/fw2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_5VjzGym6MKg/R7j4sBFvVVI/AAAAAAAAAE8/AIBCC4gk6zQ/s320/fw2.jpg" alt="" id="BLOGGER_PHOTO_ID_5168154007498085714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Click on "&lt;span class="system"&gt;OK&lt;/span&gt;".&lt;br /&gt;&lt;/div&gt;&lt;p class="command"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VjzGym6MKg/R7j4sBFvVWI/AAAAAAAAAFE/PYFHC_0fn-U/s1600-h/fw3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_5VjzGym6MKg/R7j4sBFvVWI/AAAAAAAAAFE/PYFHC_0fn-U/s320/fw3.jpg" alt="" id="BLOGGER_PHOTO_ID_5168154007498085730" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;3.2 Log Directory On Both Systems&lt;/h4&gt; &lt;p&gt;In order that the MySQL server is able to create log-files we have to create a directory and pass the ownership to MySQL.&lt;/p&gt; &lt;p class="command"&gt;mkdir /var/log/mysql/&lt;br /&gt;chown mysql:mysql /var/log/mysql/&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;3.3 MySQL Configuration&lt;/h4&gt; &lt;p&gt;In the next two steps we adjust the MySQL configuration on both systems for master-master replication.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;3.3.1 System 1&lt;/h4&gt; &lt;p class="command"&gt;vi /etc/my.cnf&lt;/p&gt; &lt;p&gt;Add the following lines to the section [mysqld]:&lt;/p&gt; &lt;p class="system"&gt;server-id = 1&lt;br /&gt;replicate-same-server-id = 0&lt;br /&gt;auto-increment-increment = 2&lt;br /&gt;auto-increment-offset = 1&lt;/p&gt; &lt;p class="system"&gt;master-host = 192.168.0.200&lt;br /&gt;master-user = slave1_user&lt;br /&gt;master-password = %mysql_slaveuser_password%&lt;br /&gt;master-connect-retry = 60&lt;br /&gt;replicate-do-db = exampledb&lt;/p&gt; &lt;p class="system"&gt;log-bin = /var/log/mysql/mysql-bin.log&lt;br /&gt;binlog-do-db = exampledb&lt;/p&gt; &lt;p class="system"&gt;relay-log = /var/lib/mysql/slave-relay.log&lt;br /&gt;relay-log-index = /var/lib/mysql/slave-relay-log.index&lt;/p&gt; &lt;p class="system"&gt;expire_logs_days        = 10&lt;br /&gt;max_binlog_size         = 500M&lt;/p&gt; &lt;p&gt;Afterwards restart the MySQL server.&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/mysqld restart&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;3.3.2 System 2&lt;/h4&gt; &lt;p class="command"&gt;vi /etc/my.cnf&lt;/p&gt; &lt;p&gt;Add the following lines to the section [mysqld]:&lt;/p&gt; &lt;p class="system"&gt;server-id = 2&lt;br /&gt;replicate-same-server-id = 0&lt;br /&gt;auto-increment-increment = 2&lt;br /&gt;auto-increment-offset = 2&lt;/p&gt; &lt;p class="system"&gt;master-host = 192.168.0.100&lt;br /&gt;master-user = slave2_user&lt;br /&gt;master-password = %mysql_slaveuser_password%&lt;br /&gt;master-connect-retry = 60&lt;br /&gt;replicate-do-db = exampledb&lt;/p&gt; &lt;p class="system"&gt;log-bin= /var/log/mysql/mysql-bin.log&lt;br /&gt;binlog-do-db = exampledb&lt;/p&gt; &lt;p class="system"&gt;relay-log = /var/lib/mysql/slave-relay.log&lt;br /&gt;relay-log-index = /var/lib/mysql/slave-relay-log.index&lt;/p&gt; &lt;p class="system"&gt;expire_logs_days        = 10&lt;br /&gt;max_binlog_size         = 500M&lt;/p&gt; &lt;p&gt;Afterwards restart the MySQL server.&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/mysqld restart&lt;/p&gt;&lt;p style="text-align: center;" class="command"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/master-master-replication-with-mysql-5.html"&gt;Previous&lt;/a&gt;||&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/master-master-replication-with-mysql-5_5836.html"&gt;Next&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-3591661637832960409?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/3591661637832960409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/3591661637832960409'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/master-master-replication-with-mysql-5_17.html' title='Master-Master Replication With MySQL 5 On Fedora 8 - Page 2'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5VjzGym6MKg/R7j4rxFvVUI/AAAAAAAAAE0/qkcJDkpBjgU/s72-c/fw1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7723741432477715192</id><published>2008-02-17T23:52:00.000-07:00</published><updated>2008-02-17T20:38:46.357-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How To'/><title type='text'>Master-Master Replication With MySQL 5 On Fedora 8</title><content type='html'>This document describes how to set up master-master replication with MySQL 5 on Fedora 8. Since version 5, MySQL comes with built-in support for master-master replication, solving the problem that can happen with self-generated keys. In former MySQL versions, the problem with master-master replication was that conflicts arose immediately if node A and node B both inserted an auto-incrementing key on the same table. The advantages of master-master replication over the traditional master-slave replication are that you don't have to modify your applications to make write accesses only to the master, and that it is easier to provide high-availability because if the master fails, you still have the other master.&lt;br /&gt;&lt;p&gt;This howto is a practical guide without any warranty - it doesn't cover the theoretical backgrounds. There are many ways to set up such a system - this is the way I chose.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;1 Preparation&lt;/h3&gt; &lt;p&gt;For this howto I set up two Fedora 8 systems (minimal installation without gui etc.) with the following configuration.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.1 System 1&lt;/h4&gt; &lt;p&gt;Hostname: &lt;span class="system"&gt;server1.example.com&lt;/span&gt;&lt;br /&gt;IP: &lt;span class="system"&gt;192.168.0.100&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.2 System 2&lt;/h4&gt; &lt;p&gt;Hostname: &lt;span class="system"&gt;server2.example.com&lt;/span&gt;&lt;br /&gt;IP: &lt;span class="system"&gt;192.168.0.200&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;2 MySQL&lt;/h3&gt; &lt;h4&gt;2.1 Needed Packages On Both Systems&lt;/h4&gt; &lt;p&gt;If you haven't installed MySQL on both systems you can install it (client &amp;amp; server) via:&lt;/p&gt; &lt;p class="command"&gt;yum -y install mysql mysql-server&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;2.2 MySQL Server Initial Start On Both Systems&lt;/h4&gt; &lt;p&gt;Start the MySQL server.&lt;/p&gt; &lt;p class="command"&gt;/etc/init.d/mysqld start&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;2.3 MySQL Root Password&lt;/h4&gt; &lt;h4&gt;2.3.1 Both Systems&lt;/h4&gt; &lt;p&gt;Set a password for the MySQL root-user on localhost.&lt;/p&gt; &lt;p class="command"&gt;mysqladmin -u root password %sql_root_password%&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;2.3.2 System 1&lt;/h4&gt; &lt;p&gt;Set a password for the MySQL root-user on server1.example.com.&lt;/p&gt; &lt;p class="command"&gt;mysqladmin -u root -h server1.example.com password %mysql_root_password%&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;2.3.3 System 2&lt;/h4&gt; &lt;p&gt;Set a password for the MySQL root-user on server2.example.com.&lt;/p&gt; &lt;p class="command"&gt;mysqladmin -u root -h server2.example.com password %mysql_root_password%&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;2.4 MySQL Replication User&lt;/h4&gt; &lt;h4&gt;2.4.1 System 1&lt;/h4&gt; &lt;p&gt;Create the replication user &lt;span class="system"&gt;&lt;/span&gt;that System 2 will use&lt;span class="system"&gt;&lt;/span&gt; to access the MySQL database on System 1.&lt;span class="system"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="command"&gt;mysql -u root -p&lt;/p&gt; &lt;p class="command"&gt;GRANT REPLICATION SLAVE ON *.* TO 'slave2_user'@'%' IDENTIFIED BY '%mysql_slaveuser_password%';&lt;br /&gt;FLUSH PRIVILEGES;&lt;br /&gt;quit;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;2.4.2 System 2&lt;/h4&gt; &lt;p&gt;Create the replication user &lt;span class="system"&gt;&lt;/span&gt;that System 1 will use&lt;span class="system"&gt;&lt;/span&gt; to access the MySQL database on System 2.&lt;/p&gt; &lt;p class="command"&gt;mysql -u root -p&lt;/p&gt; &lt;p class="command"&gt;GRANT REPLICATION SLAVE ON *.* TO 'slave1_user'@'%' IDENTIFIED BY '%mysql_slaveuser_password%';&lt;br /&gt;FLUSH PRIVILEGES;&lt;br /&gt;quit;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;2.5 Database On System 2&lt;/h4&gt; &lt;p&gt;I proceed on the assumption that the database &lt;span class="system"&gt;exampledb&lt;/span&gt; is already existing on System 1 - containing tables with records. So we have to create an empty database with the same name as the existing database on System 1.&lt;/p&gt; &lt;p class="command"&gt;mysql -u root -p&lt;/p&gt; &lt;p class="command"&gt;CREATE DATABASE exampledb;&lt;br /&gt;quit;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://linuxtomorrow.blogspot.com/2008/02/master-master-replication-with-mysql-5_17.html"&gt;Next&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-7723741432477715192?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7723741432477715192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7723741432477715192'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/master-master-replication-with-mysql-5.html' title='Master-Master Replication With MySQL 5 On Fedora 8'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1243105436162501659</id><published>2008-02-17T23:46:00.000-07:00</published><updated>2008-02-17T14:50:18.847-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>Ubuntu Goes Commercial ?</title><content type='html'>If youread a &lt;a href="http://itmanagement.earthweb.com/osrc/article.php/12068_3727706_1"&gt;post&lt;/a&gt; by Bruce Byfield, where he raises an interesting question: after the fact that Canonical will try and offer commercial software from a specific repository, would anyone use it? And if not, could it alienate other users of Ubuntu from using the distribution at all?&lt;br /&gt;&lt;br /&gt;He continues to argue for a whole 2-pages-long article for something that I don't even think exist. His main point is that this idea of commercial repositories has been tried out before and it didn't work. Why try now? After all, it's just a matter of time until something else will replace our current software:&lt;blockquote&gt;A download service might find a temporary niche in offering software for which no free equivalent exists. For instance, despite recent improvements in apps like Kooka and Tesseract, someone who regularly needed to convert scanned text to a usable format might welcome a GNU/Linux version of OmniPage. The trouble is, given the speed with which free software is developing, such a market would be temporary, lasting a year or two at most. A service specializing in these niches would continually lose out to maturing free software, with no prospect of replacement products.&lt;/blockquote&gt;But why doesn't he see that this service may not be different from other software distribution methods? It seems he more argues the fact that there are proprietary and commercial application offers in Linux, than the fact that they are provided in Ubuntu. But, as it seems to me, the main reason for Canonical to do so is not for all Ubuntu Desktop users - its for business users and maybe even Ubuntu Server users, who may use those proprietary applications for their businesses and need a standard way of installing applications. Why should the way of installing Parallels be different than one for installing Open Office? It should not.&lt;br /&gt;&lt;br /&gt;Sun has its own software distribution system, just as Apple's Mac OS X and MS Windows do. Why is it forbidden for Linux distributions to have one that includes commercial software?&lt;br /&gt;&lt;br /&gt;I can provide the example of commercial software that I have used and had to install on Linux: IBM Rational ClearCase (and trust me, moving to other version management tools was much more expensive in human-hours because of the huge amounts of code and fast workforce turnover). Yes, the are free/open source alternatives, but they were not viable for that specific case.&lt;br /&gt;&lt;br /&gt;I see the offer by Canonical as very pragmatic, practical and not hurting Ubuntu in no way. Ubuntu is Linux distribution. Canonical is the company behind it, which goal is to make money. So what is the problem that they try to monetize the free infrastructure they supported to build? The infrastructure is and will remain free, and as there's no additional effort required (except maybe for billing system in-place), Canonical has nothing to loose - and much to gain.&lt;br /&gt;&lt;br /&gt;Here's another question while we're here: why the author doesn't criticize the Red Hat's model where you pay for the distribution first, and then if you use proprietary software, then for the software once more? Is it that much better? I don't see users ditch Red Hat and its siblings (Fedora and CentOS) just because Red Hat has proprietary parts in it.&lt;br /&gt;&lt;br /&gt;And I don't believe that Ubuntu users will drop using Ubuntu because Canonical has proprietary repositories.&lt;br /&gt;&lt;br /&gt;I side Canonical in this specific case not because I'm pro-Ubuntu. While I am pro-Ubuntu, I'm really distribution-agnostic person (although I do have some emotional and personal allegiance to Gentoo). But I think that author just emotionally reacts on the offering of something proprietary for Linux. While it is perfectly fine for some users to be upset, business people might actually be glad that they will be able to get the software they anyway want or need in a standard fashi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-1243105436162501659?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1243105436162501659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1243105436162501659'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/ubuntu-goes-commercial.html' title='Ubuntu Goes Commercial ?'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8215350995958928419</id><published>2008-02-17T15:08:00.000-07:00</published><updated>2008-02-17T15:10:49.446-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>SCO Lives! Aarrgh! Rawrr!</title><content type='html'>&lt;p&gt;The more I watch SCO's progress -- from Unix vendor to patent-wielding lawsuit machine to bankrupt has-been, and now a privately funded corporate reboot -- the more I feel like I'm watching one of those cheesy 1960s Japanese monster movies with a nigh-unkillable creature from outer space.  The super heat ray didn't work on the monster, the mysterious Element X that spews out Radiation Y didn't have any effect either, and now the scientists are falling back on the absolute last resort plan of them all: Awaken Godzilla!  Would that we &lt;em&gt;had&lt;/em&gt; Godzilla here, though.&lt;/p&gt; &lt;p&gt;Yes, SCO has lurched to life once more.  The details of SCO's resurrection are &lt;a href="http://www.informationweek.com/news/showArticle.jhtml;jsessionid=IQEWJO5XKO012QSNDLPCKH0CJUNN2JVN?articleID=206504323" target="_blank"&gt;still sketchy&lt;/a&gt;, but the plan seems plain to anyone who's followed the story so far.  The way I see it, the "&lt;a href="http://ir.sco.com/releasedetail.cfm?ReleaseID=294412" target="_blank"&gt;tremendous investment opportunity&lt;/a&gt;" that SCO's new investors are talking about in their statement is a) to drag out the court battle with Novell (NSDQ: &lt;a target="_blank" href="http://www.techweb.com/financialCenter/index.jhtml?Account=techweb&amp;amp;Page=QUOTE&amp;amp;Ticker=NOVL" class="stockLink"&gt;NOVL&lt;/a&gt;) and IBM (NYSE: &lt;a target="_blank" href="http://www.techweb.com/financialCenter/index.jhtml?Account=techweb&amp;amp;Page=QUOTE&amp;amp;Ticker=IBM" class="stockLink"&gt;IBM&lt;/a&gt;) as long as humanly possible, b) score as many wild hits as possible in court to scare people away from Linux and open source, and c) Profit!&lt;/p&gt; &lt;p&gt;I do have to wonder how much SNCP, SCO's new investor, understands about what it's getting into.  The one sentence from the release that hints at a business plan other than suing everything that moves is "SNCP has developed a business plan for SCO that includes unveiling new product lines aimed at global customers", which is as vague as trying to predict the weather a year from Monday.  Do you know of &lt;em&gt;anyone&lt;/em&gt; with even a kernel (pun intended) of technical savvy who would have anything to do with SCO at this point, either as an investor, a customer, or an employee?&lt;/p&gt; &lt;p&gt;My hope is that SNCP will pump a bunch of money into SCO, discover that there's no immediate benefit to doing so other than protracted legal struggles and, eventually needing to pay off the $25 million it owes Novell, give up and move on to another boondoggle.  My nightmare, however, is a rejuvenated SCO that manages to continue being an indefinite irritant in the side of open source everywhere.  Having &lt;a href="http://en.wikipedia.org/wiki/Mothra" target="_blank"&gt;Mothra&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Image:Mothra_Larva.jpg" target="_blank"&gt;nesting in the Tokyo Tower&lt;/a&gt; seems positively benign in comparison&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.informationweek.com/blog/main/archives/2008/02/sco_lives_aarrg.html"&gt;Full Article&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-8215350995958928419?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8215350995958928419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8215350995958928419'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/sco-lives-aarrgh-rawrr.html' title='SCO Lives! Aarrgh! Rawrr!'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-9104854864596968193</id><published>2008-02-17T15:01:00.000-07:00</published><updated>2008-02-17T15:03:02.849-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>The Demise Of Commercial Open Source</title><content type='html'>&lt;span id="articleBody"&gt;&lt;p&gt;Steve Goodman, co-founder and CEO of network management startup &lt;a href="http://www.packettrap.com/"&gt;PacketTrap Networks&lt;/a&gt;, is predicting that commercial open source companies are doomed to fail. Goodman's not railing against open source or commercial software, per se. It's converting the former into the latter that he sees as inherently flawed. &lt;/p&gt; &lt;p&gt;Goodman makes his argument in a &lt;a href="http://www.packettrap.com/blog/?p=43"&gt;blog posting&lt;/a&gt; published on PacketTrap's Web site. "The interest of a commercial vendor is opposite to that of an open source project," he writes. "Commercial vendors answer to road maps, salespeople, and shareholders." &lt;/p&gt; &lt;p&gt;A &lt;a href="http://www.packettrap.com/company/mediarelations.html"&gt;white paper&lt;/a&gt; lays out the argument in more detail. In it, PacketTrap refers to commercial open source as "proprietary open source" and identifies 21 startups--from ActiveGrid to Zimbra--that it puts into that bucket.&lt;/p&gt; &lt;p&gt;What does Goodman think is the right approach? His own, of course. PacketTrap is a commercial software company that integrates open source network monitoring and management tools into its own PT360 Tool Suite. Rather than trying to manage an open source project as, say, MySQL has done, PacketTrap leaves project management to the open source community and concentrates on developing a commercial platform that works with the code that community delivers, such as &lt;a href="http://www.nagios.org/"&gt;Nagios&lt;/a&gt; for network monitoring. &lt;/p&gt; &lt;p&gt;PT360 is in beta testing now. It's aimed at the mid-market, though large companies such as Boeing, Home Depot, Pfizer, and the U.S. Navy are early adopters. &lt;/p&gt; &lt;p&gt;A basic version PT360 is free, while a professional version is due in the next few weeks. This so-called "freemium" model-- give a product away, then charge for a better version -- has its own critics.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.informationweek.com/blog/main/archives/2008/02/the_demise_of_c.html"&gt;Full Article&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-9104854864596968193?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9104854864596968193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9104854864596968193'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/demise-of-commercial-open-source.html' title='The Demise Of Commercial Open Source'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2048201243697366193</id><published>2008-02-17T14:39:00.000-07:00</published><updated>2008-02-17T14:41:54.892-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><title type='text'>Going Mobile: The Year of the Smart Phone Startup</title><content type='html'>&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;If you've always been itching to launch a startup but just couldn't come up with a killer idea, well, your ship is about to come in.  No, it won't be quite as good as the Internet Bubble years, when any fool could raise a few million (hell, $30 or $40 million) to sell dog food online - no, really - but not bad, either.&lt;br /&gt;&lt;br /&gt;When things are more or less steady state, you have to do something new and original to have a viable business plan in the tech space.  But when times and technology really change (one of those paradigm shifty things), then you don't actually have to come up with something new to do at all - you just have to be the first to do something old in a new way.  If you look back, that's what 95% of the Bubble companies tried.&lt;br /&gt;&lt;br /&gt;True, 95% of those companies also failed.  But that's not likely to happen this time around.  This time, things will be a lot different, because while the platform is new, almost all of the trial and error on the business models has already occurred, the users are already trained to eat the dog food (as it were), the money is primed to flow, the standards are in place - and here's the really new twist - open source software has made the scene. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;So where exactly is this grand opportunity to be found?  I expounded on it in my monthly column for &lt;em&gt;&lt;strong&gt;MHT&lt;/strong&gt;&lt;/em&gt; (formerly MassHighTech), the New England high tech paper, last week in &lt;a href="http://masshightech.bizjournals.com/masshightech/stories/2008/02/11/newscolumn3.html"&gt;a piece that reads in part&lt;/a&gt; as follows:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt; &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; The market segment in question is the mobile sector, where 2008 will usher in a multiyear period of opportunity for entrepreneurs and investors. The dynamics will echo two boom periods of the past -- the rapid expansion of the PC marketplace in the early 1980s, and the Internet explosion of the late 1990s. The device that will most robustly deliver on these antecedents is the smart phone, initially deployed (like the first personal computers) with many competing operating systems, and now able (like the PCs of the Internet boom) to satisfactorily access the Internet and the web. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; In many ways, however, this boom will be better. Unlike the early, anemic, expensive PCs that people had never used before, a smart phone is simply a much more versatile telephone -- something a billion people already own. With a decade of Internet and web experience behind us, there will be far fewer failed efforts to determine what people really will and won't do online. And these mobile devices will be able to perform new tricks, using as many as nine separate on-board radios to interact with an ever-expanding "Internet of things," such as ATMs, film kiosks, movie posters and much more. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; Best of all, the underlying technology is far less proprietary than it was during either the PC or the Internet boom. Various flavors of Linux now power the majority of mobile devices, and the Google Android project aims to provide developers with platform independence as well. The final part of the equation fell into place in just the last few months, as dominant telecommunications carriers grudgingly came to realize that they are better served (assuming they still have a choice) by opening their phones to independent software vendors than by shutting them out. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; The result is a wonderful convergence of factors creating rapidly accessible opportunities for startups -- an abundance of empty open standards and open-source-based niches, alignment with the strategic direction of giants such as &lt;a href="http://masshightech.bizjournals.com/masshightech/related_content.html?topic=Google%20Inc"&gt;Google Inc.&lt;/a&gt; and &lt;a href="http://masshightech.bizjournals.com/masshightech/related_content.html?topic=Motorola%20Inc"&gt;Motorola Inc.&lt;/a&gt;, and a coincident industry shift toward provisioning software as a service. Hundreds of opportunities -- many obvious -- offer all types of services to mobile, locationally aware platforms, from social networking, to push advertising to financial services. &lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Do I really believe all that?  Yes I do.  I don't expect that it will reach full flower in 2008, but I definitely expect the bus to leave the station and pick up real speed this year.  It's going to be a very big bus, and most of the seats are still empty.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Just don't try and sell Kibble (R) to Smartphone users.  We already know that dog won't hunt.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style=";font-family:Verdana;font-size:85%;"  &gt; You can read the rest of the article &lt;a href="http://masshightech.bizjournals.com/masshightech/stories/2008/02/11/newscolumn3.html"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-2048201243697366193?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2048201243697366193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2048201243697366193'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/going-mobile-year-of-smart-phone.html' title='Going Mobile: The Year of the Smart Phone Startup'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-4800437483554341115</id><published>2008-02-17T06:43:00.000-07:00</published><updated>2008-12-10T10:18:44.273-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>OpenOffice Text Files That Are Larger Than 65,536 Rows Cannot Open / Imported</title><content type='html'>This sucks, Open office 2.3 spreadsheet cannot open or import text files that are larger than 65,536 rows. Basically, I need 100k rows. However, it is possible to recompile OO to extend rows limitation. From the &lt;a href="http://wiki.services.openoffice.org/wiki/Calc/hacks/number_of_rows"&gt;OO wiki hack page&lt;/a&gt;: &lt;blockquote&gt;&lt;p&gt;Well, it depends on what your goal is. For personal use you may set MAXROWCOUNT_DEFINE in sc/inc/address.hxx to a different value, multiple of 128, and recompile the application respectively the libsc680*.so and shove it under your existing installation. However, doing so implies that you don’t save to any binary file format like Excel or whatsoever, otherwise you risk loss of data. You’ll also encounter drawing layer misfits in higher row numbers, may experience performance problems, and there may be other quirks lurking. Note that it generally works for data and formulas, but otherwise is completely untested.&lt;/p&gt; &lt;p&gt;For the number of columns the same applies to the MAXCOLCOUNT_DEFINE in sc/inc/address.hxx, just that the value must be a multiple of 16 instead. &lt;/p&gt;&lt;/blockquote&gt; My text file is truncated at 65,536 and I was dumped with the following error message:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VjzGym6MKg/R7g6UhFvVTI/AAAAAAAAAEs/OLMW9H6Rayc/s1600-h/oo23rows.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5VjzGym6MKg/R7g6UhFvVTI/AAAAAAAAAEs/OLMW9H6Rayc/s320/oo23rows.png" alt="" id="BLOGGER_PHOTO_ID_5167944696561882418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I hope this will be correcting, i'm so desperate, since i will use open office for my final exam&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-4800437483554341115?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4800437483554341115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4800437483554341115'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/openoffice-text-files-that-are-larger.html' title='OpenOffice Text Files That Are Larger Than 65,536 Rows Cannot Open / Imported'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_5VjzGym6MKg/R7g6UhFvVTI/AAAAAAAAAEs/OLMW9H6Rayc/s72-c/oo23rows.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6182270407381161982</id><published>2008-02-17T06:06:00.000-07:00</published><updated>2008-02-17T06:12:30.171-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jobs'/><title type='text'>Sr. Linux Administrator</title><content type='html'>Here you see the specifics of the job announcement.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;   &lt;/p&gt;  &lt;table style="border-collapse: collapse;" id="createjob" border="0" bordercolor="#111111" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Company:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;        Apex Systems    &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Country:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;           United States       &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Title of job:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;     Sr. Linux Administrator   &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Job Description:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt; Apex Systems Inc is a technical staffing firm that assists companies and organizations with information technology staffing needs in every industry. Our client has an excellent Linux Administrator position available for the right candidates. If you are looking for an exciting, innovative opportunity with the chance to excel, then this is the opportunity for you.&lt;br /&gt;&lt;br /&gt;We are seeking a Sr. Linux Administrator!&lt;br /&gt;&lt;br /&gt;Summary:&lt;br /&gt;The ideal candidate will have a very strong background in Linux administration with a minimum of 3 years devoted to Linux administration. This candidate also must have very strong experience with web servers as well as application servers. This includes installation, configuration, and administration. The following technologies are strongly desired, but not required: Windows 2000 &amp;amp; 2003, SQL Server, Jboss administration and Java.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you feel you are a qualified candidate please email your resume to bserra@apexsystemsinc.com with **Linux Admin** in the subject line.&lt;br /&gt;     &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Primary Skills:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;                   Linux             ,                  Apache Webserver                   &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Secondary Skills:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;                   Java             ,                  Jboss                   &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Salary Range:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;           70 K - 80 K USD       &lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Telecommuting:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;           No       &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Industry Experience:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;         &lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Education:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;     Technical Ability / Experience is all that counts (Any)        &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Permits:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;         GreenCard or other US Work permit needed&lt;br /&gt; Work permit for United States needed&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Company Information:&lt;br /&gt;&lt;/span&gt; &lt;table border="0" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td class="rowname" valign="top"&gt;Name:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;Intervise, Inc.&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Email:&lt;/td&gt; &lt;td class="cell" valign="top"&gt; &lt;script language="javascript"&gt;     &lt;!--   var username = "agibbs";   var hostname = "intervise.com";   var linktext = "agibbs@intervise.com"  document.write("&lt;a href=" + "&gt;" + linktext + "&lt;/a&gt;")   //--&gt;   &lt;/script&gt;&lt;a href="mailto:agibbs@intervise.com"&gt;agibbs@intervise.com&lt;/a&gt; &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Telephone:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;(240) 599-9326&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Address:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;10110 Molecular Dr.&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;City:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;Rockville&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;ZIP Code:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;20850&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Country:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt; United States          &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Web:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8274187644747833387-6182270407381161982?l=linuxtomorrow.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6182270407381161982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6182270407381161982'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/02/sr-linux-administrator.html' title='Sr. Linux Administrator'/><author><name>EdGe</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2375849159137407306</id><published>2008-02-17T06:01:00.000-07:00</published><updated>2008-02-17T06:15:21.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jobs'/><title type='text'>Lead Systems Engineer</title><content type='html'>Here you see the specifics of the job announcement.&lt;p&gt;   &lt;/p&gt;  &lt;table style="border-collapse: collapse;" id="createjob" border="0" bordercolor="#111111" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Company:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;        lastminute.com labs    &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Country:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;           United Kingdom       &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Title of job:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;     Lead Systems Engineer   &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Job Description:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt; We're an innovation team creating beta applications as part of lastminute.com / Travelocity Europe, based in central London, UK. This is the person who will create our environment for rapidly developing and launching beta applications - who can design it and make it all work at the push of a button. Will need some serious Linux skills, lots of database knowledge, power over networks, scripting and automation abilities, build management and source control mastery and the ability to deal with vendors for equipment and hosting. Most of our work is Ruby on Rails, with a variety of client technologies.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.lastminute.com/about/jobs"&gt;See complete Job description&lt;/a&gt;  &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Primary Skills:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;                   Linux             ,                  Apache Webserver                   &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Secondary Skills:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;                   MySQL             ,                  Ruby on Rails                   &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Salary Range:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;            Negotiable       &lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Telecommuting:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;           No       &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Industry Experience:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;         &lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Education:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;    &lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;     &lt;b&gt;Permits:&lt;/b&gt;   &lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;     EU Work permit needed&lt;br /&gt;     Work permit for United Kingdom needed      &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;&lt;span style="font-weight: bold;"&gt;Company Information:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rowname" valign="top"&gt;Name:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;lastminute.com labs&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Email:&lt;/td&gt; &lt;td class="cell" valign="top"&gt; &lt;script language="javascript"&gt;     &lt;!--   var username = "labsjobs";   var hostname = "googlemail.com";   var linktext = "labsjobs@googlemail.com"  document.write("&lt;a href=" + "&gt;" + linktext + "&lt;/a&gt;")   //--&gt;   &lt;/script&gt;&lt;a href="mailto:labsjobs@googlemail.com"&gt;labsjobs@googlemail.com&lt;/a&gt; &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Telephone:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;1234&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Address:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;39 Victoria St&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;City:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;London&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;ZIP Code:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;SW1H0EE&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Country:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt; United Kingdom          &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="rowname" valign="top"&gt;Web:&lt;/td&gt;         &lt;td class="cell" valign="top"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td colspan="3" height="16" valign="top" width="100%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;   &lt;td valign="top"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt
