<?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-5718818273328171887</id><updated>2012-01-27T11:59:00.195Z</updated><category term='gnuplot'/><category term='skyrim'/><category term='flash'/><category term='conky'/><category term='grub'/><category term='dd'/><category term='tikz'/><category term='latex'/><category term='blogspot'/><category term='truecrypt'/><category term='sdl'/><category term='fonts'/><category term='amiga'/><category term='lzma'/><category term='i5 750'/><category term='evolution'/><category term='windows 7'/><category term='beta software'/><category term='compression'/><category term='audio'/><category term='whdload'/><category term='praying for death'/><category term='ktikz'/><category term='get_iplayer'/><category term='browser'/><category term='DRM'/><category term='video editing'/><category term='alsa'/><category term='windows'/><category term='firmware'/><category term='catalyst'/><category term='liveCD'/><category term='exchange'/><category term='xp'/><category term='basics'/><category term='hardware'/><category term='openoffice.org'/><category term='backup'/><category term='linux'/><category term='MIME'/><category term='virtualbox'/><category term='compaq mini'/><category term='arch'/><category term='post project'/><category term='vmware'/><category term='p55m-ud2'/><category term='gtk'/><category term='games'/><category term='ffmpeg'/><category term='RMA'/><category term='screensaver'/><category term='linux from scratch'/><category term='openbox'/><category term='blfs'/><category term='natty'/><category term='OSX'/><category term='X'/><category term='pdf'/><category term='lfs toolchain'/><category term='blogger'/><category term='dns'/><category term='lfs build'/><category term='wireless'/><category term='lxde'/><category term='Hackintosh'/><category term='kernel'/><category term='power'/><category term='dropbox'/><category term='source code'/><category term='slim'/><category term='e-uae'/><category term='network'/><category term='wicd'/><category term='project'/><category term='ubuntu'/><category term='nvidia'/><category term='zip'/><category term='unity'/><category term='f1'/><title type='text'>ohforfuckssake</title><subtitle type='html'>An attempt to collate the lessons learned when trying to get linux to work.  And other stuff.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default?start-index=101&amp;max-results=100'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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>151</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-222300059349882917</id><published>2012-01-27T11:59:00.000Z</published><updated>2012-01-27T11:59:00.248Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='skyrim'/><title type='text'>Skyrim</title><content type='html'>For a change, it is a new year after all, I present my comments on levelling a character in &lt;a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=3&amp;ved=0CE0QFjAC&amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FThe_Elder_Scrolls_V%3A_Skyrim&amp;ei=5SwgT7PIBMWcOrf6jbIO&amp;usg=AFQjCNEAumWwaGQ-RATLq2ro0q9_qnmzgw&amp;sig2=ppLQYtYLlSaPVkrjAgfVeQ"&gt;Skyrim&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Skyrim is the latest installment of the Elder Scrolls series, which has been running for nigh on twenty years.  I missed &lt;a href="http://en.wikipedia.org/wiki/The_Elder_Scrolls:_Arena"&gt;Arena&lt;/a&gt;, the first one, but thoroughly enjoyed &lt;a href="http://en.wikipedia.org/wiki/The_Elder_Scrolls_II:_Daggerfall"&gt;Daggerfall&lt;/a&gt; the sequel.  I tried &lt;a href="http://en.wikipedia.org/wiki/The_Elder_Scrolls_III:_Morrowind"&gt;Morrowind&lt;/a&gt;, and didn't like it.  Too weird, dark and depressing.  &lt;a href="http://en.wikipedia.org/wiki/The_Elder_Scrolls_IV:_Oblivion"&gt;Oblivion&lt;/a&gt; was awesome but quirky, and Skyrim is Oblivion with all the stuff I didn't like taken out.&lt;br /&gt;&lt;br /&gt;These games are openworld roleplaying games.  They are more like toys than games, because you can fiddle around to your hearts content.  In the same was as any self respecting role playing game, you can level your character, meaning improving their statistics and skills as you gain in experience.&lt;br /&gt;&lt;br /&gt;The Elder Scolls series operates a world levelling system, which I really didn't like in Oblivion.  Basically as you get harder, so does the whole world.  The result is that you feel you are running on a treadmill, constantly expending effort just to stay still.  Skyrim seems to do this much more subtly, so that certain environments are inherently easier/harder no matter what your level.  This is good and means you can still feel like a god like mage in some places.&lt;br /&gt;&lt;br /&gt;So, how to build character efficiently?  Why efficiently?  Well every skill increase you get goes towards your overall level.  You don't nominate the skills that affect your level like in Oblivion.  A simple exploit in Oblivion was to nominate crap like &lt;a href="http://www.uesp.net/wiki/Oblivion:Speechcraft"&gt;speechcraft&lt;/a&gt; and &lt;a href="http://www.uesp.net/wiki/Oblivion:Acrobatics"&gt;acrobatics&lt;/a&gt;, which take ages to increase through normal use.  You would then "dabble" in the real stuff.  That meant you could max out all the schools of magic and still be level 2.  The world treated you like a level 2 character, meaning you could destroy everything you encountered with one or two spells.&lt;br /&gt;&lt;br /&gt;Skyrim doesn't do this.  Any skill counts towards level, so you want to make sure you only level skills you are going to use in your final character.  That's efficient levelling.&lt;br /&gt;&lt;br /&gt;OK, so the game starts, and you pick your character.  If I am going magey, I do like a &lt;a href="http://www.uesp.net/wiki/Skyrim:Altmer"&gt;high elf&lt;/a&gt; &lt;a href="http://www.uesp.net/wiki/Skyrim:Magicka"&gt;magicka&lt;/a&gt; bonus.  The dragon attacks just in the nick of time, and you are up and running.  My advice is to follow &lt;a href="http://www.uesp.net/wiki/Skyrim:Ralof"&gt;this guy&lt;/a&gt;, not the guard.  Shortly thereafter you find yourself in a room with the NPC asking you to grab a key from a corpse to open a door.  Now is the time to level your &lt;a href="http://www.uesp.net/wiki/Skyrim:Sneak"&gt;sneak&lt;/a&gt; skills - if you want to.  Crouch behind the NPC, sneak, and hit him with a dagger.  He is flagged as unkillable by the game, and will never turn on you.  This will very quickly level up your sneaking.  So quickly you may be over level 10 before you get around to unlocking the door.  This, children, is what we call an exploit.  It is not a realistic sequence of events.  Normal people don't let you stab them in the back several hundred times.  This will not work with the guard, so if you want to level sneak, follow Ralof.&lt;br /&gt;&lt;br /&gt;You can take the tedium out of stabbing the NPC in the back by blasting him with flames to level your &lt;a href="http://www.uesp.net/wiki/Skyrim:Destruction"&gt;destruction&lt;/a&gt; skill.  This takes a bit longer because when he hits zero health the skill stops levelling.  You only get skill increases when you are actually causing damage.&lt;br /&gt;&lt;br /&gt;What next?  Well, that depends on your goal.  My goal is to create a hard as nails spell caster assassin type.  The main early choice you have to make in this role is whether to &lt;a href="http://www.uesp.net/wiki/Skyrim:Sneak"&gt;sneak&lt;/a&gt; or go &lt;a href="http://www.uesp.net/wiki/Skyrim:Invisibility"&gt;invisible&lt;/a&gt;.  You can go invisible by levelling &lt;a href="http://www.uesp.net/wiki/Skyrim:Illusion"&gt;illusion&lt;/a&gt; to 75 and casting the requisite spell, or by levelling &lt;a href="http://www.uesp.net/wiki/Skyrim:Alchemy"&gt;alchemy&lt;/a&gt; to produce invisibility potions.  Sneaking requires the sneak skill obviously.  I have yet to decide which is the better option.  You are going to end up levelling alchemy anyway - see below for more information - but I tend to spend a long time invisible so would need to carry a lot of potions.  To level efficiently, you really should choose between sneak and illusion.&lt;br /&gt;&lt;br /&gt;Every time you level up you get to choose to increase one of &lt;a href="http://www.uesp.net/wiki/Skyrim:Health"&gt;health&lt;/a&gt;, &lt;a href="http://www.uesp.net/wiki/Skyrim:Magicka"&gt;magicka&lt;/a&gt; or &lt;a href="http://www.uesp.net/wiki/Skyrim:Stamina"&gt;stamina&lt;/a&gt;.  Health gives you your hit points, magicka your spell casting reservoir, and stamina your sprint time/carrying capacity.  In the beginning put it all in magicka.  You are going to need a decent capacity.  However,  don't go overboard.  As you'll see below, we are going to be crafting a 100% lower casting cost suit.  This means that ultimately spell costs in one discipline will be nil.  As in do not require magicka.  You're going to look pretty stupid with your 500 sized magicka reservoir and nothing to spend it on.&lt;br /&gt;&lt;br /&gt;Also, because the world still levels, when you reach late thirties in level, there are &lt;a href="http://www.uesp.net/wiki/Skyrim:Bandit"&gt;bandit archers&lt;/a&gt; around who can one shot kill a mage with only 100 health.  That's just embarrassing.  I have yet to work out what the right balance is, but it will have to take into account whether you go illusion or sneak.  The other spells you are likely to be casting are soul trap, and healing, which don't use a massive amount of magicka.&lt;br /&gt;&lt;br /&gt;Money, money, money.&lt;br /&gt;&lt;br /&gt;Just like real life, you are not going to get anything done until you have got some serious wonga behind you.  To get serious wonga you need to be able to run a profitable business.  In various forum posts and hints and tips columns about the game, a typical wonga obtaining strategy is "&lt;a href="http://www.uesp.net/wiki/Skyrim:Enchanting"&gt;enchant&lt;/a&gt; &lt;a href="http://www.uesp.net/wiki/Skyrim:Banish"&gt;banish&lt;/a&gt; on &lt;a href="http://www.uesp.net/wiki/Skyrim:Iron_Dagger#Iron_Dagger"&gt;iron daggers&lt;/a&gt;, sell for £££'s".  This is completely correct and completely useless at the same time.  Y'see you need to learn the banish enchantment before you can enchant it onto any dagger, iron or otherwise.  Weapons that come with this enchantment are levelled items, so do not appear at the start of the game.  I didn't start seeing them being offered for sale until level 33.&lt;br /&gt;&lt;br /&gt;So, something else to start then.  At the beginning of the game making and selling enchanted weapons is an easy way to spend money instead of making it.  Your profit margins are just too narrow to make it worthwhile.  Instead, I heartily recommend the potion run.  Here's how it works.  First get some seed capital.  You pop out of the tutorial near &lt;a href="http://www.uesp.net/wiki/Skyrim:Riverwood"&gt;Riverwood&lt;/a&gt;, so nip in there.  Sell all your loot from the tutorial dungeon.  You now have two options.  If you like scenery, it's time to go on a grand tour of all the major cities.  Walk to &lt;a href="http://www.uesp.net/wiki/Skyrim:Riften"&gt;Riften&lt;/a&gt;, &lt;a href="http://www.uesp.net/wiki/Skyrim:Windhelm"&gt;Windhelm&lt;/a&gt;, &lt;a href="http://www.uesp.net/wiki/Skyrim:Winterhold"&gt;Winterhold&lt;/a&gt;, &lt;a href="http://www.uesp.net/wiki/Skyrim:Dawnstar"&gt;Dawnstar&lt;/a&gt;, &lt;a href="http://www.uesp.net/wiki/Skyrim:Morthal"&gt;Morthal&lt;/a&gt;, &lt;a href="http://www.uesp.net/wiki/Skyrim:Solitude"&gt;Solitude&lt;/a&gt;, &lt;a href="http://www.uesp.net/wiki/Skyrim:Markarth"&gt;Markarth&lt;/a&gt;, &lt;a href="http://www.uesp.net/wiki/Skyrim:Falkreath"&gt;Falkreath&lt;/a&gt; and &lt;a href="http://www.uesp.net/wiki/Skyrim:Whiterun"&gt;Whiterun&lt;/a&gt; in that order.  Kill any animals/bandits and pick any flowers/mushrooms you come across.  In Winterhold, join the &lt;a href="http://www.uesp.net/wiki/Skyrim:College_of_Winterhold_(faction)"&gt;college&lt;/a&gt; to get a room with wardrobes that you can permanently store stuff in.  Go to the first guild quest to get a free &lt;a href="http://www.uesp.net/wiki/Skyrim:Ward"&gt;shield spell&lt;/a&gt;, and to get access to trainers.  Do not go on to the second quest yet.  The second option is identical to the first, but you need a bit more seed capital.  Just walk up to Whiterun, and take the wagon from there to all the other locations to cut down on exploring time.  Keep any ingredients you find.  Sell any weapons and armour, unless they have enchantments you don't know.  Take any skins to a blacksmith and convert them to &lt;a href="http://www.uesp.net/wiki/Skyrim:Leather_Strips#Leather_Strips"&gt;leather strips&lt;/a&gt;.  Store these in your room in the college if you get too many.  &lt;br /&gt;&lt;br /&gt;You are now ready to start the alchemy grand tour.  Using fast travel visit every &lt;a href="http://www.uesp.net/wiki/Skyrim:Merchants"&gt;alchemist&lt;/a&gt; in every city (apart from Winterhold) and buy as many of their ingredients as you can afford.  Just empty their inventories, apart from &lt;a href="http://www.uesp.net/wiki/Skyrim:Void_Salts"&gt;Void Salts&lt;/a&gt; which are more expensive than any potion you can make from them.  Now, go to this website http://www.endoftheweb.se/skyrim/index.php and type in the ingredients you have, and search for the most valuable potions you can find.  Make them, and use them to fund the next round of ingredient purchasing.  Rinse this, and repeat.  In particular, watch out for &lt;a href="http://www.uesp.net/wiki/Skyrim:Giant%27s_Toe"&gt;Giant's toes&lt;/a&gt; and &lt;a href="http://www.uesp.net/wiki/Skyrim:Wheat"&gt;wheat&lt;/a&gt;.  Combined they make a potion worth over 500 gold pieces.  Wheat is easy to find, at any of the farms around Whiterun.  Giant's toes are harder to part from their owners, so grab them from alchemists whenever you see them.&lt;br /&gt;&lt;br /&gt;If you do not want to use a thinks for you website like that, then to make good cash from Alchemy, you want to make the following four potions: Invisibility, Paralysis, Damage Magicka Regen, or Slow.&lt;br /&gt;&lt;br /&gt;For invisibility, you want to hoover up Chaurus Eggs, Ice Wraith Teeth, Luna Moth Wing, Nirnroot, Vampire Dust.  Mix any two together and you'll have an invisibility potion worth a few hundred gold.  You can add a third ingredient to 'power' up the potion.  Nordic Barnacle and Namiras Rot work well.&lt;br /&gt;&lt;br /&gt;For Paralysis, make sure you buy Briar Heart, Canis Root, Imp Stool, and Swamp Fungal Pod.  Again, any two mixed together will get you a health profit.  Snowberries or Slaughterfish Eggs and Scales make a good catalyst.&lt;br /&gt;&lt;br /&gt;There are many more key ingredients for Damage Magicka Regen.  You can collect Bear Claws, Blue Butterfly Wing, Blue Mountain Flower, Chickens Egg, Glow Dust, Hanging Moss, Nightshade, Spider Egg, and Spriggan Sap.  Lavendar is the catalyst you want for this potion, although it won't work for every combination.&lt;br /&gt;&lt;br /&gt;Lastly, for Slow potions, you want Deathbell, Large Antlers, River Betty, and Salt Pile.  Creep Cluster and Scaly Pholiota make good friends with this potion.&lt;br /&gt;&lt;br /&gt;When your &lt;a href="http://www.uesp.net/wiki/Skyrim:Speech"&gt;speech&lt;/a&gt; skill hits 25, stop by the &lt;a href="http://www.uesp.net/wiki/Skyrim:Black-Briar_Meadery"&gt;Black-Briar Meadery&lt;/a&gt; in Riften, and ask the chap behind the counter about the place.  You get an option to persuade him, which exercises your speech.  (You can actually start this earlier if you have the money to bribe him up to speech 25).  You can now hit enter repeatedly to level up your speech skill to whatever value you want.  I would recommend taking it to 50.  This lets you get the &lt;a href="http://www.uesp.net/wiki/Skyrim:Speech#Skill_Perks"&gt;Merchant&lt;/a&gt; perk, which lets you sell anything to any shopkeeper.  So you do not have to trail from alchemist to smith, to general store.  A prerequisite for this is the &lt;a href="http://www.uesp.net/wiki/Skyrim:Speech#Skill_Perks"&gt;Alure&lt;/a&gt; perk, which gets you better prices from the opposite sex.  Most alchemists are women and most blacksmiths are men, so there is no "right" sex to be.&lt;br /&gt;&lt;br /&gt;You now have a decent money making trade which will serve you well.  It is time to start thinking about weapons and armour.  As you are going around your grand tour, start visiting every &lt;a href="http://www.uesp.net/wiki/Skyrim:Merchants"&gt;smith&lt;/a&gt;.  Buy &lt;a href="http://www.uesp.net/wiki/Skyrim:Iron_Ore"&gt;Iron Ore&lt;/a&gt;.  Don't buy the &lt;a href="http://www.uesp.net/wiki/Skyrim:Iron_Ingot"&gt;ingots&lt;/a&gt;, just the ore.  The &lt;a href="http://www.uesp.net/wiki/Skyrim:Iron-Breaker_Mine"&gt;Ironbreaker mine&lt;/a&gt; in Dawnstar is a decent place to get a dozen or so lumps of ore, just grab a pick axe from inside the mine.  For some reason that's not theft.  Then visit a smelter which you can find in Windhelm, Whiterun, and outside said mine.  You don't get them in every smith's.  Smelt the ore into ingots.  Then grab your leather strips, go to the forge and start spamming iron daggers.  They need one ingot and strip per dagger.  Make between five and six hundred of these and you should hit 100% smithing without spending a penny.  Why not do this to make money?  Well, you could, but it takes ages to gather the ore.  There are maybe only one or two lumps available from a typical smith.  Also the daggers sell for less than the ore and strips combined, so if you want cash, you should just sell the raw materials.  You can speed up this process by buying the raw materials direct from the smiths.  This is expensive, but works out find as long as you pay with potions.  Get the merchant perk, buy all the materials you need, then sell the smith some potions to get your cash back.&lt;br /&gt;&lt;br /&gt;You then want to start enchanting your daggers.  Why?  Well a standard iron dagger sells for, say, 5 gold pieces.  An iron dagger enchanted with &lt;a href="http://www.uesp.net/wiki/Skyrim:Damage_Magicka"&gt;damage magicka&lt;/a&gt; sells for 250 gold pieces.  To enchant you need to know the enchantment, have an item to enchant, and a filled &lt;a href="http://www.uesp.net/wiki/Skyrim:Soul_Gem"&gt;soul gem&lt;/a&gt;.  You can buy soul gems from most trading wizards in the College, from most court wizards, and from most &lt;a href="http://www.uesp.net/wiki/Skyrim:Merchants"&gt;general stores&lt;/a&gt;.  For our purposes a petty soul gem is as good as a grand soul gem.  Why?  You can buy a filled petty soul gem for under 100gp.  Your dagger should not have cost you anything if you harvested the resources yourself, but at most has a construction cost of 10-20gp.  With a petty soul gem you can increase its value to 250gp.  That's double your investment, which is a very healthy return.  Common soul gems can easily cost 200gp-300gp, but only get you a small bump in the value of the dagger, to maybe 275gp.  So, you end up breaking even at best.  With a grand soul gem you still only get a dagger worth maybe 300gp, and you've spent over 1000gp on it.  Petty = better.&lt;br /&gt;&lt;br /&gt;If you are running low on leather strips and you are going hunting anyway, you can buy the &lt;a href="http://www.uesp.net/wiki/Skyrim:Soul_Trap"&gt;Soul Trap&lt;/a&gt; spell from &lt;a href="http://www.uesp.net/wiki/Skyrim:Phinis_Gestor"&gt;Phinis Gestor&lt;/a&gt; at the college.  Load up with empty petty soul gems, then do a wild animal run - I suggest doing laps around the mountain Whiterun is built on - casting soul trap on the animals before you kill them.  You'll get skins and souls in one go.  If you do this, it can make financial sense to buy some empty lesser or common soul gems.  The cost per unit is low enough, and it means you don't have to do too much shopping around for pettys before you get down to some serious hunting.  If your potion crafting job is netting you enough cash, you may just want to buy the soul gems filled.  If you do a grand tour, including the college, of all general traders, you should get a couple of dozen filled pettys/lesser per lap.&lt;br /&gt;&lt;br /&gt;The best starting enchantment is &lt;a href="http://www.uesp.net/wiki/Skyrim:Damage_Magicka"&gt;damage magicka&lt;/a&gt;.  This is better than any of the elemental damage enchantments.  If you are staying out of dungeons at this point, get into the habit of checking the weapons that smiths have for sale as you tour around.  Grab the cheapest magicka damage weapon you can find, and remember to pay in potions.  Then disenchant it at an arcane enchanter, and bingo.  Start enchanting those daggers, and hey presto you have a new source of income.  As you level enchanting, every 10 points increases the power of the enchantment, so the daggers should increase in value.&lt;br /&gt;&lt;br /&gt;The next best enchantments are &lt;a href="http://www.uesp.net/wiki/Skyrim:Damage_Stamina"&gt;damage stamina&lt;/a&gt; or &lt;a href="http://www.uesp.net/wiki/Skyrim:Absorb_Health"&gt;absorb health&lt;/a&gt;.  These should boost your dagger value from 250gp to 500gp or thereabouts.  Filled common soul gems now also make financial sense, although still not as much sense as pettys.  I am not sure what level weapons with these enchantments become available for purchase, because I wasn't paying enough attention.  Grab them as soon as you see them.  I was level 33 when I saw my first &lt;a href="http://www.uesp.net/wiki/Skyrim:Banish"&gt;Banish&lt;/a&gt; enchanted weapon for sale.  This really kicks things into top gear.  A banish dagger has a value of 1750gp.&lt;br /&gt;&lt;br /&gt;Once you can start to make banishing daggers, your financial woes are at an end.  One grand tour for filled soul gems, followed by some smithing and enchanting in Windhelms marketplace, will net you 20,000 to 40,000 worth of daggers.  It's now time to start spending that cash.&lt;br /&gt;&lt;br /&gt;Get your smithing up to one hundred by just buying the necessary ore/ingots/strips and paying in daggers of banishing.  Then enchant your way up to 100 as well.  While you are levelling enchanting, and alchemy come to think of it, make sure you get the 5/5 quality perks at the very base of the tree as they increase the sale cost of your items.  We now need to consider combat, which isn't something that has been important to date - other than wild animals.  Go and see &lt;a href="http://www.uesp.net/wiki/Skyrim:Faralda"&gt;Faralda&lt;/a&gt; in the College, and get some destruction training.  She can take you all the way to 90.  Make sure to take plenty of daggers along to pay with.  From 85-90 is going to cost 20,000 - 25,000, so you are looking at 25-30 daggers of banishing to pay for it all.  It is probably best to buy training in destruction as you are levelling smithing alchemy and enchanting.  Why?  You only get 5 training boost per level.  If you are mid thirties in level and you boost destruction from 80-85 that's enough to increase your level anyway, at which point you can go straight from 85-90.  However, you you are mid-thirties and you go from 30-35 in destruction, that's hardly a blip on your overall level, and you will have to level your crafting skills to gain a level before you can go 35-40.&lt;br /&gt;&lt;br /&gt;Pick a form of destruction damage, I like shock, and grab the perks to specialise in it.  You can also get the perks to make novice/adept spells cheaper to cast, which can make the game easier if you have to do dungeon runs before hitting 100 smithing/enchanting.  Once you get to those levels though, buy some armour with fortify destruction and resist magic.  Disenchant the armour to learn those enchantments.  Then buy or make some plain light armour.  With 100 in enchanting you can make four items, chest, helm, necklace, ring, with over 25% reduction cost for destruction.  That means you can cast any destruction spell for free.  So you can dual cast Thunderbolt for over 200 shock damage per hit.  For free.  Bye bye giants and dragons, and pretty much anything else that crosses your path.  At 100 enchanting you want to grab the dual effect perk, which lets you add another ability to the armour.  Resist magic is very useful, but can only go on the ring and necklace for a total, at 100 skill, of just over 50%.  On your helm and chest, you probably want either another magic school such as restoration for cheap wards and healing, or some miscellaneous stuff like extra magicka, waterbreathing, lockpicking, or fortify light armour to boost your armour rating.&lt;br /&gt;&lt;br /&gt;Your greaves and boots can't take the magic enchantments, but both can take carry weight, which helps you haul loot out of dungeons.  The greaves will also take fortify light armour, and the boots will take muffle, or fortify sneaking, which cancels out the noise of light armour making you much harder to detect when invisible or sneaking.  I ended up with:&lt;br /&gt;&lt;br /&gt;Helm: Fortify Destruction and &lt;a href="http://www.uesp.net/wiki/Skyrim:Fortify_Magicka"&gt;Magicka&lt;/a&gt;&lt;br /&gt;Chest: Fortify Destruction and &lt;a href="http://www.uesp.net/wiki/Skyrim:Fortify_Light_Armor"&gt;Light Armour&lt;/a&gt;&lt;br /&gt;Arms: Fortify &lt;a href="http://www.uesp.net/wiki/Skyrim:Fortify_Carry_Weight"&gt;Carry Weight&lt;/a&gt; and &lt;a href="http://www.uesp.net/wiki/Skyrim:Fortify_Light_Armor"&gt;Light Armour&lt;/a&gt;&lt;br /&gt;Feet: Fortify &lt;a href="http://www.uesp.net/wiki/Skyrim:Fortify_Carry_Weight"&gt;Carry Weight&lt;/a&gt; and &lt;a href="http://www.uesp.net/wiki/Skyrim:Fortify_Sneak"&gt;Sneak&lt;/a&gt;&lt;br /&gt;Neck: Fortify Destruction and &lt;a href="http://www.uesp.net/wiki/Skyrim:Resist_Magic"&gt;Resist Magic&lt;/a&gt;&lt;br /&gt;Finger: Fortify Destruction and &lt;a href="http://www.uesp.net/wiki/Skyrim:Resist_Magic"&gt;Resist Magic&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To finish off your armour, give it a bit of a boost.  Grab the arcane blacksmith perk to be able to work on magic items, then grab the elven (or whatever kind of armour you have) perk.  Both require steel to get there, so just grab it.  Now you'll need &lt;a href="http://www.uesp.net/wiki/Skyrim:Moonstone_Ingot#Refined_Moonstone"&gt;moonstone&lt;/a&gt; and &lt;a href="http://www.uesp.net/wiki/Skyrim:Quicksilver_Ingot"&gt;quicksilver&lt;/a&gt; (if you have the &lt;a href="http://www.uesp.net/wiki/Skyrim:Elven_Gilded_Armor#Elven_Gilded_Armor"&gt;gilded elven chest plate&lt;/a&gt;, which you should) ingots.  These let you improve the armour ratings of each item at a workbench, adding a significant amount to the armour rating.  You probably also want to level light armour along with destruction to get the most out of your armour, picking up the extra ratings perks when they are available.&lt;br /&gt;&lt;br /&gt;You are now ready to start some serious dungeon delving.  One of the very first quests you get offered is at the Riverwood traders.  You need to &lt;a href="http://www.uesp.net/wiki/Skyrim:The_Golden_Claw"&gt;grab a claw from a dungeon&lt;/a&gt;.  Don't do this one until you are ready to rock and roll.  The problem is that in the dungeon you find a heavy (25) &lt;a href="http://www.uesp.net/wiki/Skyrim:Dragonstone"&gt;stone&lt;/a&gt; which is part of a quest given by the &lt;a href="http://www.uesp.net/wiki/Skyrim:Farengar_Secret-Fire"&gt;Whiterun mage&lt;/a&gt;.  You cannot drop the stone as it is a quest item.  It weights 25.  Is you hand it over it all but triggers the first dragon battle, which triggers random dragon attacks all over the place, which really interrupt the grand tour earning strategy.&lt;br /&gt;&lt;br /&gt;If facing one big baddie, constantly thunderbolt him in the face.  If facing more than one, chain lightning the whole group.  Dual cast the buggers as well, because with your suit of armour, you can benefit from the increased damage per second, and ignore the disproportionate magicka cost increase.  At this point, with this build, you should be about level 38, with 5 perks available.  You could pump them into speech to get better prices, but a &lt;a href="http://www.uesp.net/wiki/Skyrim:Fortify_Barter"&gt;suitable amulet&lt;/a&gt; does that job much more efficiently.  You also need to make a final decision about sneak/illusion, which is where your next big levelling boost is going to come from.  The game is pretty advanced at this stage.  You'll have bears and sabre toothed tigers prowling around.  Just remember though, thunderbolt to the face.  Apart from storm atronachs, that just tickles them.&lt;br /&gt;&lt;br /&gt;Once you start offing dragons, gather up their scales and start forging Dragon Scale armour which is very, very, tasty and comes in light and heavy varieties.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-222300059349882917?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/222300059349882917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2012/01/skyrim.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/222300059349882917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/222300059349882917'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2012/01/skyrim.html' title='Skyrim'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-9201635872141974771</id><published>2011-12-23T13:37:00.000Z</published><updated>2011-12-23T13:37:50.605Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='video editing'/><category scheme='http://www.blogger.com/atom/ns#' term='ffmpeg'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Formatting Video for iPad</title><content type='html'>This, I have to say, has been one of the most gratifying things to work out in my entire experience of working stuff out.  The iPad is an excellent device for consuming media, especially video.  The problem is getting video in a format suitable for the iPad without forking over dosh to Apple.&lt;br /&gt;&lt;br /&gt;The best I have been able to come up with to date is Handbrake, which has built in modes for the iPad.  What it doesn't do is batch convert a whole directory to iPad format.&lt;br /&gt;&lt;br /&gt;So joy of joys, I present the Ubuntu commands necessary for this (assuming you have installed the requisite packages all of which are listed in my how to build a custom Live CD posts).&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;target_resolution="1024x576" &amp;&amp;&lt;br /&gt;target_bitrate="2.5M" &amp;&amp;&lt;br /&gt;minimum_bitrate="0k" &amp;&amp;&lt;br /&gt;maximum_bitrate="3.5M" &amp;&amp;&lt;br /&gt;audio_bitrate="256k" &amp;&amp;&lt;br /&gt;audio_sample_rate="48000" &amp;&amp;&lt;br /&gt;audio_channels="2" &amp;&amp;&lt;br /&gt;input_extension="mkv" &amp;&amp;&lt;br /&gt;number_of_threads="8" &amp;&amp;&lt;br /&gt;for file in *.$input_extension; do \&lt;br /&gt;ffmpeg -y -i "$file" \&lt;br /&gt;-pass 1 -f mp4 \&lt;br /&gt;-s $target_resolution -vcodec libx264 -threads $number_of_threads -b $target_bitrate \&lt;br /&gt;-bt 100k -maxrate $maximum_bitrate -minrate $minimum_bitrate -bufsize 2M \&lt;br /&gt;-flags2 +mixed_refs -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 2 -refs 2 -coder 0 -me_method umh -me_range 90 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 \&lt;br /&gt;-rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -g 90 -an /dev/null &amp;&amp; \&lt;br /&gt;ffmpeg -y  -i "$file" \&lt;br /&gt;-pass 2 -f mp4 \&lt;br /&gt;-acodec libfaac -ar $audio_sample_rate -ab $audio_bitrate -ac $audio_channels \&lt;br /&gt;-s $target_resolution -vcodec libx264 -threads 8  -async 2205 -b $target_bitrate \&lt;br /&gt;-bt 100k -maxrate $maximum_bitrate -minrate $minimum_bitrate -bufsize 2M \&lt;br /&gt;-flags2 +mixed_refs -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 2 -refs 2 -coder 0 -me_method umh -me_range 90 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 \&lt;br /&gt;-rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -g 90 \&lt;br /&gt;"${file%.$input_extension}.mp4" \&lt;br /&gt; ; done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You fill in the details between the quotes at the beginning, copy and paste the code into a command line in a directory containing video files of type .input_extension and it will convert all the files to .mp4 suitable for playing on an iPad.  All files will have exactly the same resolution and bitrate, which may not be desirable, so check in advance by examining your files.&lt;br /&gt;&lt;br /&gt;You can change the target bitrate to whatever you like, within reason, and the iPad will still play the files.  You will want to carefully check the aspect ratio of the files going in to make sure that these settings work.  If they start in 16:9 this will spit them out in 16:9 at 1024x576.  4:3 files will need the target_resolution changed to "1024x768" for instance.&lt;br /&gt;&lt;br /&gt;Don't make the mistake I made of running several instances of this command at the same time - because they will overwrite each others variables.&lt;br /&gt;&lt;br /&gt;As a bonus, here are the commands necessary to extract audio from a clip in an iPod/iPhone friendly format:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;audio_bitrate="128k" &amp;&amp;&lt;br /&gt;audio_sample_rate="48000" &amp;&amp;&lt;br /&gt;audio_channels="2" &amp;&amp;&lt;br /&gt;input_extension="flv" &amp;&amp;&lt;br /&gt;for file in *.$input_extension; do \&lt;br /&gt;ffmpeg -y -i "$file" -vn \&lt;br /&gt;-acodec libfaac -ar $audio_sample_rate -ab $audio_bitrate -ac $audio_channels \&lt;br /&gt;"${file%.$input_extension}.m4a" \&lt;br /&gt;; done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Same rules apply.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-9201635872141974771?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/9201635872141974771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/12/formatting-video-for-ipad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/9201635872141974771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/9201635872141974771'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/12/formatting-video-for-ipad.html' title='Formatting Video for iPad'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-3920045164213511160</id><published>2011-11-11T11:59:00.001Z</published><updated>2011-11-21T20:23:05.776Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='grub'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Fixing a fucked Grub2</title><content type='html'>I have recently encountered a fucked Grub2.  This is the latest version of Grub that comes with, amongst other things, Ubuntu Natty.  You can't fix it the way I described in the past.  That's for Grub1 only.&lt;br /&gt;&lt;br /&gt;Why did I end up with a fucked grub?  I was stupid.  It was entirely my fault.  You see, I BELIEVED that this time, when I upgraded my Ubuntu installation from Natty to Oneiric, I wouldn't end up with an unresponsive pile of crap as the result.  More fool me.&lt;br /&gt;&lt;br /&gt;Because I am not a total buffoon, I made a drive image before attempting the upgrade.  I thought I would give True Image Home 2011 another go at being an actual backup program rather than a pointless waste of time.  Surprisingly it actually worked.  Just about.  It had a funny check box thing with some nonsensical question about hard drive ID or some such other thing.  I didn't check it.  In my experience checking boxes when you do not know what they do is a bad thing.&lt;br /&gt;&lt;br /&gt;I now know what this box was asking.  It was asking "do you want me not to fuck up your grub when I restore this image?".  Oh dear.&lt;br /&gt;&lt;br /&gt;So, I was left with a non-working grub.  Helpfully I managed to sort it all out, by running these commands from a terminal window on a LiveUSB system.&lt;br /&gt;&lt;br /&gt;First of all I mounted the recalcitrant drive into the LiveUSB environment.  That's sounds scary.  In practice, it means I clicked on the "Places" menu and selected the anonymous drive that was the same size as my Ubuntu, rather than Home, partition on the disk in question.&lt;br /&gt;&lt;br /&gt;I then got my terminal window open, and found out where this partition had been mounted by running &lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mount | tail -1&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This command prints the last line [tail -1] of the output of the command to tell you about all [mount]ed partitions.  The partition we are interested in should be the last one, because we only just mounted it.&lt;br /&gt;&lt;br /&gt;The output I got was along these lines:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;/dev/[sdxy] on /media/[string of letters and numbers] type ext4 (rw,nosuid,nodev,uhelper=devkit)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That told me the name of the partition [/dev/[sdxy]] and where it was mounted [/media/[string of letters and numbers]].  That's all I need to know.  The next job was to double check that this was the right partition.  To do that I just [l]i[s]ted the contents of the [boot] folder on that partition as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ls /media/[string of letters and numbers]/boot&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This properly displayed the contents of the boot folder, so I knew I was on the right track.  The last step was to run the command to fix everything.  This was:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo grub-install --boot-directory=/media/[string of letters and numbers]/boot /dev/[sdx]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Please note that I was installing the grub to /dev/[sdx] and NOT /dev/[sdxy], for whatever x and y I got.&lt;br /&gt;&lt;br /&gt;And then, surprisingly, it worked fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-3920045164213511160?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/3920045164213511160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/11/fixing-fucked-grub2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3920045164213511160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3920045164213511160'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/11/fixing-fucked-grub2.html' title='Fixing a fucked Grub2'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-3237010498228799954</id><published>2011-11-04T11:59:00.000Z</published><updated>2011-11-04T11:59:00.401Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>More Ubuntu Wifi Joy</title><content type='html'>My neighbours are flooding my house with super strength wifi signals.  or so it seems.   I can't get a reliable signal in the upstairs room where the desktop machine is located.  My routers is already set on the "I hate my neighbours, make my signal as loud as possible", setting and that is no longer doing the business.&lt;br /&gt;&lt;br /&gt;The obvious solution is to change the channel on which the router is broadcasting.  The router I use has an auto setting for this, which I presume means is scans around to find a clear channel and then uses that.&lt;br /&gt;&lt;br /&gt;This would be an excellent solution if solving IT problems was completely unlike playing fucking Jenga.  Yes, this setting change has fixed the reception problem upstairs, but now the netbook refuses to detect the wifi at all.  Fucking spiffing.&lt;br /&gt;&lt;br /&gt;This is a driver and software problem.  I know this because I can boot to a USB Key, and it works find.  I can dual boot to my LFS installation (see posts passim) and that works fine as well.  It's just the installed ubuntu that doesn't fucking work.  All I did was change the wifi channel for fucks sake.  No amount of cursing and swearing appeared to fix this.  &lt;br /&gt;&lt;br /&gt;I eventually decided to manually install the same network drivers as I have running on the LFS installation.  This worked fine.  Until the next time I rebooted, when they were overwritten by later drivers, which don't fucking work.  I have tried to uninstall the newer drivers, but it's as hard to get rid of the fuckers as it is Michael Meyers.  Every time I reboot, the bastards pop into existence once more.  Pain in the arse.&lt;br /&gt;&lt;br /&gt;(Incidentally the fucking useless drivers, on whatever channel my router is now using because they worked find on the old one, are the broadcom hybrid sta drivers 5.100.something.something.  The drivers that actually fucking work are version 5.60.48.36)&lt;br /&gt;&lt;br /&gt;All of this explains why I now have a script on my desktop called "get_my_fucking_network_working.sh" which contains the following commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;cp '/home/[user]/Dropbox/Essential Drivers/Wireless Drivers/hybrid-portsrc-x86_32-v5.60.48.36.tar.gz' .&lt;br /&gt;mkdir hybrid_wl &lt;br /&gt;cd hybrid_wl &lt;br /&gt;tar -xzvf ../hybrid-portsrc-x86_32-v5.60.48.36.tar.gz&lt;br /&gt;unzip '/home/[user]/Dropbox/Essential Drivers/Wireless Drivers/sta_5.60.48.36_2.6.33_kernel_patch.zip'&lt;br /&gt;patch -p0 &lt; patch&lt;br /&gt;unzip '/home/[user]/Dropbox/Essential Drivers/Wireless Drivers/sta_5.60.48.36_2.6.34_multicast_kernel_patch.zip'&lt;br /&gt;patch -p0 &lt; patch_hybrid_multicast&lt;br /&gt;make clean&lt;br /&gt;make&lt;br /&gt;sudo rmmod b43 &lt;br /&gt;sudo rmmod b44 &lt;br /&gt;sudo rmmod b43legacy&lt;br /&gt;sudo rmmod wl&lt;br /&gt;sudo rmmod ssb &lt;br /&gt;sudo rmmod ndiswrapper &lt;br /&gt;sudo rmmod lib80211_crypt_tkip&lt;br /&gt;sudo rmmod lib80211&lt;br /&gt;sudo modprobe lib80211&lt;br /&gt;sudo insmod wl&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I have to run this script every time I boot.  Joy of all joys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-3237010498228799954?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/3237010498228799954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/11/more-ubuntu-wifi-joy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3237010498228799954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3237010498228799954'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/11/more-ubuntu-wifi-joy.html' title='More Ubuntu Wifi Joy'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-6590250141188547897</id><published>2011-10-14T16:46:00.000+01:00</published><updated>2011-10-14T16:46:00.547+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><title type='text'>Evolution</title><content type='html'>Unable to retrieve messageLost connection to Evolution Exchange backend processAbsolute fucking bastard.  I hate evolution and the way it connects, or rather doesn't connect, to exchange server, with the passion of a thousand, whatever it is's that makes gamma-ray bursts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-6590250141188547897?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/6590250141188547897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/10/evolution.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6590250141188547897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6590250141188547897'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/10/evolution.html' title='Evolution'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4976400428081351316</id><published>2011-09-16T16:30:00.001+01:00</published><updated>2011-09-16T16:31:01.473+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='RMA'/><title type='text'>Recently</title><content type='html'>&lt;br /&gt;Recently, and surprisingly, not much has been pissing me off IT wise. &amp;nbsp;The main current niggle is that neither OSX or Windows 7 seem keen to boot from an eSata caddie, whereas Ubuntu just laps it up.&lt;br /&gt;&lt;br /&gt;I do have a bit of a grumble, and warning to those less wary, though. &amp;nbsp;Having purchased an SSD I became something of an evangelist for them. &amp;nbsp;I convinced the boss at work to buy 14 64Gb SSD drives, and I proceeded to replace the whole office's HDD's with them.&lt;br /&gt;&lt;br /&gt;Sadly not a week after delivery we got an email from Kingston, the manufacturer, to advice that there was a teensie problem with the firmware, which has a tiny chance of bricking the drive. &amp;nbsp;So we update all the firmware as suggested.&lt;br /&gt;&lt;br /&gt;Yesterday I sent the third and fourth drives (out of 14) back to Kingston for warranty replacement. &amp;nbsp;They are SV100S2/64G drives, is anyone is interested. &amp;nbsp;When they brick, they really do brick. &amp;nbsp;No detection by the bios, no nothing.&lt;br /&gt;&lt;br /&gt;On the plus side, Kingston's RMA system is very good, and we got the replacements for the first drives through quickly. &amp;nbsp;It's just a shame we have to use it at all.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4976400428081351316?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4976400428081351316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/09/recently.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4976400428081351316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4976400428081351316'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/09/recently.html' title='Recently'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4290531009482841989</id><published>2011-08-26T13:54:00.001+01:00</published><updated>2011-08-26T13:54:00.328+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Hackintosh'/><title type='text'>Installing OSX</title><content type='html'>Having failed to install OSX from the completely genuine (not really) disk image that I had obtained, I opted to shell out a few quid for a completely genuine (yes, actually) install disk.  I ebayed a box set with iWork '09 and iLife '11 which came with all sorts of goodies like word processors, video editors and so on.  All for £69.  Microsoft, are you listening?&lt;br /&gt;&lt;br /&gt;I then had a whole new problem when I tried to boot the system.  I got a kernel error.  This just froze up the whole machine when I tried to boot.  I took out the PCI-E Soundblaster card, and hey presto no more kernel errors.  This did not bode well though, as I did want sound eventually.  Anyway, ploughing on.&lt;br /&gt;&lt;br /&gt;I then had exactly the same bloody problem as with the previous attempt.  It would freeze when starting up the installer.  What to do?&lt;br /&gt;&lt;br /&gt;The solution was actually very simple, but hideously complicated at the same time.  What I had to do was to change the boot parameters for the OSX Install disk.  This is like adding [nomodeset] when booting a Live Ubuntu Image with dodgy video drivers installed.&lt;br /&gt;&lt;br /&gt;The command that I needed to add on were:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;PCIRootUID=1&lt;/pre&gt;&lt;br /&gt;Once I did that the system was prepared to boot.  However the wifi was not working.  This is a pain, because part of the installation procedure allows you to set up you itunes account, and it needs a network connection for this.  It WOULD get an internet connection if I booted the installer in safe mode (by adding [-x] as a boot parameter).  Which is just a joy.&lt;br /&gt;&lt;br /&gt;The next problem is getting the system to boot without using the iBoot disk.  To do so I needed to use the &lt;a href="http://tonymacx86.blogspot.com/2010/04/iboot-multibeast-install-mac-os-x-on.html"&gt;multibeast&lt;/a&gt; program to install whatever magical stuff it needed to install to get the system to boot from the hard disk.  The two essential parts of multibeast are EasyBeast and the System Tools.  Apart from that I just selected packages to get my wireless card working.  Happily once I rebooted, I got wifi working just fine.  My video card was not detected though, and I put this down to getting an install disk that pre-dated (10.6.3) my video card (6850 Ati).  So I then upgraded to OSX version 10.6.8.  And hurrah!  The video started working properly!  And the wireless card was fucked.&lt;br /&gt;&lt;br /&gt;Brilliant.  I rebooted in safe mode [-x], and the kernel messages flying past tended to suggest the wireless card was detected and working, but that was all academic because the video was now fucked and showing a grey screen only.&lt;br /&gt;&lt;br /&gt;Fantastic.  It was at this point, after much searching on the internet, that I &lt;a href="http://tonymacx86.com/viewtopic.php?f=19&amp;amp;t=19098"&gt;discovered&lt;/a&gt; that I needed to use the further boot parameters:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;max_valid_dma_addr=1024&lt;/pre&gt;&lt;br /&gt;to get the wireless card to work with the latest version of OSX.  Apparently this has something to do with how much memory your system has.  All I needed to do was to pop those parameters into the /Extra/Library/Preferences/SystemConfiguration/com.apple.Boot.plist file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;&amp;lt;key&amp;gt;Kernel Flags&amp;lt;/key&amp;gt;&lt;br /&gt;&amp;lt;string&amp;gt;arch=i386 max_valid_dma_addr=1024&amp;lt;/string&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Having stuck those settings in I now have a machine happily booting OSX 10.6.8, with fully working video up to 1080p resolutions, and with fully working wifi.  Sound, no so much.  The Soundblaster card I have is working after a fashion, but it is unusably crackly.  I need to try a variety of the VoodooHDA drivers to find the best one.  Alternatively, I need to try it without the card to see if it will output sound over the HDMI cable from the Graphics card.  At one point it had detected that as a possible audio out option, but I couldn't connect it up to a receiver at the time to find out if it was actually working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4290531009482841989?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4290531009482841989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/08/installing-osx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4290531009482841989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4290531009482841989'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/08/installing-osx.html' title='Installing OSX'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2276852978113694569</id><published>2011-07-29T11:59:00.003+01:00</published><updated>2011-08-01T10:50:27.905+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='ktikz'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installing Latex and PGF</title><content type='html'>I smugly advised in my last post that you should simply look at my post to identify how to install Latex with PGF Tikz support.  Turns out my previous post was as deficient as a very deficient thing on a day of particular deficiency.&lt;br /&gt;&lt;br /&gt;Ahem.&lt;br /&gt;&lt;br /&gt;What you need to do is to grab two files off t'internet.  These are the TexLive Latex distribution (this is a biggie) and the PGF add on.&lt;br /&gt;&lt;br /&gt;The TexLive distribution is best downloaded as a single file if you are going to be pissing about trying to repeatedly install it to get the fucker working.  It is 2Gb though, so set aside some time for the download.  You can find various download options, including torrents, at &lt;a href="http://www.tug.org/texlive/acquire-iso.html"&gt;this&lt;/a&gt; page.  My nearest CTAN mirror is in the UK, so my command to download the DVD Image is:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd ~&lt;br /&gt;wget http://mirror.ox.ac.uk/sites/ctan.org/systems/texlive/Images/texlive2011.iso&lt;/pre&gt;&lt;br /&gt;You can then grab the PGF file by running these commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://sourceforge.net/projects/pgf/files/pgf/version%202.10/pgf_2.10.tds.zip/download&lt;br /&gt;mv download pgf_2.10.tds.zip&lt;/pre&gt;&lt;br /&gt;However, if it is regularly updated, you would probably just want to go to &lt;a href="http://sourceforge.net/projects/pgf/files/"&gt;this&lt;/a&gt; page and download the latest version manually.&lt;br /&gt;&lt;br /&gt;To install the software first you need to mount the DVD image.  You can do that as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir ~/texlivedvd&lt;br /&gt;sudo mount -o loop ~/texlive2011.iso ~/texlivedvd&lt;/pre&gt;&lt;br /&gt;You can then run the graphical installer from TexLive.  It requires the perl-tk package, which you can install as follows if you do not already have it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install perl-tk&lt;/pre&gt;&lt;br /&gt;To then run the installer, you use this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo ~/texlivedvd/install-tl -gui perltk&lt;/pre&gt;&lt;br /&gt;You want to install as comprehensive a system as possible, but you can omit language packs you are not going to use to save some time and space.&lt;br /&gt;&lt;br /&gt;The best idea I have found to avoid permissions bullshit is to install to your home directory, so you would choose an install path like [~/texlive].&lt;br /&gt;&lt;br /&gt;Once installed, you want to tell your system where to find the nice new files, which you can do as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt;&amp;gt; ~/.bashrc &amp;lt;&amp;lt; "EOF"&lt;br /&gt;PATH=~/texlive/2011/bin/i386-linux:$PATH&lt;br /&gt;export PATH&lt;br /&gt;MANPATH=~/texlive/2011/texmf/doc/man:$MANPATH&lt;br /&gt;INFOPATH=~/texlive/2011/texmf/doc/info:$INFOPATH&lt;br /&gt;export MANPATH&lt;br /&gt;export INFOPATH&lt;br /&gt;EOF&lt;br /&gt;source ~/.bashrc&lt;/pre&gt;What that command does is add those lines to your [.bashrc] file.  They add the folders containing the TexLive install to your path so that other programs (like ktikz) can find them.  The last command just processes the file to prevent you from having to reboot.  I am not entirely sure, but I think this may only affect programs run from the command line, because I have been having problems with ktikz if I run it from the desktop icon.  Installing PGF is much easier.  Just change into the correct TexLive directory, and unpack the archive:  &lt;br /&gt;&lt;pre class="postCode"&gt;cd ~/texlive/2010/texmf/&lt;br /&gt;sudo unzip ~/pgf_2.10.tds.zip&lt;br /&gt;sudo texhash&lt;/pre&gt;The [texhash] command just (I think) lets the rest of TexLive know that this extra stuff has been installed.  That's it for PGF.  To install ktikz you are going to need a few packages.  Install them as follows:  &lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install build-essential cmake libqt4-dev qt4-dev-tools libpoppler-qt4-dev kdelibs5 kdelibs5-dev khelpcenter4&lt;/pre&gt;Basically what you are doing here is installing software that supports KDE applications.  If you happen to be running KDE anyway you should have most of this stuff.  Once installed, you can grab the ktikz source code, compile and install it using these commands:  &lt;br /&gt;&lt;pre class="postCode"&gt;cd ~&lt;br /&gt;wget http://www.hackenberger.at/ktikz/ktikz_0.10.tar.gz&lt;br /&gt;tar -xzvf ktikz_0.10.tar.gz&lt;br /&gt;cd ktikz&lt;br /&gt;mkdir build&lt;br /&gt;cd build&lt;br /&gt;cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..&lt;br /&gt;make -j2&lt;br /&gt;sudo make install&lt;/pre&gt;That should be that.  Remember that ktikz needs to load up the PGF packages you want to use.  Common ones for me are loaded as follows:  &lt;br /&gt;&lt;pre class="postCode"&gt;\usetikzlibrary{calc,through, intersections,decorations.text, decorations.pathreplacing}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2276852978113694569?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2276852978113694569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/installing-latex-and-pgf.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2276852978113694569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2276852978113694569'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/installing-latex-and-pgf.html' title='Installing Latex and PGF'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4476909673625222454</id><published>2011-07-22T11:59:00.001+01:00</published><updated>2011-07-22T11:59:00.413+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tikz'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Detailed Tikz Animations</title><content type='html'>I set out my workflow to create animations using the Tikz graphical language in a previous post. What follows is, as promised, the individual Ubuntu commands needed to actually implement that workflow:&lt;br /&gt;&lt;br /&gt;First of all we need to create a decent image in ktikz. This code works well for this purpose:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\usetikzlibrary{calc,through, intersections,decorations.text}&lt;br /&gt;\begin{tikzpicture} [scale=3]&lt;br /&gt;\def\myangle{117};&lt;br /&gt;\clip (-1.5,-1.5) rectangle (1.5,1.5);&lt;br /&gt;\coordinate (A) at (0,0);&lt;br /&gt;\coordinate (B) at (1,0);&lt;br /&gt;\node [blue, name path=blue_circle,draw,circle through=(B)] at (A) {};&lt;br /&gt;\draw [black, fill] (A) circle (1pt) node [below] {\tiny centre};&lt;br /&gt;\draw [red, dashed] (A) -- (B);&lt;br /&gt;\path [name path=radius, rotate=\myangle] (A) -- ++(1.5,0);&lt;br /&gt;\draw [red, -&gt;] ($(A)+(0.5,0)$) arc (0:\myangle:0.5cm);&lt;br /&gt;\path [decorate,decoration={raise=-5pt, text along path, text={|\tiny|angle ||}, text align=center, text color=red, reverse path}](0.5,0) arc (0:\myangle:0.5cm);&lt;br /&gt;\draw [name intersections={of=blue_circle and radius, by=C}] [orange, -&gt;] (A) --  (C) node [pos=0.7, sloped, above] {\tiny radius};&lt;br /&gt;\end{tikzpicture}&lt;/pre&gt;&lt;br /&gt;What does all that do anyway?  Well not is not the time for a full PGF/Tikz tutorial, but some illustration may be of use:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\usetikzlibrary{calc,through, intersections,decorations.text}&lt;/pre&gt;That line tells the Tikz software that it is going to need the extra routines mentioned in the squiggly brackets to draw the picture.  The libraries mentioned are calc, to enable mathematical routines to be used on co-ordinates (like start here and move two times the number you first thought of to the left), through, to draw objects through other objects, intersections, to let us calculate the point where two lines cross, and decorations.text, which lets us draw text along squiggly lines.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\begin{tikzpicture} [scale=3]&lt;/pre&gt;This [begin]s the code to draw the [tikz] [picture].  The whole picture is at [scale] [3] (where 1 would be normal) so everything is nice and big and clear. &lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\def\myangle{117}&lt;/pre&gt;This is the key to our whole animation.  We are setting a variable which we can then change using sed (aaaargh).&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\clip (-1.5,-1.5) rectangle (-1.5,-1.5);&lt;/pre&gt;We tell the system we are only interested in the [rectangle] shaped region designated by the two corners [(-1.5,-1.5)] and [(-1.5,-1.5)], so it doesn't need to draw anything that falls outside that region.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\coordinate (A) at (0,0);&lt;br /&gt;\coordinate (B) at (1,0);&lt;/pre&gt;These commands do the same thing for two different points.  We are basically just giving a name to to points [(0,0)] and [(1,0)].  This means that in the future when we want to refer to the points we can just use the letters [A] and [B] instead of remembering the exact positions.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\node [blue, name path=blue_circle,draw,circle through=(B)] at (A) {};&lt;/pre&gt;That is the first really scary command.  All it does is draw a circle.  Why is it not in the form [draw] a [circle]?  Well, we are using the [through] library here, which only works with nodes.  So we have to stick a node down [at (A)] with [{}] no text attached to it.  This is just a hypothetical point.  However, we then [draw] around the node a [circle], coloured [blue], [name]d [blue_circle] which passes [through] the point called [B].&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\draw [black, fill] (A) circle (1pt) node [below] {\tiny centre};&lt;/pre&gt;This command DOES just [draw] a [circle].  The circle is coloured [black] and is [fill]ed in, so it looks like a dot.  It is centred at point [A], and has a radius of [1pt], which is a tenth of a unit long.  We also attach a [node] to the circle (instead of the other way round like last time). This node is positioned [below] point A.  The node has the text [centre] attached to it in a [tiny] font size.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\draw [red, dashed] (A) -- (B);&lt;/pre&gt;This is perhaps the least scary command we have seen so far.  This [draw]s a [red] [dashed] line ([--]) between the points [A] and [B].  Simples.  You can see, though, why we would want to define A and B earlier, since we are using them so often.  It would be a pain to have to keep refering to the exact position all the time.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\path [name path=radius, rotate=\myangle] (A) -- ++(1.5,0);&lt;/pre&gt;This command looks quite different.  It marks an invisible [path] on the diagram.  Why invisible?  Well there is no [draw] command.  What's the point in this?  Wait and see.  The path is [name]d [radius].  It is a line ([--]) from the point [A] to a point which is [1.5] units further [++] from the centre in along the x axis and [0] units further from the centre along the y axis.  In other words, you take the point A, which is (0,0), and you add [++] 1.5 to the x co-ordinate (the first 0) and 0 to the y co-ordinate (the second 0).  All this does is marks an invisible line one and a half units long along the x axis.  But that it not all we do!  We then [rotate] the line by [\myangle] degrees.  If you recall, this was the variable we set right at the beginning.  The idea is that when the variable is changed by sed (aaaargh) it will filter down to this instruction as well.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\draw [red, -&gt;] ($(A)+(0.5,0)$) arc (0:\myangle:0.5cm);&lt;/pre&gt;OK, another scary one.  This at least [draw]s something.  It actually draws an [arc].  The arc is coloured [red] and has a [&gt;] at the end of it.  If it had a [&gt;] at the beginning the command would have a [&lt;] in it instead.  The arc starts at the point (A) [+] [0.5] units along the x axis.  This uses the calc library to work out the starting co-ordinate for the arc from A.  To use the calc library you put the calculation itself in between the [$] symbols.  Because the calculation returns a bare co-ordinate, you need to have the whole thing in brackets as well.The arc itself is from [0] degrees on a circle of radius [0.5cm] to [\myangle] degrees (there it is again).  This will draw a varyingly large section of a circle that is still centred on the point (A).  Why centred on point (A)?  Well the zero degree point of the circle is drawn half a unit away from (A) and the radius is half a unit long.  So automatically it centres on (A).&lt;pre class="postCode"&gt;\path [decorate,decoration={raise=-5pt, text along path, text={|\tiny|angle ||}, text align=center, text color=red, reverse path}] ($(A)+(0.5,0)$) arc (0:\myangle:0.5cm);&lt;/pre&gt;That is fairly horrible.  First of all, ignore the bit in square brackets.  This command starts by marking another of these invisible paths.  The path is actually exactly the same [($(A)+(0.5,0)$) arc (0:\myangle:0.5cm)] as we drew in red last time.  Why a new command?  Well the bit in square brackets at the beginning does not play well with actually drawing the arc.&lt;br /&gt;&lt;br /&gt;So what's in the square brackets?  These commands use the decorations.text library to draw [text] [along] the [path] of the arc.  This means the text rounds itself to the arc which is pleasing to look at.  The text is [raise]s by [-5pt] or half a unit, from the path itself.  It is [align]ed to the [centre] of the path, coloured [red] and [reverse]d (otherwise it would appear upside down).  The text itself is [angle] and is in a [tiny] font size.  It is a complete mystery to me why these text settings uses a different format to the text settings for nodes, but he ho, that's life.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\draw [name intersections={of=blue_circle and radius, by=C}] [orange, -&gt;] (A) -- (C) node [pos=0.7, sloped, above] {\tiny radius}&lt;/pre&gt;This is our last drawing command.  What this does is [draw]s a line [--] between points [A] and [C].  Hang on though, where is point C?  Well, look at the bit in square brackets at the very beginning of that.  That bit uses the intersections library to [name] the [intersection] [of] the [blue_circle] and the invisible line called [radius].  The name given is [C].  This becomes a co-ordinate we can use just like A and B, although we never need to know exactly what its position is.  So we can merrily change the size of the angle, and this command will always know where the radius meets the circle.&lt;br /&gt;&lt;br /&gt;The line we end up drawing is [orange], just to be different, and has a [&gt;] bit on the end of it.  It has a node [above] the line, which is [sloped] along the line.  The slope works with lines, but not with arcs, which is why we use the decorations library for the arc.  The node is [pos]itioned 70% [0.7] of the way to point C.  The node contains the text [radius] written in [tiny] font size.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\end{tikzpicture}&lt;/pre&gt;This line [end]s the code to draw the [tikz] [picture].&lt;br /&gt;&lt;br /&gt;OK, good.  What does that draw if myangle is 117?  It draws this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-70uGpnfZhMk/TigoKZSuhAI/AAAAAAAAASk/QY1A1DMJCLA/s1600/offs_example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-70uGpnfZhMk/TigoKZSuhAI/AAAAAAAAASk/QY1A1DMJCLA/s1600/offs_example.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Hopefully you can see that it is a nice blue circle, with a line drawn at 117 degrees from the horizontal dashed red line, with an arc half the size of the blue circle in red marking the size of the angle.&lt;br /&gt;&lt;br /&gt;Right, how do we animate this?  First we need to generate a file which can be read by the Ubuntu command line program [pdflatex].  This has to be a proper Latex file, not just a series of Tikz commands like above.  So we need to top and tail our command to generate the proper latex file.  We add these commands at the beginning:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\documentclass{article}&lt;br /&gt;\usepackage{tikz}&lt;br /&gt;\begin{document}&lt;/pre&gt;&lt;br /&gt;And this command at the end:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\end{document}&lt;/pre&gt;&lt;br /&gt;We also need to change the 117 angle to something that we can easily find and replace using sed (aaargh).  A random collection of letters should mean that we do not get any false matches.  So we end up with:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\documentclass{article}&lt;br /&gt;\usepackage{tikz}&lt;br /&gt;\begin{document}&lt;br /&gt;\usetikzlibrary{calc,through, intersections,decorations.text}&lt;br /&gt;\begin{tikzpicture} [scale=3]&lt;br /&gt;\def\myangle{xyzzy};&lt;br /&gt;\clip (-1.5,-1.5) rectangle (1.5,1.5);&lt;br /&gt;\coordinate (A) at (0,0);&lt;br /&gt;\coordinate (B) at (1,0);&lt;br /&gt;\node [blue, name path=blue_circle,draw,circle through=(B)] at (A) {};&lt;br /&gt;\draw [black, fill] (A) circle (1pt) node [below] {\tiny centre};&lt;br /&gt;\draw [red, dashed] (A) -- (B);&lt;br /&gt;\path [name path=radius, rotate=\myangle] (A) -- ++(1.5,0);&lt;br /&gt;\draw [red, -&gt;] ($(A)+(0.5,0)$) arc (0:\myangle:0.5cm);&lt;br /&gt;\path [decorate,decoration={raise=-5pt, text along path, text={|\tiny|angle ||}, text align=center, text color=red, reverse path}](0.5,0) arc (0:\myangle:0.5cm);&lt;br /&gt;\draw [name intersections={of=blue_circle and radius, by=C}] [orange, -&gt;] (A) --  (C) node [pos=0.7, sloped, above] {\tiny radius};&lt;br /&gt;\end{tikzpicture}&lt;br /&gt;\end{document}&lt;/pre&gt;&lt;br /&gt;You copy that code, and paste it into [gedit] and save it to a file called, say, [master_frame.tex] in your [~] home directory.  Or you could paste this command into a terminal window, which does the same thing:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &gt; ~/master_frame.tex &lt;&lt; "EOF"&lt;br /&gt;\documentclass{article}&lt;br /&gt;\usepackage{tikz}&lt;br /&gt;\begin{document}&lt;br /&gt;\usetikzlibrary{calc,through, intersections,decorations.text}&lt;br /&gt;\begin{tikzpicture} [scale=3]&lt;br /&gt;\def\myangle{xyzzy};&lt;br /&gt;\clip (-1.5,-1.5) rectangle (1.5,1.5);&lt;br /&gt;\coordinate (A) at (0,0);&lt;br /&gt;\coordinate (B) at (1,0);&lt;br /&gt;\node [blue, name path=blue_circle,draw,circle through=(B)] at (A) {};&lt;br /&gt;\draw [black, fill] (A) circle (1pt) node [below] {\tiny centre};&lt;br /&gt;\draw [red, dashed] (A) -- (B);&lt;br /&gt;\path [name path=radius, rotate=\myangle] (A) -- ++(1.5,0);&lt;br /&gt;\draw [red, -&gt;] ($(A)+(0.5,0)$) arc (0:\myangle:0.5cm);&lt;br /&gt;\path [decorate,decoration={raise=-5pt, text along path, text={|\tiny|angle ||}, text align=center, text color=red, reverse path}](0.5,0) arc (0:\myangle:0.5cm);&lt;br /&gt;\draw [name intersections={of=blue_circle and radius, by=C}] [orange, -&gt;] (A) --  (C) node [pos=0.7, sloped, above] {\tiny radius};&lt;br /&gt;\end{tikzpicture}&lt;br /&gt;\end{document}&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;When you run [pdflatex] it takes the master_frame.tex file and turns it into a pdf document.  This is not what we want.  We want a series of jpegs.  We also do not want an A4 page, which is what [pdflatex] is going to give us.  So what we do is convert a test sample, work out what crop we need to apply (to get rid of the unnecessary areas) and note that down somewhere.  If we simply run pdflatex on our master frame it is going to fail, because it will try and draw an angle of size xyzzy, which makes no sense.  So first lets create our test frame:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sed 's/{xyzzy}/{'117'}/' ~/master_frame.tex &gt; ~/test.tex&lt;/pre&gt;And we now generate the pdf file from it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;pdflatex ~/test.tex&lt;/pre&gt;&lt;br /&gt;That should work.  It it doesn't, something has gone wrong with your installation of latex and pgf.  Go and look at my post on how to do that to make sure you have covered all the bases.  To display the pdf you can open it in any pdf viewer - it is just a pdf.  However, we need a jpeg, so let's convert it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;convert -density 300 test.pdf test.jpg&lt;/pre&gt;&lt;br /&gt;The [convert] command makes sense, but what about the [density 300] stuff?  Well the pdf we have made is of &lt;a href="http://en.wikipedia.org/wiki/Vector_graphics"&gt;vector graphics&lt;/a&gt; which can scale without losing detail to any resolution you like.  A jpeg image is essentially &lt;a href="http://en.wikipedia.org/wiki/Raster_graphics"&gt;raster graphics&lt;/a&gt; which has a fixed resolution.  To convert vector to raster you need to tell the vector image what resolution to scale to.  here we have chosen [300] dpi.&lt;br /&gt;&lt;br /&gt;We now need to get our cropping parameters.  To get these run the [display] command (from the imagemagick package I think):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;display test.jpg&lt;/pre&gt;&lt;br /&gt;When the image opens, left click anywhere on it to bring up a menu.  Select the Transform drop down menu and then click on crop.  This lets you draw a box around the image.  While you are doing this, look in the top left corner of the display window.  You will see numbers changing as you draw your box.  When you are satisfied that it fits the image and no more, note down those numbers AND symbols.  For me they were [724x724+789+692].  Now close the display window.  We are done with it.  If it fights back, click on your terminal window and hit [CTRL+C] to shut it down.  Now let's test out cropping parameters by re-doing a conversion to jpeg:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;convert -density 300 -crop 724x724+789+692 test.pdf test.jpg&lt;/pre&gt;&lt;br /&gt;Note that the numbers and symbols we noted in the last step just get pasted in here, after the [crop] command.  Nice and logical.  If you now do the [display test.jpg] command again, you should find a nicely cropped picture of our diagram.  If not, go back and check your cropping parameters are correct.&lt;br /&gt;&lt;br /&gt;We are now going to generate a whole lot of [.tex] files - one for each frame of the animation we are going to make.  It would probably be best to put these in their own directory:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir ~/frames&lt;/pre&gt;&lt;br /&gt;You can now generate all your frames by running this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for angle in {1..360}; do  sed 's/{xyzzy}/{'$angle'}/' ~/master_frame.tex &gt; ~/frames/$angle.tex; echo $angle; done&lt;/pre&gt;&lt;br /&gt;That looks pretty horrendous, doesn't it?  Well, what is happening here is a loop.  We define a variable at the beginning of the command called [angle].  We then run through the hold command setting the variable to every number from [1] to [..] [360].  The variable is then passed to the next section of the command which [do]es the [sed] (aaargh) command on the [~/master_frame.tex] file.  The sed command spits out the file, but changes every instance of the text [{xyzzy}] to the same squiggly brackets but with the value assigned to angle in between the brackets.  This sets our angle size for the frame.  The result from the sed command is sent [&gt;] to a [.tex] file in the [~/frames/] folder named after the size of angle in the file.  The command then reports [echo] which frame it has completed, and [done] goes back to the beginning for a new number.&lt;br /&gt;&lt;br /&gt;We now need to move into the frames folder for the next bit:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd ~/frames&lt;/pre&gt;&lt;br /&gt;Now if you look at the contents of the frames directory they will not all be three digit file names, meaning they count up from 1 to 99 to 360.  The leading zeros are missing, i.e. they are not 001 to 099 to 360 and our system will break.  You can fix that, by adding the leading zeros with these commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for file in ?.tex; do cat $file &gt; 00$file; rm $file; echo $file; done&lt;br /&gt;for file in ??.tex; do cat $file &gt; 0$file; rm $file; echo $file; done&lt;/pre&gt;&lt;br /&gt;Why could we not just generate angles from 001..360?  If we do that pdflatex thinks we are using base 8, or octal numbers, and misses out every ninth and tenth frame.  We can now do the mass generation of all the pdf files.  This will take a while.  The command is as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for file in ???.tex; do pdflatex -interaction=batchmode $file; echo $file; done&lt;/pre&gt;&lt;br /&gt;This is another loop, that picks up every [.tex] file with three characters in its name, and sticks it into the [pdflatex] command.  Next we need to use our cropping details to produce the jpeg files:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for file in *.pdf; do convert -density 300 -crop 724x724+789+692  $file ${file%.???}.jpg; echo $file; done&lt;/pre&gt;&lt;br /&gt;This just uses a similar loop to the last command.  It applies to all the [.pdf] files in the folder - so make sure that you started with an empty one.  The percentage symbol is clever, it deletes the extension and replaces it with [.jpg] so the output of the command is a whole lot of [.jpg] files with the same name as the [.pdf] files which generated them.  If we are really clever, we can just duplicate all our frames in reverse order to make the animation reverse when it gets to the end.  This creates an unending loop, but is not strictly necessary with our animation here which is essentially circular.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;marker=360; for file in *.jpg; do frame=$(($marker+360)); cp $file $frame.jpg; marker=$(($marker -1)); echo $marker; done&lt;/pre&gt;&lt;br /&gt;That is absolutely a nightmare.  That it does is set a complicated loop in place counting back from 360 to 1.  Why?  Well we want the 360 frames we have already to be played in reverse.  So we want 361 to be the same as 360, and 362 to be 359 and so on down to 1 being 720.  So we start at 360 and count back.  The [do] command sets the [frame] variable to be the marker PLUS 360.  So when the marker is 360 it is 720.  However, the [file] variable is going through the directory in numerical order.  So the next command [c]o[p]ies the [file] to the frame number.  The loop then reduces the marker by one and goes back to the beginning.  The sequence looks like this:&lt;br /&gt;&lt;br /&gt;Marker-File-Maths-Frame&lt;br /&gt;360-1-(360+360)-720&lt;br /&gt;359-2-(359+360)-719&lt;br /&gt;358-3-(358+360)-718&lt;br /&gt;...&lt;br /&gt;2-359-(2+360)-362&lt;br /&gt;1-360-(1+360)-361&lt;br /&gt;&lt;br /&gt;It is a bit of a wrestle, but it gets there.&lt;br /&gt;&lt;br /&gt;Now we have all our jpeg frames, we can use [ffmpeg] to compress them into an mp4 video file like so:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ffmpeg -r 25 -b 2500k -i %3d.jpg -pass 1 -y circle.mp4 &amp;&amp; ffmpeg -r 25 -b 2500k -i %3d.jpg -pass 2 -y circle.mp4&lt;/pre&gt;&lt;br /&gt;That's another horror, but it breaks down like this:  It uses the [ffmpeg] command set at a f[r]ame rate of [25] per second, and a [b]itrate of [2500k] per second, and takes its [i]nput as every [.jpg] file in the current folder with a three digit name.  It runs a first [1] [pass] through the file to see where best to use its bitrate and saves the output to [circle.mp4] automatically answering [y]es to any question about overwriting that file.  It then immediately [&amp;&amp;] runs a second [2] [pass] with the same input and settings to produce the final output in the file called [circle.mp4].&lt;br /&gt;&lt;br /&gt;You can now view your creation by running:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mplayer circle.mp4 -loop 0&lt;/pre&gt;&lt;br /&gt;It should look like this:&lt;br /&gt;&lt;br /&gt;&lt;embed allowfullscreen="true" allowscriptaccess="always" height="480" src="http://www.youtube.com/v/znzJnYqKIyQ?hl=en&amp;amp;fs=1&amp;amp;autoplay=1&amp;amp;loop=1" type="application/x-shockwave-flash" width="480"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Once you have done it once, it is useful to be able to tweak one entry in the master frame file and then run all the commands that follow automatically.  You can do that with this command block.  It first cleans out the ~/frames folder of everything, and then runs all the commands above, one after the other:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd ~/frames &amp;&amp; rm * &amp;&amp; cd ~ &amp;&amp; for angle in {1..360}; do  sed 's/{xyzzy}/{'$angle'}/' ~/master_frame.tex &gt; ~/frames/$angle.tex; echo $angle; done &amp;&amp; cd ~/frames &amp;&amp; for file in ?.tex; do cat $file &gt; 00$file; rm $file; echo $file; done &amp;&amp; for file in ??.tex; do cat $file &gt; 0$file; rm $file; echo $file; done &amp;&amp; for file in ???.tex; do pdflatex -interaction=batchmode $file; echo $file; done &amp;&amp; for file in *.pdf; do convert -density 300 -crop 724x724+789+692  $file ${file%.???}.jpg; echo $file; done &amp;&amp; marker=360; for file in *.jpg; do frame=$(($marker+360)); cp $file $frame.jpg; marker=$(($marker -1)); echo $marker; done &amp;&amp; ffmpeg -r 25 -b 2500k -i %3d.jpg -pass 1 -y circle.mp4 &amp;&amp; ffmpeg -r 25 -b 2500k -i %3d.jpg -pass 2 -y circle.mp4 &amp;&amp; mplayer circle.mp4 -loop 0&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4476909673625222454?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4476909673625222454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/detailed-tikz-animations.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4476909673625222454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4476909673625222454'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/detailed-tikz-animations.html' title='Detailed Tikz Animations'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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/-70uGpnfZhMk/TigoKZSuhAI/AAAAAAAAASk/QY1A1DMJCLA/s72-c/offs_example.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8808165197126222359</id><published>2011-07-15T11:59:00.000+01:00</published><updated>2011-07-21T12:39:43.620+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Hackintosh'/><title type='text'>Installing OSX on a Hackintosh</title><content type='html'>Because I don't have enough grey hairs I have decided to try to install OSX on my Intel PC Hardware.&amp;nbsp; Couple of reasons for this.&amp;nbsp; One, I have an iPhone and and iPad and I want to see what the fuss is about Apple Personal Computing without selling a kidney to buy their hardware.&amp;nbsp; Two, it's a technical challenge innit.&lt;br /&gt;&lt;br /&gt;I HAVE managed to install OSX on an AMD Frankenmachine, and it seemed to work OK, but is very slow.&amp;nbsp; The graphics card does not support any of the Steam Games I have for OSX (Portal et al).&amp;nbsp; If I put a bigger graphics card in the Frankentosh the PSU cries enough and shuts down.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So I have decided to do it properly this time.&amp;nbsp; I started off with a completely genuine (not really) image of Snow Leopard.&amp;nbsp; I wanted to install it onto a USB Key so I could boot from that.&amp;nbsp; OSX didn't like the DVD Image.&amp;nbsp; It refused to write it to the USB Key.&amp;nbsp; It said it needed to be "scanned" and then refused to scan it.&lt;br /&gt;&lt;br /&gt;I managed to find a useful OSX command which forces the machine to write the image without scanning it, and it is thus:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo asr -noverify -source "/[location of image]/Mac OS X Install DVD.dmg" -target "/Volumes/[mount point of USB Key]"&lt;/pre&gt;&lt;br /&gt;This did at least manage to write the image to the USB Key, and it does seem to boot when using the &lt;a href="http://tonymacx86.blogspot.com/2010/04/iboot-multibeast-install-mac-os-x-on.html"&gt;iboot&lt;/a&gt; system.&amp;nbsp; However it failed miserably at the bit which says "When you get to the installation screen, open Utilities/Disk Utility.".&amp;nbsp; It doesn't do anything, it just sits there spinning a circle for fecking hours.&amp;nbsp; Ah well.&lt;br /&gt;&lt;br /&gt;This maybe because I have failed to follow all the previous instructions about removing all non essential hardware from the machine, resulting in it being festooned with TV Cards, USB Peripherals and so on.&amp;nbsp; Or it could be because the completely genuine (not really) DVD Image I was using is not really completely genuine.&lt;br /&gt;&lt;br /&gt;So I have shelled out for a boxed set of Snow Leopard, iLife '11 and iWork '09, and I will try this again with the genuine kit when it arrives.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8808165197126222359?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8808165197126222359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/installing-osx-on-hackintosh.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8808165197126222359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8808165197126222359'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/installing-osx-on-hackintosh.html' title='Installing OSX on a Hackintosh'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-7614493342681314998</id><published>2011-07-08T15:06:00.000+01:00</published><updated>2011-07-08T15:06:00.784+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tikz'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Animating TEX</title><content type='html'>Short post today but I wanted to set out my work-flow used when generating animated tikz diagrams.&lt;br /&gt;&lt;br /&gt;1) Start with your tikz diagram.  Instead of fixed values, define variables to be used in their place:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\def\angle1{x}&lt;/pre&gt;&lt;br /&gt;2) Run the sed (aaargh) command on that master file using some kind of loop which changes the value {x} each time through and then spits out the results into numerical .tex files.&lt;br /&gt;&lt;br /&gt;2.5) rename all the .tex files to make sure they have the appropriate amount of trailing zeros.&lt;br /&gt;&lt;br /&gt;3) Run PDF Latex on each individual .tex file to get a pdf.&lt;br /&gt;&lt;br /&gt;4) Convert the PDF to jpg using an appropriate DPI and cropping factor - will vary for each master diagram, so generate a test first and id the correct cropping settings.  The display [name].jpg command is very useful for this.&lt;br /&gt;&lt;br /&gt;4.5) If desired run another loop to copy all the files in such a way as the animation reverses to create a continuous loop.&lt;br /&gt;&lt;br /&gt;5) Take all the jpg files and pipe them into ffmpeg to compress to whatever you want, but x264 is useful.  Animated gif may be attractive but ffmpeg doesn't like it.&lt;br /&gt;&lt;br /&gt;Job done.  More details and exact ubuntu commands to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-7614493342681314998?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/7614493342681314998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/animating-tex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7614493342681314998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7614493342681314998'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/animating-tex.html' title='Animating TEX'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-5339929392950087179</id><published>2011-07-01T11:59:00.061+01:00</published><updated>2011-07-01T11:59:00.826+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Firefox 5 from Source</title><content type='html'>These are the instructions for installing FF5 from source on the LFS system I built in earlier posts, assuming that you have not installed any version.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.14.tar.bz2&lt;br /&gt;tar -xjvf /sources/extras/libIDL-0.8.14.tar.bz2&lt;br /&gt;cd libIDL-0.8.14&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libIDL-0.8.14&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2&lt;br /&gt;wget http://www.linuxfromscratch.org/patches/blfs/svn/Python-2.6.4-bdb_4.8-1.patch&lt;br /&gt;wget http://docs.python.org/ftp/python/doc/2.6/python-2.6-docs-html.tar.bz2&lt;br /&gt;tar -xjvf /sources/extras/Python-2.6.4.tar.bz2&lt;br /&gt;cd Python-2.6.4&lt;br /&gt;sed -i "s/ndbm_libs = \[\]/ndbm_libs = ['gdbm', 'gdbm_compat']/" setup.py&lt;br /&gt;patch -Np1 -i /sources/extras/Python-2.6.4-bdb_4.8-1.patch&lt;br /&gt;./configure --prefix=/usr --enable-shared&lt;br /&gt;make&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;chmod -v 755 /usr/lib/libpython2.6.so.1.0&lt;br /&gt;install -v -m755 -d /usr/share/doc/Python-2.6.4/html&lt;br /&gt;tar --strip-components=1 --no-same-owner --no-same-permissions -C /usr/share/doc/Python-2.6.4/html -xvf /sources/extras/python-2.6-docs-html.tar.bz2&lt;br /&gt;cat &gt;&gt; /etc/profile &lt;&lt; "EOF"&lt;br /&gt;export PYTHONDOCS=/usr/share/doc/Python-2.6.4/html&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf Python-2.6.4&lt;/pre&gt;&lt;pre class="postCode"&gt;wget http://www.tortall.net/projects/yasm/releases/yasm-1.0.1.tar.gz&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/extras/yasm-1.0.1.tar.gz&lt;br /&gt;cd yasm-1.0.1&lt;br /&gt;CC="gcc -fPIC" ./configure --prefix=/usr&lt;br /&gt;time make $CORES_TO_USE&lt;br /&gt;make install&lt;/pre&gt;&lt;pre class="postCode"&gt;wget http://cairographics.org/releases/cairo-1.10.2.tar.gz&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/desktop/cairo-1.10.2.tar.gz&lt;br /&gt;cd cairo-1.10.2&lt;br /&gt;./configure --prefix=/usr --enable-tee=yes&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf cairo-1.10.2&lt;/pre&gt;&lt;pre class="postCode"&gt;wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/5.0/source/firefox-5.0.source.tar.bz2&lt;br /&gt;tar -xjvf /sources/extras/firefox-5.0.source.tar.bz2&lt;br /&gt;cd moz*&lt;br /&gt;cat &gt; .mozconfig &lt;&lt; "EOF"&lt;br /&gt;ac_add_options --enable-application=browser&lt;br /&gt;. $topsrcdir/browser/config/mozconfig&lt;br /&gt;mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../firefox-build&lt;br /&gt;mk_add_options MOZ_MAKE_FLAGS="-j2"&lt;br /&gt;ac_add_options --prefix=/opt/firefox5&lt;br /&gt;ac_add_options --enable-optimize&lt;br /&gt;ac_add_options --enable-system-cairo&lt;br /&gt;ac_add_options --with-system-jpeg&lt;br /&gt;#ac_add_options --with-system-png&lt;br /&gt;ac_add_options --with-pthreads&lt;br /&gt;ac_add_options --with-system-zlib&lt;br /&gt;ac_add_options --disable-accessibility&lt;br /&gt;ac_add_options --disable-crashreporter&lt;br /&gt;ac_add_options --disable-dbus&lt;br /&gt;ac_add_options --disable-gnomevfs&lt;br /&gt;ac_add_options --disable-necko-wifi&lt;br /&gt;ac_add_options --disable-installer&lt;br /&gt;ac_add_options --disable-javaxpcom&lt;br /&gt;ac_add_options --disable-tests&lt;br /&gt;ac_add_options --disable-updater&lt;br /&gt;ac_add_options --disable-libnotify&lt;br /&gt;ac_add_options --enable-official-branding&lt;br /&gt;ac_add_options --enable-safe-browsing&lt;br /&gt;ac_add_options --enable-strip&lt;br /&gt;EOF&lt;/pre&gt;&lt;pre class="postCode"&gt;time make -f client.mk build&lt;br /&gt;make -f client.mk install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf moz*&lt;/pre&gt;&lt;pre class="postCode"&gt;cat &gt;&gt; /etc/ld.so.conf &lt;&lt; "EOF"&lt;br /&gt;# Extra Path so Firefox's libraries can be used by Flash10&lt;br /&gt;/opt/firefox5/lib/firefox-5.0&lt;br /&gt;# End of Extra Path.&lt;br /&gt;EOF&lt;/pre&gt;&lt;pre class="postCode"&gt;wget http://curl.haxx.se/download/curl-7.20.0.tar.bz2&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xjvf /sources/extras/curl-7.20.0.tar.bz2&lt;br /&gt;cd curl-7.20.0&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;find docs -name "Makefile*" -o -name "*.1" -o -name "*.3" | xargs rm&lt;br /&gt;install -v -d -m755 /usr/share/doc/curl-7.20.0&lt;br /&gt;cp -v -R docs/* /usr/share/doc/curl-7.20.0&lt;/pre&gt;&lt;pre class="postCode"&gt;wget http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz&lt;br /&gt;tar -xzvf install_flash_player_10_linux.tar.gz&lt;br /&gt;mkdir -v /opt/firefox5/lib/firefox-5.0/plugins&lt;br /&gt;cp -v libflashplayer.so /opt/firefox5/lib/firefox-5.0/plugins&lt;br /&gt;cp -v ./usr/bin/flash-player-properties /usr/bin/&lt;/pre&gt;Add this to the openbox menu.xml file:&lt;pre class="postCode"&gt;&amp;lt;item label="flash player properties"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;execute&amp;gt;&lt;br /&gt;/usr/bin/flash-player-properties&lt;br /&gt;&amp;lt;/execute&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;/pre&gt;Download Java from &lt;a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u21-oth-JPR@CDS-CDS_Developer"&gt;here&lt;/a&gt;.OR:&lt;pre class="postCode"&gt;wget http://download.oracle.com/otn-pub/java/jdk/6u26-b03/jdk-6u26-linux-i586.bin&lt;br /&gt;mv jdk-6u26-linux-i586.bin* jdk-6u26-linux-i586.bin&lt;br /&gt;chmod +x /sources/extras/jdk-6u26-linux-i586.bin&lt;br /&gt;cd /dev/shm&lt;br /&gt;/sources/extras/jdk-6u26-linux-i586.bin&lt;br /&gt;cd jdk1.6.0_26&lt;br /&gt;install -v -m755 -d /opt/jdk-6u26&lt;br /&gt;mv -v * /opt/jdk-6u26&lt;br /&gt;chown -v -R root:root /opt/jdk-6u26&lt;br /&gt;ln -v -sf xawt/libmawt.so /opt/jdk-6u26/jre/lib/i386/&lt;br /&gt;cd ..&lt;br /&gt;sed -i 's@XINERAMA@FAKEEXTN@g' /opt/jdk-6u26/jre/lib/i386/xawt/libmawt.so&lt;br /&gt;ln -v -nsf jdk-6u26 /opt/jdk&lt;br /&gt;ln -sv /opt/jdk/jre/lib/i386/libnpjp2.so /opt/firefox5/lib/firefox-5.0/plugins&lt;/pre&gt;&lt;pre class="postCode"&gt;cat &gt;&gt; /etc/profile.d/30-jdk.sh &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/profile.d/30-jdk.sh&lt;br /&gt;&lt;br /&gt;# Set JAVA_HOME directory&lt;br /&gt;JAVA_HOME=/opt/jdk&lt;br /&gt;&lt;br /&gt;# Adjust PATH&lt;br /&gt;pathappend ${JAVA_HOME}/bin PATH&lt;br /&gt;&lt;br /&gt;# Auto Java CLASSPATH&lt;br /&gt;# Copy jar files to, or create symlinks in this directory&lt;br /&gt;AUTO_CLASSPATH_DIR=/usr/lib/classpath&lt;br /&gt;pathprepend . CLASSPATH&lt;br /&gt;for dir in `find ${AUTO_CLASSPATH_DIR} -type d 2&gt;/dev/null`; do&lt;br /&gt;pathappend $dir CLASSPATH&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;export JAVA_HOME CLASSPATH&lt;br /&gt;unset AUTO_CLASSPATH_DIR&lt;br /&gt;unset dir&lt;br /&gt;&lt;br /&gt;# End /etc/profile.d/30-jdk.sh&lt;br /&gt;EOF&lt;/pre&gt;&lt;pre class="postCode"&gt;source /etc/profile&lt;/pre&gt;If you have installed openoffice:&lt;pre class="postCode"&gt;ln -sv /opt/openoffice-3.2.1/program/libnpsoplugin.so /opt/firefox5/lib/firefox-5.0/plugins&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-5339929392950087179?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/5339929392950087179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/firefox-5-from-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5339929392950087179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5339929392950087179'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/07/firefox-5-from-source.html' title='Firefox 5 from Source'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-7418565967153040129</id><published>2011-06-24T11:59:00.003+01:00</published><updated>2011-07-21T12:42:05.948+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Parameter Substitution</title><content type='html'>That is a bloody boring title for a blog post.  AAAAAnyway, it means that when you are farting around with variables holding filenames in bash scripts, or single commands, you may want to edit the file name.  For instance, remember in the PDF compression script we strip the file extension off the filename and add .pdf to create the output filename.  Very useful.&lt;br /&gt;&lt;br /&gt;This post was prompted by trying to compress a 1000+ page pdf document.  The pain was that the pdfimage command only switches to 4 digit file names at 1000.  So for 1-999 you get 001 etc instead of 0001.  This has the potential to screw everything up when you come to compile your final pdf.  You do not want page 1000 to be before page 200, just because it starts with a lower number.&lt;br /&gt;&lt;br /&gt;So how do we insert the missing 0?&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for file in imageroot-???.*; do mv $file  imageroot-0${file#imageroot-}; echo $file; done&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-7418565967153040129?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/7418565967153040129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/06/parameter-substitution.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7418565967153040129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7418565967153040129'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/06/parameter-substitution.html' title='Parameter Substitution'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2089491191131495381</id><published>2011-06-17T11:59:00.000+01:00</published><updated>2011-06-17T11:59:00.806+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gnuplot'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Gnuplot</title><content type='html'>If you are using the last LTS of Ubuntu, then your Gnuplot version will be out of date.  You can't get fancy stuff like transparent surface plots.  To download and install the latest version you need to run these commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cvs -d:pserver:anonymous@gnuplot.cvs.sourceforge.net:/cvsroot/gnuplot login&lt;br /&gt;cvs -z3 -d:pserver:anonymous@gnuplot.cvs.sourceforge.net:/cvsroot/gnuplot co -P gnuplot&lt;br /&gt;cd gnuplot&lt;br /&gt;./prepare&lt;br /&gt;./configure --with-readline=gnu&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;/pre&gt;&lt;br /&gt;This will break your Ubuntu packaging system though - so be careful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2089491191131495381?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2089491191131495381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/06/gnuplot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2089491191131495381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2089491191131495381'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/06/gnuplot.html' title='Gnuplot'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4250038925115476431</id><published>2011-06-10T11:59:00.011+01:00</published><updated>2011-06-10T11:59:00.429+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tikz'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ktikz</title><content type='html'>If you are doing quite a bit of Latex work with the Tikz graphical librarys then you will probably like to use a wysiwyg program so that you can tweak your wonderful creations.  Such a program for Ubuntu is ktikz.&lt;br /&gt;&lt;br /&gt;To install it you need to install the latest version of TexLive.  If using Ubuntu Natty or later then I think you get the latest version by:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install texlive&lt;/pre&gt;&lt;br /&gt;With Maverick or earlier, you need to install the latest version manually to get all the bells and whistles:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz&lt;br /&gt;tar -xzvf install-tl-unx.tar.gz &lt;br /&gt;cd install-tl-20110526/&lt;br /&gt;sudo ./install-tl&lt;/pre&gt;&lt;br /&gt;The install will then run through - takes about an hour to download the stuff.  You can also download the DVD image via &lt;a href="http://www.tug.org/texlive/texlive2010.torrent"&gt;torrent&lt;/a&gt;, which would be a good way to have a backup for quick reinstall.  Once installed, you need to make sure you update your path:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;PATH=/usr/local/texlive/2010/bin/i386-linux:$PATH&lt;/pre&gt;&lt;br /&gt;Installing the ktikz software is a bit easier.  You just run the following commands to grab the dependencies in case you do not have them.  BTW this is for Lucid only.  There isn't a package for Maverick or Natty yet, but you could roll your own.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install build-essential cmake libqt4-dev qt4-dev-tools libpoppler-qt4-dev kdelibs5-dev pgf preview-latex-style&lt;br /&gt;wget http://www.hackenberger.at/ktikz/ubuntu_lucid/ktikz_0.10-1_i386.deb&lt;br /&gt;sudo dkpg -i ./ktikz_0.10-1_i386.deb&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You may need to preface some of the scripts with libraries to load:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\usepackage{tikz}&lt;br /&gt;\usetikzlibrary{calc}&lt;br /&gt;\usetikzlibrary{intersections}&lt;br /&gt;\usetikzlibrary{through}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4250038925115476431?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4250038925115476431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/06/ktikz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4250038925115476431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4250038925115476431'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/06/ktikz.html' title='Ktikz'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-1437417145143874298</id><published>2011-06-03T11:59:00.000+01:00</published><updated>2011-06-03T11:59:00.646+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Compressing PDF files</title><content type='html'>If you have got a hold of a PDF file which comprises lots and lots of images and nothing else it may well be huge if the images are not compressed.  You can fix this at the command line in ubuntu.  You do this as follows:&lt;br /&gt;&lt;br /&gt;You will need:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install pdftk imagemagik&lt;/pre&gt;&lt;br /&gt;First you need to unpack the images from the PDF.  Start this from a blank directory because we are going to automatically do things to all the files in this directory with a specific name.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;pdfimages /path/to/filename.pdf imageroot&lt;/pre&gt;&lt;br /&gt;You get lots of:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;imageroot-[three digit number].somethings&lt;/pre&gt;&lt;br /&gt;These somethings are either a ppm or a pbm filetype.  These are very, very, basic graphic image dumps - like a bmp image.  One is for texty stuff, and the other is for imagy stuff.  I therefore use these filetypes as wildcards in the next command, but you would need to replace these with the correct image types that are generated by this command if your results are different.  Such as if you choose to try and output jpeg files by using the [-j] option.&lt;br /&gt;&lt;br /&gt;Next you compress each image to a pdf, one page long.  This will not work properly if you did not start with a blank directory because we are going to command changes to be made to EVERY file in this directory with the extensions produced by the last command.&lt;br /&gt;&lt;br /&gt;For colour sources, you need jpg compression:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for file in *.{ppm,pbm}; do convert -compress jpeg -quality 50 $file  ${file%.???}.pdf; echo $file; done&lt;/pre&gt;&lt;br /&gt;That applies the commands between the [do] and the [done] bits to all [file]s with the extension of either [{,}] [ppm] or [pbm].  The commands in the middle [convert] the image files into pdf files using [jpeg] [compress]ion with [quality] [50]%.  You can obviously change the quality percentage to get the best results depending on your source material.  The result is sent to a file whose name is constructed from the input [file] variable [$] less whatever three letter [???] extension [.] it has, plus the characters [.pdf].  The next bit just prints out the last filename processed so you can make sure it is doing something if you are processing LOTS of files.&lt;br /&gt;&lt;br /&gt;For black and white sources you need fax compression:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for file in *.{ppm,pbm}; do convert -alpha off -monochrome -compress Group4 -quality 100 $file  ${file%.???}.pdf; echo $file; done&lt;/pre&gt;&lt;br /&gt;This is basically the same approach as last time, just with a change to the [convert] command.  This time the [jpeg] stuff is gone, and we have the [-alpha off -monochrome -compress Group4 -quality 100] bit instead.  I can't get the quality setting to do anything here.  The Group4 refers to the particular brand of fax compression which is applied.&lt;br /&gt;&lt;br /&gt;Finally we take all of those individual pdfs and we combine them into one big one.  Again, this will not work properly if you did not start with a blank directory.  This copies EVERY pdf which matches the search string (the imageroot*.pdf bit where * means anything) into the final pdf.  The classic error here would be making your image root name too similar to your original pdf name, with the result that the built pdf incorporates the original - hardly reducing the file size!&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;pdftk imageroot*.pdf cat output name_of_final_file.pdf&lt;/pre&gt;&lt;br /&gt;That uses the [pdf] [t]ool[k]it program to take every [*] file that starts with [imageroot] and ends with [.pdf] and con[cat]enates them into the [output] file named [name_of_final_file.pdf].&lt;br /&gt;&lt;br /&gt;Simples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-1437417145143874298?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/1437417145143874298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/06/compressing-pdf-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/1437417145143874298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/1437417145143874298'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/06/compressing-pdf-files.html' title='Compressing PDF files'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2651612922235354981</id><published>2011-05-27T11:59:00.047+01:00</published><updated>2011-05-27T11:59:00.224+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unity'/><category scheme='http://www.blogger.com/atom/ns#' term='liveCD'/><category scheme='http://www.blogger.com/atom/ns#' term='natty'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Testing Natty on Nvidia Hardware</title><content type='html'>The BIG THING about the Natty version of Ubuntu is that it comes with a prettified GUI.  It has a pop out panel on the left hand side of the screen containing your launcher icons.  This is absolutely NOT the same as Windows 7's task bar icons OR OSX's panel'o'icons because both of them are on the BOTTOM of the screen.  Ahem.&lt;br /&gt;&lt;br /&gt;Want to see what this looks like with the live cd? Have nvidia hardware?  Tough shit.  The nvidia driver installed on the live cd is a) open source (yay!) and b) does not support all the bells and whistles that this flashy new panel needs (boo!).  So you will have to install the proper nvidia drivers.  Which means rebooting.  Which is pointless on a live cd.&lt;br /&gt;&lt;br /&gt;Oh dear.  This is going to be a pain in the fucking arse isn't it?  Yes, yes it is.&lt;br /&gt;&lt;br /&gt;For a start a couple of useful commands for this kind of fiddling are:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo service gdm stop&lt;/pre&gt;&lt;br /&gt;This stops dead the GUI leaving you to happily fiddle with graphics driver settings.&lt;br /&gt;&lt;br /&gt;To restart the GUI you would just restart the gdm service yes?  Yes.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo service gdm start&lt;/pre&gt;&lt;br /&gt;OK.  So we have shut down the GUI.  Now we want to download the nvidia drivers.  I am presuming you have internet access from the LiveCD.  If not, see my earlier posts on that hilarious situation.  Download the drivers with this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://uk.download.nvidia.com/XFree86/Linux-x86/270.41.19/NVIDIA-Linux-x86-270.41.19.run&lt;/pre&gt;&lt;br /&gt;Make the driver file executable:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo chmod +x NVIDIA-Linux-x86-270.41.19.run&lt;/pre&gt;&lt;br /&gt;And run it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;./NVIDIA-Linux-x86-270.41.19.run&lt;/pre&gt;&lt;br /&gt;You will now get some whining messages about nouveau bollicksing up the whole plan.  This is the open source nvidia software we are trying to replace.  So lets just [r]e[m]ove the nouveau [mod]ule:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;rmmod nouveau&lt;/pre&gt;&lt;br /&gt;Doesn't fucking work.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo rmmod nouveau&lt;/pre&gt;&lt;br /&gt;Still doesn't fucking work.  Google.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo rmmod --force nouveau&lt;/pre&gt;&lt;br /&gt;Oh for fucks sake.  It still doesn't fucking work.  It turns out the nouveau driver is deeply embedded in the OS.  It ain't possible to just remove it.  It has taken over something called the framebuffer.  Without getting horrendously technical (shorthand for I have no fucking clue) this is the thing that gives you the text command line that you are using.  So ubuntu is trying to stop you doing the I.T. equivalent of sawing off the branch you are standing on.  If you turn off the framebuffer you will get a blank screen.  Which is not great as far as user interfaces go, but still probably a better experience than Windows ME.&lt;br /&gt;&lt;br /&gt;At this point you have two choices.  First you can disable the in-depth use of nouveau, which will then allow you to remove it without fucking up the framebuffer.  This needs to be done at boot time, each and every time you boot the LiveCD.  Secondly, you can write a script that forces ubuntu to remove nouveau (fucking up the framebuffer in the process) and then immediately installs the nvidia drivers with the least input necessary.&lt;br /&gt;&lt;br /&gt;The benefit with the first option is that you never get left with a blank screen, but it is a pain.  The benefit with the second option is that it can all be scripted, but leaves you with a blank screen for several minutes while it installs the drivers.  If it fails for any reason during the blank screen period, you're fucked.&lt;br /&gt;&lt;br /&gt;So, option one first.  Copy your downloaded driver file somewhere safe (USB Key).  Or just download it again next time, what do I care.  If you are using a LiveCD, reboot your LiveCD.  When it starts back up it flashes up a symbol of a keyboard and a hand.  Hit any key at that stage and you will get a boot menu.  You want to chose to Test Ubuntu.  You then want to hit F6 for other boot options.&lt;br /&gt;&lt;br /&gt;If you are using the LiveCD image from a USB Key via UNetbootin, then just highlight the "Test..." option and hit the tab key to edit the boot command.&lt;br /&gt;&lt;br /&gt;You should now be able to edit the boot command (it is a long string of options.  See the joys of grub elsewhere in this blog for info on what this does).  At the end of the boot command type in:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;nomodeset&lt;/pre&gt;&lt;br /&gt;Now complete the boot as normal.  Copy back, or re-download the nvidia driver to the home directory.  Now, hit CTRL+ALT+F1 to get to a text interface, and make sure the driver file is executable:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo chmod +x NVIDIA-Linux-x86-270.41.19.run&lt;/pre&gt;&lt;br /&gt;:and shut down the GUI:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo service gdm stop&lt;/pre&gt;&lt;br /&gt;:and run:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo rmmod nouveau&lt;/pre&gt;&lt;br /&gt;It should now work.  You can now install the driver:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo ./NVIDIA-Linux-x86-270.41.19.run&lt;/pre&gt;&lt;br /&gt;And it should eventually install happily.  Answer the questions sensibly, ignoring any errors.  Then just run this command to restart the GUI:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo service gdm start&lt;/pre&gt;&lt;br /&gt;Bask in the awe of the flashy bar.&lt;br /&gt;&lt;br /&gt;Option 2 is handled like this.  Boot as normal - no need for any fancy boot commands.  Copy back, or re-download the nvidia driver to the home directory.  Open a terminal window and paste this code into it to set up your script:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cat &gt; inst_nv.sh &lt;&lt; "EOF"&lt;br /&gt;echo 0 &gt; /sys/class/vtconsole/vtcon1/bind&lt;br /&gt;rmmod nouveau&lt;br /&gt;/etc/init.d/consolefont restart&lt;br /&gt;rmmod ttm&lt;br /&gt;rmmod drm_kms_helper&lt;br /&gt;rmmod drm&lt;br /&gt;chmod +x ./NVIDIA-Linux-x86-270.41.19.run&lt;br /&gt;./NVIDIA-Linux-x86-270.41.19.run --accept-license --no-questions --no-nouveau-check --run-nvidia-xconfig --ui=none&lt;br /&gt;service gdm start&lt;br /&gt;EOF&lt;br /&gt;chmod +x ./inst_nv.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(What does this script do?  Well, the first line is a command which disconnects the frame buffer from the graphics driver.  I think.  The second command removes the graphics driver.  The third command attempts, but I think fails, to restore some sort of text interface.  The next three commands remove more unneeded modules connected with the graphics driver.  The [chmod] command makes sure that the nvidia file is executable, and the command after that executes it.  All the options added onto the execution of the driver package are designed so that it should just install without asking any stupid questions which you will be unable to read.  The last command restarts the GUI.)&lt;br /&gt;&lt;br /&gt;You now shut down gdm as before from the CTRL+ALT+F1 text interface:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo service gdm stop&lt;/pre&gt;&lt;br /&gt;:and run the script from the text command prompt:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo ./inst_nv.sh&lt;/pre&gt;&lt;br /&gt;Your screen will go blank.  Your cd/dvd drive will hopefully spin up and down.  After 5 minutes or so, hopefully, you will get a GUI.  If it doesn't work, reboot and try option 1.&lt;br /&gt;&lt;br /&gt;And hey fucking presto, there is the snazzy new bar.&lt;br /&gt;&lt;br /&gt;Admittedly, after all that, it may be a touch underwhelming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2651612922235354981?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2651612922235354981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/05/testing-natty-on-nvidia-hardware.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2651612922235354981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2651612922235354981'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/05/testing-natty-on-nvidia-hardware.html' title='Testing Natty on Nvidia Hardware'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8399276736650263685</id><published>2011-05-20T11:59:00.000+01:00</published><updated>2011-05-20T11:59:00.655+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Manually Add DNS Servers</title><content type='html'>My work machine is an Ubuntu machine on a Microsoft Small Business Server network.  It gets all of its network settings by way of DHCP from the SBS Server.  Sometimes the SBS Server has to be restarted.  Most of the software I use can run offline, so that is nor normally a problem.&lt;br /&gt;&lt;br /&gt;What is a problem is that I immediately lose internet access because the SBS Server operates as a [DNS].  This is frustrating.  Helpfully, Ubuntu has an option to manually add some extra DNS's which SHOULD take over the burden from the SBS Server if it goes down.&lt;br /&gt;&lt;br /&gt;To achieve this (in Lucid), go System -&gt; Administration -&gt; Network.&lt;br /&gt;&lt;br /&gt;From the program that pops up, select the Network Device drop down menu.  Choose your network device.  This will be ethX if you are connected by a wired connection.  Then click on the Configure button next to the device name.  From the new window that pops up, choose the DNS tab.  You then need to click on the button between the Help and Close buttons at the bottom of the window, and putin your admin password to allow you to change the settings.&lt;br /&gt;&lt;br /&gt;Now, just click on Add, and type in your new DNS IP address.&lt;br /&gt;&lt;br /&gt;Hopefully this change means that the next time the server goes offline, I can still use the internet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8399276736650263685?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8399276736650263685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/05/manually-add-dns-servers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8399276736650263685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8399276736650263685'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/05/manually-add-dns-servers.html' title='Manually Add DNS Servers'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-3953710932314987888</id><published>2011-05-13T11:59:00.006+01:00</published><updated>2011-05-13T19:02:13.739+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Testing and Fixing SD Cards</title><content type='html'>You can test for badblocks in a [n]on-destructive way by running:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo badblocks -snp # /dev/sdxy&lt;/pre&gt;&lt;br /&gt;where # is the number of passes to run.  This report[s] the progress to you as it runs.&lt;br /&gt;&lt;br /&gt;You can then run:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo fsck.vfat /dev/sdxy -a -w&lt;/pre&gt;&lt;br /&gt;This [a]utomatically fixes problems by [w]riting changes to the disk.  Any dodgy files you had will be renamed.&lt;br /&gt;&lt;br /&gt;Finally, if you have cleared the disk of any remaining stuff, you can run a deep [w]rite and read test by running:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo badblocks -swp # /dev/sdxy&lt;/pre&gt;&lt;br /&gt;If you do not find any physical bad blocks, that suggests that the problem was a software one, and the card remains safe to use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-3953710932314987888?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/3953710932314987888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/05/testing-and-fixing-sd-cards.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3953710932314987888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3953710932314987888'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/05/testing-and-fixing-sd-cards.html' title='Testing and Fixing SD Cards'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8219331879175037617</id><published>2011-05-06T11:59:00.108+01:00</published><updated>2011-05-14T10:33:16.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liveCD'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Making a Natty Live CD</title><content type='html'>This is further update of my &lt;a href="http://justbloodywork.blogspot.com/2010/10/making-maverick-live-cd.html"&gt;Maverick&lt;/a&gt; and &lt;a href="http://justbloodywork.blogspot.com/2010/09/building-custom-livecd-for-ubuntu.html"&gt;Lucid&lt;/a&gt; instructions.&lt;br /&gt;&lt;br /&gt;I am assuming that you have got to a terminal window by following the start of the Lucid instructions either on a Windows or Ubuntu system.&lt;br /&gt;&lt;br /&gt;First of all we are going to need some extra packages for our running system to manipulate the CD image.  To install these, run this command from a terminal window.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo aptitude install squashfs-tools genisoimage&lt;/pre&gt;&lt;br /&gt;The CD image contains one large archive file which stores all of the disk environment for the LiveCD.  The squashfs-tools handles this archive.  Basically, we unpack everything, add our extra packages, and then repack everything.  The genisoimage [gen]erates the final [iso] [image] which we put onto the USB Key in due course.&lt;br /&gt;&lt;br /&gt;First, make a working directory in [~] home:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir ~/live&lt;br /&gt;cd ~/live&lt;/pre&gt;&lt;br /&gt;Next we are going to actually mount the CD image so we can use it as if we had burned it to a CD and inserted it.  We need to create the mount point first of all:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir mnt&lt;br /&gt;sudo mount -o loop /media/[whatever]/ubuntu-11.04-desktop-i386.iso mnt&lt;/pre&gt;&lt;br /&gt;The [whatever] will differ depending on exactly where your system mounts the USB Key you just plugged in.  The &lt;a href="http://en.wikipedia.org/wiki/Loop_device"&gt;loop&lt;/a&gt; [o]ption allows us to mount the image file as a folder.&lt;br /&gt;&lt;br /&gt;Now we need to copy all of the files off the mounted image APART from the large squashed file.  Again we want a separate folder to store these files:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir extract-cd&lt;br /&gt;rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd&lt;/pre&gt;&lt;br /&gt;Next we need to extract the big archive file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo unsquashfs mnt/casper/filesystem.squashfs&lt;/pre&gt;&lt;br /&gt;It uncompresses to a folder name we want to change by the typical linux method of [m]o[v]ing it.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo mv squashfs-root edit&lt;/pre&gt;&lt;br /&gt;We are going to be chrooting into the filesystem we just unpacked, and we want to use some of the files on our existing machine to point the way to the internet, and to give us access to our current hardware:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cp /etc/resolv.conf edit/etc/&lt;br /&gt;sudo cp /etc/hosts edit/etc/&lt;br /&gt;sudo mount --bind /dev/ edit/dev&lt;/pre&gt;&lt;br /&gt;Now we chroot in and mount some virtual filesystems:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo chroot edit&lt;br /&gt;mount -t proc none /proc&lt;br /&gt;mount -t sysfs none /sys&lt;br /&gt;mount -t devpts none /dev/pts&lt;/pre&gt;&lt;br /&gt;We also need to set some system variables and create a symbolic link for some reason or another. &lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;export HOME=/root&lt;br /&gt;export LC_ALL=C&lt;br /&gt;dbus-uuidgen &gt; /var/lib/dbus/machine-id&lt;br /&gt;dpkg-divert --local --rename --add /sbin/initctl&lt;br /&gt;ln -s /bin/true /sbin/initctl&lt;/pre&gt;&lt;br /&gt;I think the dbus command generates a code for this specific machine that some installation stuff may need.  No idea what the [initctl] stuff is all about.&lt;br /&gt;Excellent.  We are now at the point where we can start to install stuff.  First of all, and this was fucking frustrating trying to work this out, we need to enable the universe and multiverse repositories if we want to install packages from them.  We need to do this in command line:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo nano /etc/apt/sources.list&lt;/pre&gt;&lt;br /&gt;Let's add the PPA's that I covered in a previous post so we can install the useful software they include:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo add-apt-repository ppa:stebbins/handbrake-releases&lt;br /&gt;sudo add-apt-repository ppa:jd-team/jdownloader&lt;/pre&gt;&lt;br /&gt;This next command adds an external repository (which is a bigger and more complex type of PPA) to the list of places we can download stuff from.  It's a biggie but it basically is just a series of commands that run in sequence.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list; sudo apt-get -q update; sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring; sudo apt-get -q update&lt;/pre&gt;&lt;br /&gt;Before installing stuff, it might be a good idea to clean out some stuff we are not going to use.  First of all have a look at all the installed packages in order of size:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | less&lt;/pre&gt;&lt;br /&gt;The first on the list looks like a massive package, but what you have to understand is that this is showing you the UNCOMPRESSED sizes.  Yeah, thanks for that.  If you check on http://packages.ubuntu.com/lucid for the ubuntu-docs information, you find it is only taking up a few hundred Kb when squashed.&lt;br /&gt;So what can you remove?  Evolution is a prime candidate.  Not much use on a LiveCD.  You will be using webmail from a LiveCD.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep evolution&lt;/pre&gt;&lt;br /&gt;This will show you all packages which have evolution in the title.  It should look like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;9824 evolution-common&lt;br /&gt;5560 libevolution&lt;br /&gt;2148 evolution-exchange&lt;br /&gt;1580 evolution-data-server&lt;br /&gt;1084 evolution&lt;br /&gt;764 evolution-plugins&lt;br /&gt;380 evolution-data-server-common&lt;br /&gt;124 evolution-indicator&lt;br /&gt;88 evolution-webcal&lt;/pre&gt;&lt;br /&gt;You can remove all, apart from evolution-data-server-common which is needed by other applications, by running this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge evolution-common libevolution evolution-exchange evolution-data-server evolution-webcal evolution evolution-plugins evolution-indicator evolution-webcal&lt;/pre&gt;&lt;br /&gt;The language packs also take up a lot of space, and I do not need anything but English.  Find these by running:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep language-&lt;/pre&gt;&lt;br /&gt;and then remove the ones we do not want:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge language-pack-gnome-xh-base language-pack-xh-base language-pack-gnome-zh-hans-base language-pack-zh-hans-base language-pack-gnome-es-base language-pack-gnome-pt-base language-pack-gnome-de-base language-pack-pt-base language-pack-es-base language-pack-de-base&lt;/pre&gt;&lt;br /&gt;There are other language packs, but they are to small to worry about clearing up unless you are intent on getting this image as small as possible.  The final obvious low hanging fruit are foreign font sets.  Do a search for [t]rue[t]ype[f]ont packages:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep ttf&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;12580 ttf-unfonts-core - Korean&lt;br /&gt;6196 ttf-takao-pgothic - Japanese&lt;br /&gt;5456 ttf-thai-tlwg - Thai&lt;br /&gt;5184 ttf-wqy-microhei - Chinese&lt;br /&gt;4204 ttf-freefont - Latin, keep&lt;br /&gt;2628 ttf-indic-fonts-core - Indian&lt;br /&gt;2592 ttf-dejavu-core - Latin, keep&lt;br /&gt;2336 ttf-ubuntu-font-family - These are new to Natty, and are used widely in ubuntu, so best keep them.&lt;br /&gt;1724 ttf-liberation - Latin, keep&lt;br /&gt;592 ttf-khmeros-core - Cambodian&lt;br /&gt;500 ttf-opensymbol - Symbols, needed for OpenOffice, keep&lt;br /&gt;220 ttf-punjabi-fonts - Punjabi&lt;br /&gt;144 ttf-lao - Lao, where ever Lao is&lt;br /&gt;116 ttf-kacst-one - Arabic&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge ttf-unfonts-core ttf-takao-pgothic ttf-thai-tlwg ttf-wqy-microhei ttf-indic-fonts-core ttf-khmeros-core ttf-punjabi-fonts ttf-lao ttf-kacst-one&lt;/pre&gt;&lt;br /&gt;I am not going to be printing from the LiveCD so I can remove the software and drivers as follows.  Do not worry about the ubuntu-desktop meta file - it is just an easy way of ensuring that all the ubuntu basic stuff is installed.  As soon as printing is removed, the installation no longer qualifies as an ubuntu desktop but it doesn't actually remove the rest of the stuff.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge cups hplip-data libgutenprint2&lt;/pre&gt;&lt;br /&gt;I am also going to remove banshee, the rhythmbox replacement, because it does take up a lot of space, and like evolution it is really the type of application you need to set up on an installed machine rather than running from a LiveCD.  I have no intention of playing sudoku.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge banshee gnome-sudoku&lt;/pre&gt;&lt;br /&gt;Even after all of those deletions, once I recompressed the image I found I had saved a paltry 90Mb or so.  Ho hum.  Once you have carried out all the removals, a good strategy is to upgrade all your remaining packages to the latest versions.  You do NOT want to upgrade the Kernel or Grub because that causes bad things to happen and will stop the Live USB stick booting.  So, create the following files to 'pin' those packages to their current versions:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cat &amp;gt; hold_back_kernel &amp;lt;&amp;lt; "EOF"&lt;br /&gt;Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic&lt;br /&gt;Pin: version 2.6.38.8.22&lt;br /&gt;Pin-Priority: 1001&lt;br /&gt;EOF&lt;br /&gt;sudo mv hold_back_kernel /etc/apt/preferences.d/&lt;br /&gt;sudo cat &amp;gt; hold_back_grub &amp;lt;&amp;lt; "EOF"&lt;br /&gt;Package: grub-common&lt;br /&gt;Pin: version 1.99~rc1-13ubuntu3&lt;br /&gt;Pin-Priority: 1001&lt;br /&gt;EOF&lt;br /&gt;sudo mv hold_back_grub /etc/apt/preferences.d/&lt;br /&gt;sudo apt-get update&lt;/pre&gt;&lt;br /&gt;You can check that the version numbers are correct (they should be for the Live CD you have downloaded) and check the system knows about the new rules by running these commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-cache policy&lt;br /&gt;dpkg -l linux-generic&lt;br /&gt;dpkg -l grub-common&lt;/pre&gt;&lt;br /&gt;The last few lines of all of that should look like this (you can see the version numbers match up):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;Pinned packages:&lt;br /&gt;     linux-headers-generic -&gt; 2.6.38.8.22&lt;br /&gt;     linux-image-generic -&gt; 2.6.38.8.22&lt;br /&gt;     grub-common -&gt; 1.99~rc1-13ubuntu3&lt;br /&gt;     linux-generic -&gt; 2.6.38.8.22&lt;br /&gt;root@Dellbuntu:/# dpkg -l linux-generic&lt;br /&gt;Desired=Unknown/Install/Remove/Purge/Hold&lt;br /&gt;| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend&lt;br /&gt;|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)&lt;br /&gt;||/ Name                                          Version                                       Description&lt;br /&gt;+++-=============================================-=============================================-==========================================================================================================&lt;br /&gt;ii  linux-generic                                 2.6.38.8.22                                   Complete Generic Linux kernel&lt;br /&gt;root@Dellbuntu:/# dpkg -l grub-common&lt;br /&gt;Desired=Unknown/Install/Remove/Purge/Hold&lt;br /&gt;| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend&lt;br /&gt;|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)&lt;br /&gt;||/ Name                                          Version                                       Description&lt;br /&gt;+++-=============================================-=============================================-==========================================================================================================&lt;br /&gt;ii  grub-common                                   1.99~rc1-13ubuntu3                            GRand Unified Bootloader, version 2 (common files)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You should now be able to run the upgrade excluding those troublesome packages.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get upgrade&lt;/pre&gt;&lt;br /&gt;We can now run a massive install command to add the extra packages that we want.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install \&lt;br /&gt;\&lt;br /&gt;libgtk2.0-dev bison texinfo \&lt;br /&gt;\&lt;br /&gt;flashplugin-installer openjdk-6-jre icedtea6-plugin \&lt;br /&gt;\&lt;br /&gt;libreoffice-java-common libreoffice-l10n-en-gb libreoffice-help-en-gb openoffice.org-hyphenation-en-us openoffice.org-thesaurus-en-us \&lt;br /&gt;\&lt;br /&gt;ttf-mscorefonts-installer \&lt;br /&gt;\&lt;br /&gt;smplayer vlc avidemux audacity \&lt;br /&gt;\&lt;br /&gt;totem-plugins-extra gstreamer0.10-pitfdll gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse \&lt;br /&gt;\&lt;br /&gt;non-free-codecs libavcodec-extra-52 libdvdcss2 libdvdread4 libdvdnav4 \&lt;br /&gt;\&lt;br /&gt;lame mjpegtools twolame mpeg2dec liba52-0.7.4-dev ffmpeg ffmpeg2theora w32codecs \&lt;br /&gt;\&lt;br /&gt;keepassx handbrake-gtk jdownloader \&lt;br /&gt;\&lt;br /&gt;xchm comix gqview pdfmod \&lt;br /&gt;\&lt;br /&gt;wine \&lt;br /&gt;\&lt;br /&gt;transmission \&lt;br /&gt;\&lt;br /&gt;dcraw gimp gimp-data-extras gimp-help-en \&lt;br /&gt;\&lt;br /&gt;celestia celestia-common celestia-common-nonfree stellarium googleearth-package lsb-core \&lt;br /&gt;\&lt;br /&gt;git-core subversion libssl-dev \&lt;br /&gt;\&lt;br /&gt;monodevelop&lt;/pre&gt;&lt;br /&gt;To install Google Earth from the package downloaded above, you run:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;make-googleearth-package --force&lt;/pre&gt;&lt;br /&gt;You then need to install the package the previous command creates.  At the time of writing the version numbering creates a package which can be installed with this command (but this is likely to change):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo dpkg -i googleearth_6.0.2.2074+0.6.0-1_i386.deb&lt;/pre&gt;&lt;br /&gt;I also want a bit of software which is not available in the repositories.  Truecrypt is a handy encryption system.  Truecrypt is a pain in the arse since they want you to accept their stupid licence instead of just releasing under the GPL.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;wget http://www.truecrypt.org/download/truecrypt-7.0a-linux-x86.tar.gz&lt;br /&gt;tar -xzvf truecrypt-7.0a-linux-x86.tar.gz&lt;br /&gt;./truecrypt-7.0a-setup-x86&lt;/pre&gt;&lt;br /&gt;Extract the package file - it automatically stores it in /tmp.  We need to extract it to /, and it auto installs to the correct folders.  So:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /&lt;br /&gt;tar -xzvf /tmp/truecrypt_7.0a_i386.tar.gz&lt;/pre&gt;&lt;br /&gt;And that is that for Truecrypt.&lt;br /&gt;&lt;br /&gt;If you were stupid enough to upgrade the kernel package, it is extremely likely that doing a upgrade of all the packages will change the kernel version.  To ensure that the new kernel is actually used, you need to go into the ...&lt;br /&gt;~/live/edit/boot&lt;br /&gt;...folder and copy the latest versions of the vmlinuz compressed kernel and the initrd.img files to the ...&lt;br /&gt;~/live/extract-cd/casper&lt;br /&gt;...folder.  You then need to delete the existing initrd.lz file, and rename the initrd.img file you just copied over to replace it.  Do the same with the vmlinuz files. This has NEVER worked for me so I do not upgrade the kernel package.&lt;br /&gt;&lt;br /&gt;If you want the clock in the LiveCD machine to show the proper time, take a moment and set your time zone and keyboard for UK use:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo setxkbmap gb&lt;br /&gt;sudo cp -v --remove-destination /usr/share/zoneinfo/Europe/London /etc/localtime&lt;/pre&gt;&lt;br /&gt;Of course, the keyboard command does not fucking work.  I now have no fucking idea how to change the keyboard map from the command line.  Brilliant.  I mean there must be a file somewhere, anywhere, that actually stores these settings.  Where?  No fucking clue.  Moving on:&lt;br /&gt;&lt;br /&gt;We now need to clean up some user account stuff incase any of the installed packages made changes:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;awk -F: '$3 &gt; 999' /etc/passwd&lt;br /&gt;usermod -u 500 $hit #where hit is any user ID greater than 999&lt;/pre&gt;&lt;br /&gt;Right, and we are good to do a general clean up:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get clean&lt;br /&gt;rm -rf /tmp/* ~/.bash_history&lt;br /&gt;rm /etc/resolv.conf&lt;br /&gt;rm /var/lib/dbus/machine-id&lt;br /&gt;rm /sbin/initctl&lt;br /&gt;dpkg-divert --rename --remove /sbin/initctl&lt;br /&gt;umount -l /proc&lt;br /&gt;umount /sys&lt;br /&gt;umount /dev/pts&lt;br /&gt;exit&lt;br /&gt;sudo umount edit/dev&lt;/pre&gt;&lt;br /&gt;The [rm] commands obviously [r]e[m]ove stuff, and the remaining commands undo the setup commands we used to get into the [chroot] environment.  Virtually every time I do this I get a fucking annoying error telling me that it can't umount these things because they are in use.  Well, you know what I say to that?  Hello Mr. Reboot.&lt;br /&gt;&lt;br /&gt;Once the system has come back on, fire up a terminal and:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd ~/live&lt;/pre&gt;&lt;br /&gt;Now, update the .manifest file which is a list of installed packages:&lt;br /&gt;&lt;pre class="postCode"&gt;chmod +w extract-cd/casper/filesystem.manifest&lt;br /&gt;sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' &gt; extract-cd/casper/filesystem.manifest&lt;br /&gt;sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop&lt;br /&gt;sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop&lt;br /&gt;sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop&lt;/pre&gt;&lt;br /&gt;Now delete the existing squashed archive and replace it.  Don't worry if it cannot find one, there shouldn't be one the first time you run through these instructions.&lt;br /&gt;&lt;pre class="postCode"&gt;sudo rm extract-cd/casper/filesystem.squashfs&lt;br /&gt;sudo mksquashfs edit extract-cd/casper/filesystem.squashfs&lt;/pre&gt;&lt;br /&gt;That last command will take most time of anything here, as it (re)compressess all the packages we want.  If you are feeling particularly narcisstic you can edit the disk details (change the image name) that pop up on boot:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo nano extract-cd/README.diskdefines&lt;/pre&gt;&lt;br /&gt;Now we need to rebuild the md5sum check file:&lt;br /&gt;&lt;pre class="postCode"&gt;cd extract-cd&lt;br /&gt;sudo rm md5sum.txt&lt;br /&gt;find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt&lt;/pre&gt;&lt;br /&gt;That will probably take two [sudo] password requests - one for the straight [sudo] and one for the [| sudo] piped version.  Do not know why.  Irritating as fuck.&lt;br /&gt;&lt;br /&gt;And finally we need to build a new iso image:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-11.04-desktop-i386-custom.iso .&lt;/pre&gt;&lt;br /&gt;Once you have that image you use the unetbootin software (which comes in both windows and linux flavours) to load the image onto the USB Key.  You need to use version 494 at least to get it to work with Natty.  Job done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8219331879175037617?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8219331879175037617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/05/making-natty-live-cd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8219331879175037617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8219331879175037617'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/05/making-natty-live-cd.html' title='Making a Natty Live CD'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-6967383163531823945</id><published>2011-04-29T11:59:00.005+01:00</published><updated>2011-05-04T11:05:33.643+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Adding a PPA in Maverick</title><content type='html'>Happy day for those ubuntu users who want the video transcoding application Handbrake.  I find this useful because it is the only application that will spit out video that an iPhone or iPad will actually play.  Anyway, my &lt;a href="http://justbloodywork.blogspot.com/2010/10/making-maverick-live-cd.html"&gt;live cd&lt;/a&gt; instructions contained a breathless explanation of how to build handbrake from source.  You no longer need to do that.  You just need a ppa instead.&lt;br /&gt;&lt;br /&gt;OK, what's a PPA?  It is like an official ubuntu source of packages, but it is not maintained by canonical.  It stands for personal package archive.  These are useful for all kinds of things.  Here it is used for software not tested by the people who make ubuntu, and which doesn't form part of the ubuntu repositories of packages.&lt;br /&gt;&lt;br /&gt;In addition, a useful download manager is also now available for ubuntu in a ppa: &lt;a href="http://jdownloader.org/"&gt;jdownloader&lt;/a&gt;.  What we are about to do is add two ppa's to our list of sources of ubuntu applications, then update our list of what applications are contained in all of our sources, and then we will install the two applications in question.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo add-apt-repository ppa:stebbins/handbrake-releases&lt;br /&gt;sudo add-apt-repository ppa:jd-team/jdownloader&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install handbrake-gtk jdownloader&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-6967383163531823945?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/6967383163531823945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/adding-ppa-in-maverick.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6967383163531823945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6967383163531823945'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/adding-ppa-in-maverick.html' title='Adding a PPA in Maverick'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-5684939084306094538</id><published>2011-04-22T11:59:00.004+01:00</published><updated>2011-04-22T11:59:00.484+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video editing'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Batch flv to mp4 conversion</title><content type='html'>If you have been happily downloading and storing &lt;a href="http://justbloodywork.blogspot.com/2011/03/downloading-flash-videos.html"&gt;flash videos&lt;/a&gt; you may end up with a whole pile of flv files.  My instructions above included a command to convert each file into an mp4 file which is much easier to work with.&lt;br /&gt;&lt;br /&gt;What about converting a whole folder full at once?&lt;br /&gt;&lt;br /&gt;Try this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for file in *.flv ; do ffmpeg -i $file -acodec copy -vcodec copy ${file%.flv}.mp4 ; done&lt;/pre&gt;&lt;br /&gt;That three stage command does the following (in english):&lt;br /&gt;&lt;br /&gt;The first bit before the semi colon means, [for] each [*] file that you find in the current folder with the extension [flv], take the full name of the file forward into the next part of the command as a variable [file].  The next bit says that you [do] the command [ffmpeg] using as an [i]nput the variable [$] called [file].  The options for the ffmpeg command are to [copy] the [a]udio [codec] and the [v]ideo codec, so no recompression.  You retain the same data but in a different container.  The output of the command is a file with a name made up of the variable [$] called [file] minus [%] the characters [.flv] PLUS the characters [.mp4].  The last bit after the second semi colon closes the command sequence started by the [do].  If you felt brave you could stick a [r]e[m]ove command in here to get rid of your input files in before the [; done].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-5684939084306094538?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/5684939084306094538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/batch-flv-to-mp4-conversion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5684939084306094538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5684939084306094538'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/batch-flv-to-mp4-conversion.html' title='Batch flv to mp4 conversion'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-272031621434569580</id><published>2011-04-15T11:59:00.012+01:00</published><updated>2011-04-15T12:16:25.895+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='video editing'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Listening to BBC Radio Shows on an MP3 player</title><content type='html'>In the name of bastard fuck, this was far fucking harder than it had any right to be.&lt;br /&gt;&lt;br /&gt;You have Windows Media Centre installed on your PC.  Either XP, or Vista or 7.  Whatever.  Fine.  You record DVB-T1 broadcast TV programs and watch them quite happily.  You record the odd radio program (also broadcast over DVB-T1), and you can play it back on the TV.  But who wants to sit around the TV listening to radio programs, what do you think this is, the 1930's?&lt;br /&gt;&lt;br /&gt;You have recorded an audio file.  You want to listen to the audio on another device.  How fucking difficult do you think this is going to be?  Oh, boy you are in for a fucking treat.&lt;br /&gt;&lt;br /&gt;So, how do we do this?  I should interject here and say that there is a fairly straightforwards, albeit time-consuming, way to deal with this.  You fire up &lt;a href="http://audacity.sourceforge.net/"&gt;audacity&lt;/a&gt;, change the input source to be the sound card audio out, then hit record and play whatever it is you want to record.  The problem with this is that you are recording a compressed track so you are going to lose quality.  In my view the BBC are the experts when it comes to digital audio compression and trasmission, and it is going to spoil whatever they broadcast if I recompress it.  Its like sitting in the back row of the cinema with your digital video camera.  You are not exactly going to walk out with a blue ray quality version of the film are you?&lt;br /&gt;&lt;br /&gt;First thing.  If using Vista or Windows 7, media centre spits out files with the extension .&lt;a href="http://wiki.multimedia.cx/index.php?title=WTV"&gt;wtv&lt;/a&gt;.  These are unreadable by anything but windows, so we need to convert them into a more common format.  Helpfully if you right click on the file you will find an option to convert it to &lt;a href="http://wiki.multimedia.cx/index.php?title=DVR-MS"&gt;dvr-ms&lt;/a&gt; file.&lt;br /&gt;&lt;br /&gt;What I would then ordinarily do is fire the file up in &lt;a href="http://www.videoredo.com/en/index.htm"&gt;Video Redo&lt;/a&gt;.  This is an excellent product for taking in a dvr-ms file, cutting out all the bits you do not want (ads and so forth) and then spitting out the original video and audio streams in an mpg file.  You can then happily load that mpg file into &lt;a href="http://fixounet.free.fr/avidemux/"&gt;avidemux&lt;/a&gt;, or your editor of choice and convert it to whatever format you desire.&lt;br /&gt;&lt;br /&gt;However, Video Redo shits itself when it is given a dvr-ms file without any video.  It just cannot handle it.  The more recent versions of Video Redo may be different, but I am not paying for an upgrade for something this simple.&lt;br /&gt;&lt;br /&gt;So we want to extract the audio in some other fashion.  When something is difficult, then make it harder by doing it on the command line.  If we want robust command line editing tools then we want Linux.  I have tried ffmpeg under ubuntu with a command that looks a bit like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ffmpeg -i filename.dvr-ms -acodec copy -o filename.mp2&lt;/pre&gt;&lt;br /&gt;Doesn't fucking work.  Apparently ffmpeg also cannot handle the earth shattering reality of a dvr-ms file without a fucking video stream.&lt;br /&gt;&lt;br /&gt;How about:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mplayer -dumpaudio -dumpfile audio.mp2 filename.dvr-ms&lt;/pre&gt;&lt;br /&gt;No fucking joy.  Cannot ever find an audio stream.  It turns out that &lt;a href="http://www.videolan.org/vlc/"&gt;vlc&lt;/a&gt; is practically the only fucking thing on the planet that will spit the untouched audio out of a BBC Digital TV Broadcast Radio Recording.  The command is this gem:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cvlc &amp;quot;[filename].dvr-ms&amp;quot; vlc://quit --sout &amp;#039;#transcode{vcodec=none}:duplicate{dst=std{access=file,mux=raw,dst=&amp;quot;[filename].mp2&amp;quot;}}&amp;#039;&lt;/pre&gt;&lt;br /&gt;That's a fucking little beauty isn't it.  Far more than you could ever realistically want to know about those options can be found &lt;a href="http://www.videolan.org/doc/streaming-howto/en/ch03.html"&gt;here&lt;/a&gt; and &lt;a href="http://wiki.videolan.org/Transcode"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-272031621434569580?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/272031621434569580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/listening-to-bbc-radio-shows-on-mp3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/272031621434569580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/272031621434569580'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/listening-to-bbc-radio-shows-on-mp3.html' title='Listening to BBC Radio Shows on an MP3 player'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-1729750188816346795</id><published>2011-04-08T11:59:00.009+01:00</published><updated>2011-06-09T16:19:32.162+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tikz'/><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='lfs build'/><category scheme='http://www.blogger.com/atom/ns#' term='blogspot'/><title type='text'>How to Post Maths in Blogspot: MathJax &amp; QuickLatex</title><content type='html'>Edit your template and add the following before the closing "head" tag:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;&amp;lt;script type=\&amp;quot;text/x-mathjax-config\&amp;quot;&amp;gt;&lt;br /&gt;MathJax.Hub.Config({&lt;br /&gt;  MMLorHTML: {&lt;br /&gt;    prefer: {Firefox: \&amp;quot;HTML\&amp;quot;}&lt;br /&gt;  }&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=\&amp;quot;text/javascript\&amp;quot; src=\&amp;quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full\&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then you just stick the TeX stuff in backslash square brackets for standalone formulae or backslash rounded brackets for in text symbols.&lt;br /&gt;&lt;br /&gt;To get graphics you need to use &lt;a href="http://www.quicklatex.com/"&gt;Quicklatex&lt;/a&gt;.  You need to drop down the choose options box on that page and then insert this text to activate the Tikz graphics package, with the tikz library that lets you calculate co-ordinates using algebra:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;\usepackage{tikz}&lt;br /&gt;\usetikzlibrary{calc}&lt;/pre&gt;&lt;br /&gt;You then get the URL of an image which you can stick in your blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-1729750188816346795?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/1729750188816346795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/how-to-post-maths-in-blogspot-mathjax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/1729750188816346795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/1729750188816346795'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/how-to-post-maths-in-blogspot-mathjax.html' title='How to Post Maths in Blogspot: MathJax &amp; QuickLatex'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-6238101827510578045</id><published>2011-04-01T11:59:00.021+01:00</published><updated>2011-04-01T11:59:00.664+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Can I Exchange this for something that works?</title><content type='html'>OK, so they you are running Ubuntu on your work PC.  You can connect to the office Exchange server using Evolution so you can get all your email.  You are doing all of this using open source software.  You are most likely feeling pretty smug.&lt;br /&gt;&lt;br /&gt;Eventually you will want to leave the office, so you want to fire on the out of office notifications in Evolution.  You read about how to do so.  You find out you need to follow this chain of menus and buttons: &lt;br /&gt;&lt;br /&gt;Edit -&gt; Preferences -&gt; Edit -&gt; Account Editor -&gt; Exchange Settings -&gt; I am out of the office.&lt;br /&gt;&lt;br /&gt;However, at the second "Edit" you get a "Evolution Error" window informing you that the lovely open source program you were oh so smug about "could not read out-of-office state"&lt;br /&gt;&lt;br /&gt;Bastard.  The problem is that if you google for help on this error, the search terms "state" and "evolution" tend to pollute the results with results about the particular subset of Americans who could politely be called reality-challenged.  They could also impolitely be described as the type of fucking cretins who would happily watch their friends and family combusting in agonising pain if their sacred text of choice said that humans were impervious to fire.&lt;br /&gt;&lt;br /&gt;Even searching in the Ubuntu Forums, I cannot find an answer to this.  Or, come to it, why even though I have selected Global Contact List for Auto Completion in the settings, it doesn't fucking auto complete email addresses from the Global Contacts List.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-6238101827510578045?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/6238101827510578045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/can-i-exchange-this-for-something-that.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6238101827510578045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6238101827510578045'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/04/can-i-exchange-this-for-something-that.html' title='Can I Exchange this for something that works?'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-6860443927599325498</id><published>2011-03-25T11:59:00.001Z</published><updated>2011-03-30T12:21:45.887+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><title type='text'>A Backup Scheme Described</title><content type='html'>I wrote a bit about my backup routine in my rant about &lt;a href="http://justbloodywork.blogspot.com/2011/01/acronis-true-image-home-2011.html"&gt;TrueImage&lt;/a&gt;.  I wanted to set out in more detail the scheme I have set up because it also incorporates some mklinking referred to in my previous &lt;a href="http://justbloodywork.blogspot.com/2011/03/mklink.html"&gt;post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My previous example of mklinking dealt directly with steam applications.  There is another type of data that you do not want to have clogging up and SSD.  That is any large file that you only require to access sequentially.  Or in non-computer science lingo, music, videos and photos.  These can be large files (a modern SLR camera will happily spit out 10Mb image files), but you do not need the super fast access time of an SSD to use them properly.&lt;br /&gt;&lt;br /&gt;Think about it, you could happily watch a movie from a DVD player.  That has a PATHETIC data rate and seek time compared to an SSD, but it works fine for movie file.  Movie files are also LARGE.  My Sanyo camcorder mentioned &lt;a href="http://justbloodywork.blogspot.com/2010/06/virtualdub.html"&gt;elsewhere&lt;/a&gt; spits out files up to 20mins/Gb.  They take up a lot of space.  If a 64Gb SSD (with usable space of say 60Gb) was used exclusively for these video files you would fit no more than 20 hours of video on it.  For £60.  That's £3/hour for storage of video.  That makes no sense.  Not when at the time of writing you can pick up a 2Tb classic drive for the same £60.  OK, that 2Tb drive is only actually about 1.8 real Terabytes.  Still, that's 620 hours of video for £60.  That's £0.09/hour.&lt;br /&gt;&lt;br /&gt;So for large data files we want the 9p slow and steady storage, not the £3 super fast storage.  What I put on the classic disk is basically the contents of My Videos, My Music, My Pictures, and My Documents.  To do this I create a directory on the classic disk with appropriately named folders in it.  If your OS is on the SSD, then your classic disk is probably mounted at d:.  You can do this with the mouse and gui, but the dos prompt commands (windows key + r, type cmd, hit enter) look like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd d:\&lt;br /&gt;mkdir Data&lt;br /&gt;cd Data&lt;br /&gt;mkdir Videos&lt;br /&gt;mkdir Music&lt;br /&gt;mkdir Pictures&lt;br /&gt;mkdir Documents&lt;/pre&gt;&lt;br /&gt;For the benefit of the hard of thinking, those commands [c]hange to the [\] root [d]irectory of the [:] disk assigned the letter [d].  They next [m]a[k]e a new [dir]ectory, [c]hange into that new [d]irectory, and [m]ake some other [dir]ectories.&lt;br /&gt;&lt;br /&gt;You then fill up those folders with the data of choice.  Copy this from your non-SSD old system drive, or from your up to date back up.  Then, if using windows 7, you need to delete the Videos, Music, Pictures, Documents from your user folder.  There should be nothing in those folders on a fresh install - but check anyway, and if there is then move it to the folders on the classic disk we just made.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd C:\Users\[your username here]&lt;br /&gt;xcopy Videos D:\Data\Videos /E /H /K&lt;br /&gt;rmdir Videos /S&lt;br /&gt;xcopy Music D:\Data\Music /E /H /K&lt;br /&gt;rmdir Music /S&lt;br /&gt;xcopy Pictures D:\Data\Pictures /E /H /K&lt;br /&gt;rmdir Pictures /S&lt;br /&gt;xcopy Documents D:\Data\Documents /E /H /K&lt;br /&gt;rmdir Documents /S&lt;/pre&gt;&lt;br /&gt;[xcopy] is a special dos command that is used to copy large collections of files at once.  It is basically more flexible and powerful than the standard dos [copy] command.  For our purposes it is exactly the same as Control+c'ing a folder and Control+v'ing that folder somewhere else.  The [/E] flag tells it to copy all subfolders even if they are empty, the [/H] flag makes sure it copies hidden or system files, and the [/K] flag copies the attributes of the files being copied (read only etc) as well.  The other command [r]e[m]oves the specified [dir]ectory and all its [/S]ubdirectories.&lt;br /&gt;&lt;br /&gt;Finally you want to set up the mklinks:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mklink /J "C:\Users\[your username here]\Documents" "D:\Data\Documents"&lt;br /&gt;mklink /J "C:\Users\[your username here]\Videos" "D:\Data\Video"&lt;br /&gt;mklink /J "C:\Users\[your username here]\Pictures" "D:\Data\Pictures"&lt;br /&gt;mklink /J "C:\Users\[your username here]\Music" "D:\Data\Music"&lt;/pre&gt;&lt;br /&gt;You should now be up and running.  If you go to the start button and click on Music, the folder that should open is the one on the classic disk.  The benefit to using mklink is that it appears to the OS and all software running on it (such as iTunes) that all this data is in your user folder on the SSD, so you do not need to specially configure any other software.  It should just work.&lt;br /&gt;&lt;br /&gt;Now you have set that up, backups are a doddle.  Buy a large external 3.5" disk that comes with it's own power supply.  Yes, it is bulky.  Yes it is a pain to have to carry around a data and power cable.  BUT it is much cheaper per Mb than a 2.5" USB powered external disk.  And all it is going to do is sit in the vicinity of your main machine ready to be used as a backup device at a moments notice.  You then just need Allway Sync, or a similar folder syncing application, to sync the d:\data folder onto your external drive.  Make sure you sync that ONE folder every so often (i.e. when you have bought new iTunes music, written a new document, or uploaded a camera card to your desktop) and you have a backup copy of ALL of your data.&lt;br /&gt;&lt;br /&gt;I find the advantages of this system are:&lt;br /&gt;&lt;br /&gt;Simplicity.  The backup is just a copy of all your data files.  You can plug the external disk into another machine running virtually any desktop OS and your have instant access to your files.&lt;br /&gt;Cost.  Folder Synchronisation software is inexpensive (Allway Sync is nagware).&lt;br /&gt;Speed.  All I do is open Allway Sync, choose the "Data" profile I have set up, run an analysis just to check, and then run a sync.  It does not take a long time unless you have added a crap load of stuff.&lt;br /&gt;Flexibility.  Running dual OS's?  Simply link Ubuntu's similarly named data folders to the ones on the windows disk.  Hey presto, same data, two different OS's.&lt;br /&gt;&lt;br /&gt;There are disadvantages to this system:&lt;br /&gt;Versioning.  The backup is a simple mirror of your files.  It does not keep multiple copies of your files, so you cannot undo a change, or deletion, once you have synced.  You could implement this, but you would need more expensive dedicated backup software.  As far as I am concerned, I do not want to lose family media.  I am not overly exercised about restoring last Tuesday's copy of a 1Gb video file rather than last Wednesdays.  Generally the data in these folders is NOT going to change, it is going to be added to or deleted, but not altered.&lt;br /&gt;Onsite.  The backup disk is in the same room as the desktop with the original data, which is not going to help if the equipment is stolen, or the building burns down.  For that protection, you need to pay for a online backup solution - or get an ISP who provides one.&lt;br /&gt;&lt;br /&gt;I prefer the advantages to the disadvantages.  I do see a need for a versioning backup system, which is why I bought TrueImage Home.  But I use that pretty exclusively for the OS disk.  With that you absolutely want to be able to go back to last Tuesday, or "whenever I didn't have this bastard virus".&lt;br /&gt;&lt;br /&gt;You may also want to move some other folders from your user folder on the SSD to the classic disk.  For me a priority was the Downloads folder.  You delete the original folder as normal and then:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir d:\Data\Downloads&lt;br /&gt;mklink /J "C:\Users\[your username here]\Downloads" "D:\Data\Downloads"&lt;/pre&gt;&lt;br /&gt;You probably do not want to backup  the downloads folder - I use mine as a scratch area for downloading loads of rubbish.  If I want to keep stuff I download, I shift it to an appropriate data folder.  So you will now want to edit the profile you have set up in Allway Sync to EXCLUDE the Downloads folder from the backup.  This saves space on your external disk.&lt;br /&gt;&lt;br /&gt;You can also get cute with the exclusion filters INSIDE the folders you are syncing.  So if you have a Temp scratch area in Music or Videos, you can exclude that from the backup as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-6860443927599325498?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/6860443927599325498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/03/order-of-operations.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6860443927599325498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6860443927599325498'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/03/order-of-operations.html' title='A Backup Scheme Described'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-5206101569283883429</id><published>2011-03-18T11:59:00.032Z</published><updated>2011-03-18T11:59:00.307Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 7'/><title type='text'>mklink</title><content type='html'>One of the least intuitive things I found about Linux, especially when moving over from a history of Microsoft OS's, was the idea of 'mounting' a disk to a point in the file system.&lt;br /&gt;&lt;br /&gt;It is something that does take a bit of getting used to.  Once you do, though, a number of other opportunities present themselves.  One interesting thing is the ability to link files and other folders to other parts of the file system.  This is different to the Window's idea of a shortcut.  This is something that actually happens at file system level, with the result that no matter what programs you use, they will always be able to access the material in the same way.&lt;br /&gt;&lt;br /&gt;Well, finally Microsoft have cottoned on to the fact that this might be a good idea.  Hence in Vista, and now in Windows 7, there is the command&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mklink&lt;/pre&gt;&lt;br /&gt;This [m]a[k]es a [link] between a folder in one place and a placeholder in another place on your filesystem.&lt;br /&gt;&lt;br /&gt;Why would you want to bother with this?  I will give you one, frankly excellent, example.  Steam on SSD.&lt;br /&gt;&lt;br /&gt;See, if you jump on the hype bandwagon and get yourself a solid state disk, you will rapidly discover 2 things.  &lt;br /&gt;&lt;br /&gt;1. It wasn't just hype, they really are excellent bits of kit.&lt;br /&gt;2. There just is not enough space on the drive for all the stuff you want to put on it.&lt;br /&gt;&lt;br /&gt;The second issue arises because SSD's are many times more expensive per gigabyte than traditional spinny magnetic disks.  Realistically, in early 2011, 64Gb disk drives are reasonably priced, and 120Gb drives are the economic limit for most users.&lt;br /&gt;&lt;br /&gt;If you are using 64Gb, this means that once you have stuck the bloated behemoth that is Windows on the disk, you'll be left with, realistically, 40Gb.  Games these days can take up north of 15Gb (Dragon Age Origins I am looking at you).  Clearly, space is going to be an issue.  The main problem here is that Steam will only install games to one location.  It will not let you say this game this disk, this game the other disk.&lt;br /&gt;&lt;br /&gt;Game files are stored in the folder [Steam]/steamapps/common/[name of game folder].  Once you have installed the games you can move the [name of game folder] to another, slower, disk and run the command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mklink /j "[Steam Folder]/steamapps/common/[name of game folder]" "[Other disk and folder]/[name of game folder]"&lt;/pre&gt;&lt;br /&gt;This will establish a hard link to the game folder on another disk.  As far as Steam is concerned the game is still where it started, and it will run fine.&lt;br /&gt;&lt;br /&gt;What this needs is some enterprising type to make an application that keeps track of your steam folders and moves them on and off the SSD for you managing the links all the time.  Also, a profile system per game would be excellent, so you could just move off the movie files for instance, leaving the rest of the game on the SSD.  Said enterprising type could then flog the software to Valve who should just incorporate the facility in Steam, thereby making my life just a little bit easier.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.stefanjones.ca/steam/"&gt;This&lt;/a&gt; person, for instance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-5206101569283883429?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/5206101569283883429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/03/mklink.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5206101569283883429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5206101569283883429'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/03/mklink.html' title='mklink'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2234346958451109140</id><published>2011-03-11T12:18:00.000Z</published><updated>2011-03-11T12:18:56.378Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Downloading Flash Videos</title><content type='html'>OK, so is your ISP are bandwidth throttling you, &lt;a href="http://justbloodywork.blogspot.com/search/label/get_iplayer"&gt;getiplayer&lt;/a&gt; sorts out patchy video from the Beeb, but what about youtube et al?  There is actually a simple way to store flash video using ubuntu without the need to purchase downloadsaverproextreme.  You just grab the downloaded file from Ubuntu's temp space.&lt;br /&gt;&lt;br /&gt;First of all you want to be sure that firefox knows it has enough cache space to download whatever it is we are viewing.  Enter this into the address bar of firefox:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;about:config&lt;/pre&gt;&lt;br /&gt;Then search for the following settings and change them as suggested:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;browser.cache.disk.capacity = 500000&lt;br /&gt;media.cache_size = 500000&lt;/pre&gt;&lt;br /&gt;Incidentally, none of that may be necessary, but the next step certainly is.  Change to the temporary folder:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;/pre&gt;&lt;br /&gt;And view the contents of the folder:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ls -alhSr&lt;/pre&gt;&lt;br /&gt;That lists [a]ll files with a[l]l information, with file sizes in [h]uman readable format, [r]everse ordered by [S]ize so that the largest is last.  I prefer it in the easier to remember sequence:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ls -Sharl&lt;/pre&gt;&lt;br /&gt;Now, go to firefox, open the webpage that the video is on, and start the video playing.  Pause it right away so that the stutter of slowly downloading video doesn't drive you mental.  Run the [ls] command above from time to time and you can watch the video file increase in size.  It is probably going to end up as the largest file in the /tmp folder - and therefore at the bottom of the list.&lt;br /&gt;&lt;br /&gt;Copy this file to  ~/Videos, while the firefox tab is still open.  This is important, if you navigate away from the page the temporary file is deleted immediately.  If the video is from youtube it should just be a x264 video and aac audio in a flv wrapper.  You can change wrappers to .mp4 to make the video file compatible with your video player of choice with ffmpeg, while keeping the actual video and audio data unchanged with this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ffmpeg -i [your filename here].flv -vcodec copy -acodec copy [output name].mp4&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2234346958451109140?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2234346958451109140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/03/downloading-flash-videos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2234346958451109140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2234346958451109140'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/03/downloading-flash-videos.html' title='Downloading Flash Videos'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8076603978977446816</id><published>2011-03-04T11:59:00.005Z</published><updated>2011-03-04T11:59:00.866Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><title type='text'>Booting VirtualBox from USB</title><content type='html'>If you have a Live OS installed onto a USB Key, you may want to test it by booting it from VirtualBox.  It turns out that this is a real pain in the arse.  There is apparently no way to do this natively, but there is a work around.  What you have to do is use a command line (yay!) utility to make a fake hard disk image which points to the USB Key.  So VirtualBox THINKS it is booting from a hard disk image but is ACTUALLY booting from the USB Key.&lt;br /&gt;&lt;br /&gt;Anyway.  The appropriate command in Ubuntu looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;sudo VBoxManage internalcommands createrawvmdk -filename ~/test_usb.vmdk -rawdisk /dev/sdc&lt;/pre&gt;&lt;br /&gt;That works if you want the new fake disk image to be called [test_usb] and to be stored in [~/] home.  Also it links to a USB disk mounted at [/dev/sdc].  The [.vmdk] bit is just the file type for VirtualBox disks.&lt;br /&gt;&lt;br /&gt;If you want to do this on Windows, you run a very similar command which looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;VBoxManage internalcommands createrawvmdk -filename "%USERPROFILE%\test_usb.vmdk" -rawdisk \\.\PhysicalDrive1&lt;/pre&gt;&lt;br /&gt;Apparently [%USERPROFILE%] is the Windows equivalent of [~].  The tricky bit is going to be [PhysicalDrive1].  You are going to have to work out what the number that goes on the end of that is, just as you would have to find out where a USB Key had been mounted in Linux.  To do this in Windows run the command line [diskpart] program and then the command [list disk] and it should pop out with a list of the disks attached to the machine with their numbers.  It looks like this on my virtual XP:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postOutput&gt;Microsoft DiskPart version 5.1.3565&lt;br /&gt;&lt;br /&gt;Copyright (C) 1999-2003 Microsoft Corporation.&lt;br /&gt;On computer: SB-VIRTUAL&lt;br /&gt;&lt;br /&gt;DISKPART&gt; list disk&lt;br /&gt;&lt;br /&gt;  Disk ###  Status      Size     Free     Dyn  Gpt&lt;br /&gt;  --------  ----------  -------  -------  ---  ---&lt;br /&gt;  Disk 0    Online        10 GB      0 B&lt;br /&gt;&lt;br /&gt;DISKPART&gt;&lt;/pre&gt;&lt;br /&gt;So I would want to use PhysicalDrive0 in that case.  That would be monumentally stupid though, because I would mount the disk I was using to run my OS from in another machine AT THE SAME TIME.  I do not want to imagine what the crash would look like.&lt;br /&gt;&lt;br /&gt;You will also need to navigate to the install directory for VirtualBox to run the command (the VBoxManage command, not the diskpart command).  Linux sticks the program file in the path, but Windows doesn't.&lt;br /&gt;&lt;br /&gt;If it didn't go without saying all you do next is just add the .vmdk file as the principal hard disk to your virtual machine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8076603978977446816?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8076603978977446816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/03/booting-virtualbox-from-usb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8076603978977446816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8076603978977446816'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/03/booting-virtualbox-from-usb.html' title='Booting VirtualBox from USB'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-6250833000620452976</id><published>2011-02-25T11:59:00.010Z</published><updated>2011-02-25T11:59:00.236Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Cleaning Up a Virtualbox XP Install</title><content type='html'>(Or frankly just cleaning up an XP install.  But then XP natively will have a big chunky disc to spread all of its insanity into, whereas a Virtual XP install will probably be quite restricted.)&lt;br /&gt;&lt;br /&gt;I have started using VirtualBox to run XP on my Ubuntu workstation just in case I have any compatibility problems with native Ubuntu programs.  Like, for instance, the Exchange Server connection in Evolution.  This part seems to have been programmed with all the precision and attention to detail of a Jackson Pollock painting.  Want to move a large email to a public folder?  "The connection to the Exchange Server has been lost".  OK maybe that was a tad ambitious.  How about just opening a sodding email?  "No chance mate, you're getting the raw HTML of the Outlook Web Access login screen instead".&lt;br /&gt;&lt;br /&gt;So an XP guest OS with Outlook installed seems like a good idea to cover the rare occasions when Evolution acts like a total dick.  Like Tuesdays.  Or Thursdays.&lt;br /&gt;&lt;br /&gt;I am no expert when it comes to the arcana of Microsoft licensing, but my case has an official sticker on it with a product key, so I think I am safe running XP on it using that key, albeit as a Virtual Machine.  Same goes for the Office suite that came with the machine as well.  It isn't being used anywhere else since I wiped the disk and stuck Ubuntu on a couple of years ago.&lt;br /&gt;&lt;br /&gt;Or Wednesdays, come to think of it.&lt;br /&gt;&lt;br /&gt;Well, happily the installation and activation of both XP and Office went swimmingly.  My installation CD was only SP1.  I installed SP3 over the top of it, but now I have a large collection of crap in the Windows folder to be used in the unlikely event that I ever want to NOT have SP3 installed.  Space in general is a bit of an issue.  I have a 40Gb SSD drive in the machine, which is more than fine for Ubuntu, but is slightly pushing it for Ubuntu + XP, even as a VM.  I gave the virtual machine a 10Gb HDD, which I think is about the bare minimum for an XP install.  After installation of Office and a bit of Proprietary Management Software, it is down to less than 3Gb free.  Which is not ideal.&lt;br /&gt;&lt;br /&gt;So lets fire up &lt;a href="http://www.jam-software.com/treesize_free/download.shtml"&gt;Tree Size Free&lt;/a&gt; and have a look at where all the space is going.&lt;br /&gt;&lt;br /&gt;Biggest Culprit is the Windows folder with 3.5Gb&lt;br /&gt;Next up is the root folder of C: with 1.5Gb&lt;br /&gt;Next is the User folder with about 1Gb in it.&lt;br /&gt;Lastly there is about half a Gb in Program Files.&lt;br /&gt;&lt;br /&gt;Yes that adds up to about 6.5Gb.  Where has the remaining half gigabyte gone?  Two words.  System Restore.  Great idea in general, no use on a space limited task dedicated machine if you do regular back ups.  To remove this, Start -&amp;gt; Right Click on -&amp;gt; My Computer -&amp;gt; Left Click on -&amp;gt; Properties -&amp;gt; System Restore Tab -&amp;gt; Turn Off System Restore Check Box.  It is not that hard is it?&lt;br /&gt;&lt;br /&gt;OK, first proper clean up - I had left the installation files for the proprietary software lying on the desktop.  Delete = 300Mb back.  The rest of the User folder was an archive of emails amounting to a couple of hundred Mb which I uploaded to the server, and the local copy of my exchange emails.  Can't do anything about them, or indeed the Program Files.  Need those to actual run the applications.  Still, we've cleared half a Gb.  Lets look at the root of C: next.&lt;br /&gt;&lt;br /&gt;It has one big file in it: pagefile.sys.  It is a whole 1.5Gb itself.  This is the famous windows pagefile which the system uses if windows runs out of RAM.  Lets run a basic test by opening all the applications installed.  Word, Excel, Outlook and the Proprietary software.  Done that, and the pagefile usage barely his 250Mb.  So, let's trim back the 1.5Gb pagefile to a more sensible 512Mb to give us some headroom.&lt;br /&gt;&lt;br /&gt;To do this we go to Start -&amp;gt; Right Click on -&amp;gt; My Computer -&amp;gt; Left Click on -&amp;gt; Properties -&amp;gt; Advanced Tab -&amp;gt; Performance Settings Button -&amp;gt; Advanced (Again) -&amp;gt; Virtual Memory Change Button.  I chose a custom size, starting at 512Mb and limited to 1024Mb.  Much more sensible for a machine with 1Gb of ram to start with.&lt;br /&gt;&lt;br /&gt;Lastly we have the Windows folder.  Most of this we DO NOT WANT TO FUCK WITH.  However, there are a number of temporary files that we can get rid of.  The reason is that XP keeps the files that were replaced by each update or Service Pack install just in case you want to undo the update.  As long as it works, I don't.  And, as with the System Restore rational, I will be keeping a backup of the install so I don't need the install to back itself up.  This is dead easy with virtual disks - you just make a copy of the disk image somewhere.  For instance with this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install p7zip-full&lt;br /&gt;7za a XP_10Gb.vdi.lzma XP_10Gb.vdi&lt;/pre&gt;&lt;br /&gt;So, what can we get rid of in Windows?  There are four main folders that I looked at:&lt;br /&gt;&lt;br /&gt;C:\Windows\$NtUninstall[blahblah] &amp;lt;- lots of these&lt;br /&gt;C:\Windows\Driver Cache\I386&lt;br /&gt;C:\Windows\ServicePackFiles\I386&lt;br /&gt;C:\Windows\SoftwareDistribution\Download&lt;br /&gt;&lt;br /&gt;The first type are just lots of hidden (Explorer Window -&amp;gt; Tools Menu -&amp;gt; Folder Options -&amp;gt; View Tab -&amp;gt; Show Hidden Files and Folders Radio Button &amp;amp; Uncheck Hide Protected Operating System Files) folders storing uninstall data for most windows updates.  It is Completely messy of XP to just dump them in the Windows folder.&lt;br /&gt;&lt;br /&gt;The next three folders all store downloaded files that have been installed.  You MAY need these again if you are installing any new software.  What I did was copy all of the foregoing directories into a backup folder, and then stuck that on my NAS [Network Attached Storage].  Bear in mind that you need to install any outstanding updates before moving these files otherwise the update will break and need to be downloaded again.&lt;br /&gt;&lt;br /&gt;Also in Windows is a folder called Installer.  Do not mess with this.  But if you do want to mess with this, google for msicuu2.exe and use that rather than doing it manually.&lt;br /&gt;&lt;br /&gt;Anyway, with that clear out, the Windows folder was reduced from 3.5Gb to 1.7Gb, which is ideal.  I now have just under 7Gb free, representing a space recovery of 4Gb on a 10Gb drive.  Good Stuff.&lt;br /&gt;&lt;br /&gt;There is also a temp folder has appeared in the root of C: called MSOCache.  This is apparently a copy of the Office install files - presumably in case I want to install any optional items, or parts I chose not to install to begin with.  It is only 100Mb or so, and it also appears in the Disk Cleanup program (Start -&amp;gt; My Computer -&amp;gt; Right Click -&amp;gt; C: -&amp;gt; Properties -&amp;gt; Disk Cleanup Button) so I can clean this up easily at a later date if I want.&lt;br /&gt;&lt;br /&gt;Why oh fucking why are the stupid Uninstall, Driver Cache, Service Pack, and Downloaded files not also in the Disk Cleanup program?  As Advanced options perhaps?  As it stands I will have to go through this lengthy process every so often to clean out these unnecessary files.  Pain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-6250833000620452976?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/6250833000620452976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/02/cleaning-up-virtualbox-xp-install.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6250833000620452976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6250833000620452976'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/02/cleaning-up-virtualbox-xp-install.html' title='Cleaning Up a Virtualbox XP Install'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-7443115961336119048</id><published>2011-02-18T11:59:00.023Z</published><updated>2011-02-18T11:59:00.171Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LAP - Accessing NTFS Partitions</title><content type='html'>Eventually you may want to use your Linux USB system to access a Windows HDD.  It won't be a problem if the windows system uses a FAT32 disk, but those things are rare outside USB Keys now.  Most windows HDDs will be formatted with NTFS, and that required some tweaking to get my system to talk to it.  First of all I needed to recompile the kernel.  Yes, really.  If you followed my instructions on how to compress your kernel source directory using LZMA then you can just run the following command to uncompress it to the ramdisk.  Makes things a bit quicker, but you need a sensible (2G) amount of ram to make this work.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /dev/shm&lt;br /&gt;cat /sources/linux.tar.lzma | lzma -d | tar x&lt;br /&gt;cd linux-2.6.32.8&lt;br /&gt;make mrproper&lt;br /&gt;cp /boot/config-2.6.32.8 ./.config&lt;br /&gt;make LANG=en_GB.utf8 LC_ALL= menuconfig&lt;/pre&gt;&lt;br /&gt;You then go into the Filesystems section and activate NTFS support (including write support) and also turn on Fuse (as a module).  You can now exit the menu system.  You compile the kernel, make a backup of your old kernel and settings and copy the new kernel into place by running these commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;make $CORES_TO_USE&lt;br /&gt;make modules_install&lt;br /&gt;cp -v /boot/vmlinux-2.6.32.8-lfs-6.6 /boot/vmlinux-2.6.32.8-lfs-6.6.backup&lt;br /&gt;cp -v /boot/System.map-2.6.32.8 /boot/System.map-2.6.32.8.backup&lt;br /&gt;cp -v /boot/config-2.6.32.8 /boot/config-2.6.32.8.backup&lt;br /&gt;cp -v arch/x86/boot/bzImage /boot/vmlinux-2.6.32.8-lfs-6.6&lt;br /&gt;cp -v System.map /boot/System.map-2.6.32.8&lt;br /&gt;cp -v .config /boot/config-2.6.32.8&lt;/pre&gt;&lt;br /&gt;You would be best to reboot now, to make sure the new kernel is working.  After you get back up and running, you then download the source code for the necessary software in the usual way:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/extras&lt;br /&gt;wget http://prdownloads.sourceforge.net/fuse/fuse-2.7.4.tar.gz&lt;br /&gt;wget http://www.ntfs-3g.org/ntfs-3g-2009.4.4.tgz&lt;/pre&gt;&lt;br /&gt;Now, move to the ramdisk and uncompress and compile FUSE.  I am not entirely clear what FUSE is, but it seems to be a bit of software that lets you load weird and wonderful filesystems.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/extras/fuse-2.7.4.tar.gz&lt;br /&gt;cd fuse-2.7.4&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install &amp;&amp;&lt;br /&gt;rm -rf /etc/init.d&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf fuse-2.7.4&lt;/pre&gt;&lt;br /&gt;The installation is pretty basic.  Not sure why it wants to delete the whole of [/etc/init.d] though.  Still my LFS install doesn't use that, so hey ho.  Next up is the ntfs driver itself:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;tar -xzvf /sources/extras/ntfs-3g-2009.4.4.tgz&lt;br /&gt;cd ntfs-3g-2009.4.4&lt;br /&gt;./configure --prefix=/usr --libdir=/usr/lib &amp;&amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf ntfs-3g-2009.4.4&lt;/pre&gt;&lt;br /&gt;Again, all pretty straightforwards.  We just need to make sure it knows where to put its libraries.&lt;br /&gt;&lt;br /&gt;You then mount NTFS partitions with:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mount -t ntfs-3g [device] [mountpoint]&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-7443115961336119048?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/7443115961336119048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/02/lap-accessing-ntfs-partitions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7443115961336119048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7443115961336119048'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/02/lap-accessing-ntfs-partitions.html' title='LAP - Accessing NTFS Partitions'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4434910573843658832</id><published>2011-02-11T11:59:00.004Z</published><updated>2011-02-11T11:59:00.070Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='grub'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>Fixing a fucked Grub</title><content type='html'>If you followed along with my instructions you will have a handy little grub.conf file in your /etc folder.  This means that if your grub gets corrupted for whatever reason, it should be a simple matter to get it up and running again.  Well, simple for Linux anyway.&lt;br /&gt;&lt;br /&gt;Boot from another version of Linux - either from another partition in dual boot, or Live media.  Run the command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo fdisk -l&lt;/pre&gt;&lt;br /&gt;Check the partition ID for the one you want.  In my case it was sda7.  Now what we want to do is mount the whole of our LFS partition into the filesystem we are currently using.  We are then going to chroot (remember that) into that system and effectively reinstall grub, thus:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo mkdir /media/problem&lt;br /&gt;sudo mount /dev/sda7 /media/problem&lt;br /&gt;sudo mount -v --bind /dev /media/problem/dev&lt;br /&gt;sudo mount -vt devpts devpts /media/problem/dev/pts&lt;br /&gt;sudo mount -vt tmpfs shm /media/problem/dev/shm&lt;br /&gt;sudo mount -vt proc proc /media/problem/proc&lt;br /&gt;sudo mount -vt sysfs sysfs /media/problem/sys&lt;br /&gt;sudo mount -v --bind /tmp /media/problem/tmp&lt;br /&gt;sudo chroot "/media/problem" /usr/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login&lt;/pre&gt;&lt;br /&gt;MAKE SURE the contents of /etc/grub.conf match your the partition that you want to fix.  If you want to install Grub to sda7 for instance, you want to see [hd0,6] in the .conf file.  If you have another bootloader in the MBR of the drive for dual booting, you want BOTH entries for in the .conf file to show [hd0,6] not one at [hd0].  If you installed to a USB Key and are reinstalling Grub on a different machine, the chances that all the partitions are the same number are very very poor indeed.  If that is the case you will need to [nano] into the [conf]iguration file to set it right.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;grub --batch &lt; /etc/grub.conf&lt;/pre&gt;&lt;br /&gt;Job is, as they say, a good'un.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4434910573843658832?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4434910573843658832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/02/fixing-fucked-grub.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4434910573843658832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4434910573843658832'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/02/fixing-fucked-grub.html' title='Fixing a fucked Grub'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-7617226960105442608</id><published>2011-02-04T11:59:00.045Z</published><updated>2011-02-04T11:59:00.217Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LAP - WPA Wireless Security</title><content type='html'>OK, this one was one of the tasks I set myself at the end of my project last year.  I just could not get to grips with the wpa-supplicant documentation.  It seemed from reading it that I would have to rebuild my network driver or get a new one or, or, some other bloody stupid thing.  Anyway, pleasantly it turned out to be considerably easier than I had lead myself to believe.&lt;br /&gt;&lt;br /&gt;So, grab the source code, and move to the ramdisk in the usual way:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/extras&lt;br /&gt;wget http://hostap.epitest.fi/releases/wpa_supplicant-0.6.10.tar.gz&lt;br /&gt;cd /dev/shm&lt;/pre&gt;&lt;br /&gt;Now, we unpack the source code, and build it with these commands.  The [defconfig] is a default config file which basically contains all the usual settings that you would use a [./configure] script to set.  It is fucking painful to wade through, and was really what put me off this whole endeavour to date.  Helpfully, though, with my Compaq Mini, it worked fine with the default settings.  i haven't tested it on any other hardware yet, and it may well b0rk if I do.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;tar -xzvf /sources/extras/wpa_supplicant-0.6.10.tar.gz&lt;br /&gt;cd wpa_supplicant-0.6.10&lt;br /&gt;cd wpa_supplicant &amp;amp;&amp;amp;&lt;br /&gt;cp defconfig .config&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;cp -v wpa_cli wpa_supplicant wpa_passphrase /sbin&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf wpa_supplicant-0.6.10&lt;/pre&gt;&lt;br /&gt;You will notice we did not [make install].  There as no need, we are just installing the three programs that we [c]o[p]ied to [/sbin].&lt;br /&gt;&lt;br /&gt;The software also needs a configuration file to work.  To connect to a WPA2 enable network with a personal key, you would make the following configuration file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt; /etc/wpa_supplicant.conf &amp;lt;&amp;lt; "EOF"&lt;br /&gt;ctrl_interface=/var/run/wpa_supplicant&lt;br /&gt;ctrl_interface_group=0&lt;br /&gt;update_config=1&lt;br /&gt;&lt;br /&gt;network={&lt;br /&gt;        ssid="NAME OF NETWORK"&lt;br /&gt;        proto=RSN&lt;br /&gt;        key_mgmt=WPA-PSK&lt;br /&gt;        pairwise=CCMP TKIP&lt;br /&gt;        group=CCMP TKIP&lt;br /&gt;        psk="VERY SECRET PASSPHRASE"&lt;br /&gt;}&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;The NAME OF NETWORK and VERY SECRET PASSPHRASE should be obvious.  If you just want to connect to a WEP enabled network, wpa_supplicant can handle that as well.  Just make this configuration file instead:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt; /etc/wpa_supplicant.conf &amp;lt;&amp;lt; "EOF"&lt;br /&gt;ctrl_interface=/var/run/wpa_supplicant&lt;br /&gt;ctrl_interface_group=0&lt;br /&gt;update_config=1&lt;br /&gt;network={&lt;br /&gt;        ssid="NAME OF NETWORK"&lt;br /&gt;        key_mgmt=NONE&lt;br /&gt;        #wep_key0="passphrase"&lt;br /&gt;        wep_key0=HEXCODE&lt;br /&gt;        wep_tx_keyidx=0&lt;br /&gt;}&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;Obviously you set the [wep_key0] to whatever you use, either hexcode or passphrase.  The [#] operates in the usual way, so that line is blanked out in the example above.&lt;br /&gt;&lt;br /&gt;You have the option of putting both the WPA2 and WEP in the same .conf file.  What you do is just copy the [network={...}] bit and paste it at the bottom of your .conf file.  If you move your laptop/netbook around different locations, you will end of with a list of different network settings.  What you then have to do is, at the end of each [network={...}] bit, put a line just before the [}] saying [priority=] and then a number.  The software will try the highest numbered networks first, so make sure you give your usual networks the highest priorities. &lt;br /&gt;&lt;br /&gt;Incidentally if you want to use WPA rather than WPA2 and you have a Compaq Mini netbook, then as far as my rigorous testing has been able to determine, you are going to have to learn to live with disappointment.  I have tried three separate routers, and it just doesn't fucking work.&lt;br /&gt;&lt;br /&gt;Lastly we need to create a script to run on boot to run the software:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt; ~/wifi_wpa_wl.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;rmmod b43 &lt;br /&gt;rmmod ssb &lt;br /&gt;rmmod wl&lt;br /&gt;rmmod lib80211&lt;br /&gt;modprobe lib80211&lt;br /&gt;modprobe wl&lt;br /&gt;wpa_supplicant -D wext -i eth1 -c/etc/wpa_supplicant.conf -B&lt;br /&gt;dhcpcd eth1&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;You will spot the similarity to the iwconfig wifi script I used in the past.  The [-D wext] setting tells the software it can use the standard linux [w]ireless [ext]tensions, and not some fancy driver.  These must be installed with the kernel, because I do not remember compiling them.  The [i]interface and [c]onfiguration file commands are self explanatory.  The [B] option tells it to run as a daemon.&lt;br /&gt;&lt;br /&gt;Useful tips:&lt;br /&gt;Run the wpa_supplicant command from the script with -d instead of -B to test the settings and report back error messages.  The command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wpa_passphrase ESSID PASSPHRASE&lt;/pre&gt;&lt;br /&gt;(where ESSID is the name of your wireless network, and PASSPHRASE is, well, work it out) will output an encrypted version of your passphrase for you to pop into the wpa_supplicant.conf file instead of the clear text.  Remember to:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;chmod 600 /etc/wpa_supplicant.conf&lt;/pre&gt;&lt;br /&gt;to protect the file from all but root.  You can also run:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wpa_cli status&lt;br /&gt;wpa_cli scan&lt;br /&gt;wpa_cli scan_results&lt;/pre&gt;&lt;br /&gt;to obtain some self evident information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-7617226960105442608?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/7617226960105442608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/02/lap-wpa-wireless-security.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7617226960105442608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7617226960105442608'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/02/lap-wpa-wireless-security.html' title='LAP - WPA Wireless Security'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4825202825015986852</id><published>2011-01-28T11:59:00.007Z</published><updated>2011-02-10T12:22:00.267Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='get_iplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>get_iplayer 2011</title><content type='html'>[This Update has now been Updated]&lt;br /&gt;&lt;br /&gt;Time, I think, for an update on the get_iplayer situation.  For the last few months I have found that my previous instructions work just fine for downloading SD content.  They were borked though, for HD content.  Which has been a crying shame, because that's the whole sodding point of get_iplayer as far as I am concerned.  Want to watch BBC HD content but have an ISP comprised of a larger collection of cocks than the mid-west's bi-annual prettiest rooster award?  Tough, your bandwidth will never be enough to watch streaming HD.  Unless, of course, you set your alarm for 3 a.m.&lt;br /&gt;&lt;br /&gt;So, time for an update, especially when I noticed that my previous and well thought out instructions were being &lt;a href="http://lists.infradead.org/pipermail/get_iplayer/2011-January/000730.html"&gt;described&lt;/a&gt; as out of date.  The shame.&lt;br /&gt;&lt;br /&gt;I find it is best to start with a vanilla version of Ubuntu when working out how to do stuff like this, otherwise you never know which package you installed six months ago and forgot about is actually essential to the whole enterprise.  You then write down a careful list of instructions for someone else to follow who has NOT installed the critical package, and it doesn't sodding work, and you end up looking like a half-wit.&lt;br /&gt;&lt;br /&gt;So, best to use the latest Ubuntu LiveCD in a virtual machine for testing purposes.  [You can then make sure that everything actually works.  If it doesn't the problem is somewhere at your end.  If it does work you can go on to try to install the software on your distribution of choice, and enjoy some dependency hell, but knowing all the time that the theory is sound.  None of this is necessary, if you want to you can just skip over all the virtualisation stuff and get straight to the software, go ahead.]&lt;br /&gt;&lt;br /&gt;A perfectly sensible virtual machine is VirtualBox.  You will find the installer package &lt;a href="http://www.virtualbox.org/wiki/Linux_Downloads"&gt;here&lt;/a&gt;.  Grab the one for your architecture (intel/amd basically).  You can even install the Windows version and then run Ubuntu inside the VirtualBox, and follow along with these instructions if you so desire.&lt;br /&gt;&lt;br /&gt;If you are running it from Ubuntu, you also need to install the following package to get a screen resolution more than 800x600.  This is optional if tiny resolutions do not bother you, or if you remember the &lt;a href="http://en.wikipedia.org/wiki/Grand_Prix_2"&gt;time&lt;/a&gt; when 640x480 was standard and 800x600 was High-End.&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;sudo apt-get install virtualbox-ose-guest-x11&lt;/pre&gt;&lt;br /&gt;Now reboot your host machine (the physical machine you are working on).&lt;br /&gt;&lt;br /&gt;When it comes back on, you may need to run the following command to get VirtualBox to work - I need to using Lucid:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;sudo modprobe -r kvm_intel&lt;/pre&gt;&lt;br /&gt;Welcome back Windows people.  Next step is to grab the Ubuntu CD from &lt;a href="http://www.ubuntu.com/desktop/get-ubuntu/download"&gt;here&lt;/a&gt;.  32bit is fine.  [I have also tested this with the latest (10th February 2011) daily build of Natty, and it still works fine - in fact the VirtualBox extensions aren't needed to get a decent resolution.]  Once that has downloaded, fire up VirtualBox and create a new machine.  I gave mine 1024Mb RAM.  For our current purposes we will not actually be installing the OS, just testing get_iplayer and friends, so do not bother with a Hard Disk.  In my version, that is all that is needed to create the machine, which will of course NOT WORK, because there is no boot media.&lt;br /&gt;&lt;br /&gt;So, next click on the machine, and hit the settings button.  I then went to the Storage option on the left hand side of the window which pops up.  I clicked on the shiny CD with 'empty' next to it, and then in the drop down menu under Attributes on the right hand side I changed it to Primary Master.  I then clicked the small CD button next to the drop down menu and choose to use a virtual CD/DVD file.  I then just navigated to where ever I downloaded the Ubuntu LiveCD.&lt;br /&gt;&lt;br /&gt;Next, to optionally get a better screen resolution, I went back to the middle panel, and clicked on the IDE Controller line and clicked the CD image with the green plus on it to add a new CD drive.  I opted to choose a disk, and navigated to &lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;/usr/share/virtualbox/VBoxGuestAdditions.iso&lt;/pre&gt;&lt;br /&gt;I am not sure where that file will be located on a Windows install, but you can presumably search for it.  [I tested this on Windows 7 and it worked fine.  The .iso I refer to in stored in the Program Files folder where VirtualBox is installed.]  It is not essential for what comes next though - it just make using VirtualBox a nicer experience.&lt;br /&gt;&lt;br /&gt;I then fiddled about with some other settings.  I activated USB 2.0, and I wanted to us 2D acceleration but that only works on Windows machines.  Having done all that I just clicked OK at the bottom right of the window.  I then just made sure my Machine was still selected at the left hand side of the window and hit the start button.  I chose to try Ubuntu rather than install.&lt;br /&gt;&lt;br /&gt;OK.  We should now be at the Ubuntu desktop.  It is a bit cramped at 800x600.  If you are fine with that, just scroll down.  If not, mount the Additions CD (just click on it in the places menu) pop open a terminal window and run:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;sudo /media/VBOXADDITIONS_4.0.2_69518/VBoxLinuxAdditions.run&lt;/pre&gt;&lt;br /&gt;It took a few seconds to install and then invited me to restart the machine.  That would be DAFT on a live cd, so instead just shut down X:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;sudo /etc/init.d/gdm stop&lt;/pre&gt;&lt;br /&gt;And when the dust has settled, you need to switch to a text terminal screen.  You would ordinarily do this with Control + Alt + F1, but if you are using an Ubuntu host, that will just change you to the terminal screen on your host.  Instead use the RIGHT Control Key, NO Alt, and hit F1.  Now restart X:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;startx&lt;/pre&gt;&lt;br /&gt;Bingo, better screen resolution.&lt;br /&gt;&lt;br /&gt;Now, onto get_iplayer.  Welcome to people who could not be bother with VirtualBox.&lt;br /&gt;&lt;br /&gt;First open a terminal, make sure you have the latest package information and install some software we will be needing:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install git-core build-essential subversion libssl-dev ffmpeg&lt;/pre&gt;&lt;br /&gt;If you are playing along at home, you should now be able to paste commands straight into the Virtual machine.  [So what is this extra software?  'git-core' and 'subversion' do essentially the same thing.  These are programs that let you download software, including source code, from internet sites.  The software maintainers are able to keep track of different versions of their software and you can interact with it.  All we will be doing is downloading the latest version.  'build-essential' is a collection of tools that let us compile software from source code into executable files and libraries.  'libssl-dev' contains software that needs to be incorporated in the programs we are downloading when they compile.  SSL is a secure communication system for the internet, and it is already installed on your machine.  However, we need the 'dev'elopment files for it, so that it can get built into the new software.  All you have at the moment is the end product.  Finally 'ffmpeg' is a powerful command line video converter which is going to be used to convert the downloaded video from flash format to the easier to use .mp4 format.]&lt;br /&gt;&lt;br /&gt;Once that software has downloaded, make sure your terminal prompt shows you are in a sensible place.  Your home directory is just fine:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postOutput&gt;ubuntu@ubuntu:~$&lt;/pre&gt;&lt;br /&gt;If not, change to your home directory by running:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;cd ~&lt;/pre&gt;&lt;br /&gt;Now grab the latest version of get_iplayer by running this command (it will make a directory called get_iplayer in directory you run the command from, which is why we made sure you were in home):&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;git clone git://git.infradead.org/get_iplayer.git&lt;/pre&gt;&lt;br /&gt;Move into the directory that was just made and download the latest rtmpdump (which will be downloaded into its own folder much like get_iplayer):&lt;br /&gt;&lt;pre class=postCode&gt;cd get_iplayer&lt;br /&gt;svn co svn://svn.mplayerhq.hu/rtmpdump/trunk rtmpdump&lt;/pre&gt;&lt;br /&gt;Then move in to the rtmpdump folder and &lt;a href="http://justbloodywork.blogspot.com/search/label/source%20code"&gt;build&lt;/a&gt; the software:&lt;br /&gt;&lt;pre class=postCode&gt;cd rtmpdump&lt;br /&gt;make SYS=posix&lt;/pre&gt;&lt;br /&gt;The [SYS=posix] tells it to build the Linux version, as opposed to Windows or whatever else is possible.  I then test ran the rtmpdump program that had been created and got this:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;./rtmpdump&lt;/pre&gt;&lt;pre class=postOutput&gt;./rtmpdump: error while loading shared libraries: librtmp.so.0: cannot open shared object file: No such file or directory&lt;/pre&gt;&lt;br /&gt;This got no better when I [make install]ed the rtmpdump software.  I would prefer to keep everything in [~] home if I can.  The error was complaining that it could not find a library.  The library was right there in a subfolder, so I just made a link to the Ubuntu library folder:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;sudo ln -sv ~/get_iplayer/rtmpdump/librtmp/librtmp.so.0 /lib&lt;/pre&gt;&lt;br /&gt;I then tested again, and got:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postOutput&gt;RTMPDump v2.3(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPLERROR: You must specify a hostname (--host) or url (-r "rtmp://host[:port]/playpath") containing a hostname&lt;/pre&gt;&lt;br /&gt;Which was much better.  Now to set up get_iplayer, I dropped back down to the get_iplayer directory, and ran the program once to update its plugins from the net:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;cd ..&lt;br /&gt;./get_iplayer&lt;/pre&gt;&lt;br /&gt;And then I setup the usual preferences I use:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;./get_iplayer --prefs-add --modes=flashhd,flashvhigh,flashhigh,flashnormal,iphone&lt;br /&gt;./get_iplayer --prefs-add --flvstreamer "/home/ubuntu/get_iplayer/rtmpdump/rtmpdump"&lt;/pre&gt;&lt;br /&gt;It was quite happy being told to use rtmpdump under the flvstreamer preference.  Job is, as they say, a good'un.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4825202825015986852?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4825202825015986852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/01/getiplayer-2011.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4825202825015986852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4825202825015986852'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/01/getiplayer-2011.html' title='get_iplayer 2011'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2127942211860853719</id><published>2011-01-21T11:59:00.008Z</published><updated>2011-01-21T11:59:00.518Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='beta software'/><title type='text'>Acronis True Image Home 2011</title><content type='html'>Through several annoying, and a few heartbreaking, incidents I have learned well the IT lesson that "Data you do not have backed up is data you do not want".  So I back stuff up.  I back stuff up in a number of ways.  &lt;br /&gt;&lt;br /&gt;Firstly, I have an external drive from seagate (the clicky clicky special referred to in my post about encryption).  It has a 5 year warranty, which is a good sign (and the clicky clicky sound has gone away).  On that drive I mirror My Music, My Documents, My Videos, My Pictures and My Dropbox folders.  I use &lt;a href="http://allwaysync.com/"&gt;Allway Sync&lt;/a&gt; for this, and it is pretty good.  It is available as a "free" version, but is actually a nagware version, because after you have synced so many files it starts hassling you to buy the full version.  It is, however, very intuitive to use.  File synchronization software is not, by and large, written by people who have an innate talent for user interface design.  When you run Allway Sync it pops up suggestion tip boxes telling you what to click and where to type to do a basic sync.  You can completely ignore these if you like, and you will do so once you get to grips with it, but it is very welcome at the start.&lt;br /&gt;&lt;br /&gt;With this backup method, what I end up with is a copy of all my data on an external disk.  All I need to do is connect up the external drive, fire up Allway Sync and run the saved settings.  The length of the backup just depends on how much stuff has changed since the last time I did a backup.  It can be very very quick in deed.  I am now into the habit of running one everytime I buy some new iTunes music, or upload some new digital photos from my camera.  I treat all new material as not really existing until such time as I have run a sync.&lt;br /&gt;&lt;br /&gt;It is also worth pointing out that you can set the software up to sync in one direction or both directions.  Both directions is useful if you are moving the external drive between machines, where you may be adding data to it from both machines.  The two way sync makes sure that every machine has the same data on it as the other machines.  Ideal for sharing an iTunes library around the house.  If running with a one way sync - just to back up stuff from one machine, you can also choose NOT to replicate deletions, so you keep a copy of all files on the external drive even if you delete them (accidentally!) on the main machine.&lt;br /&gt;&lt;br /&gt;The second backup method I use is &lt;a href="http://www.dropbox.com"&gt;Dropbox&lt;/a&gt;.  This allows you to select a folder on your machine which is then replicated on the Dropbox company's servers.  If you install the software on another machine you get a copy of the folder on that machine as well.  It works with Windows and Linux.  I have it installed on every machine I use (netbook, HTPC, Desktop, and both of my work machines).  That is a mixture of Ubuntu and Windows 7 machines.  I get exactly what it says on the tin - one folder which is on all of those machines.&lt;br /&gt;&lt;br /&gt;Dropbox, like AllwaySync, comes in a free version.  You get 2Gb of space to use before you have to part with any cash.  I just use the free version, and keep the folder contents to the really important stuff.  Like, for instance, password safe databases, bitlocker recovery keys and so on.  This backup method is very useful because it is off site storage.  So if the house burns to the ground, I still have all the data in my dropbox folder.  Also, if the dropbox company goes out of business I have all the data in the folder on 5 separate machines in three different buildings.  Quite, quite, secure.&lt;br /&gt;&lt;br /&gt;The third type of backup I do is to take an image of my system partition on various machines.  If you are connected to the internet, you are going to get some sort of problem software installed at some point.  Or you are going to change a stupid setting in the OS which is a pain to put right.  Or you may just have a good old fashioned hardware failure.  The BEST way of resolving the foregoing issues that I have found is not to bother with manuals, or anti-malware programs, but just to say "fuck it" and restore the last working image of the system partition.  As a rough rule of thumb every gigabyte of data takes about 1 minute to restore.  So if you install windows and a couple of bits of software you are only looking at 10-15 minutes to get back to a fresh working machine.  You can EASILY spend that amount of time trying to get rid of whatever rootkit has infected your machine.&lt;br /&gt;&lt;br /&gt;The software that I use for this task is &lt;a href="http://www.acronis.com/homecomputing/products/trueimage/index.html"&gt;True Image Home&lt;/a&gt; from Acronis.  Unlike the other options I outlined above, this is not free (although there is a free trial).  It does a couple of very useful things which made me spend money on it.  Firstly, it lets you mount the archives it creates as virtual disks, so if you just want to grab a file or two out of it you can.  Secondly, it lets you build a bootable USB stick so you can boot from that and use the software without having installed it.  Go on, use Windows Backup to restore an image to a bare metal HDD.  Not possible.  You need to install Windows FIRST.  Also the USB Key approach will happily back up and restore Linux partitions as well.&lt;br /&gt;&lt;br /&gt;I had an older version of the software which I had to replace because it did not recognise my SATA connected hard disks.  When browsing in the shop, I found two different versions of the 2011 software:  a netbook "optimized" version which came on a USB key, and a Desktop version.  The Desktop version cost £10 more.  Now, I decided that I could put up with the inconvenience of using software designed for a netbook screen on a larger screen in exchange for a ready made USB key and the £10 price difference.&lt;br /&gt;&lt;br /&gt;It turns out, however, that when Acronis say netbook "optimized" they actually mean netbook "crippled".  Because you see (and it mentions this nowhere on the fucking box) it ONLY WORKS ON NETBOOKS.  Yes, the software starts up on the desktop and says to itself, "hang the fuck on, this is not a netbook processor, I am going to go in a huff".  The software was therefore completely fucking useless.  Apart from on my netbook.  Worked fine there.&lt;br /&gt;&lt;br /&gt;So back to the shop.  Explain predicament.  Part with £10.  Get full version.  Go home.  Install full version.  Run a system disk backup.&lt;br /&gt;&lt;br /&gt;Now, fast forward to last Saturday.  I was downloading some hefty multipart files and the machine kept crashing.  Odd, I thought.  Possibly a hardware issue.  I broke out in a cold sweat with thoughts of the Hardware Fuckup trilogy.  Thankfully though, it did not seem to be hardware related.  All temps were fine, and it kept going for a few more hours before crashing again.  Hmm.  Quick browse with &lt;a href="http://www.malwarebytes.org/"&gt;Malwarebytes Anti-Malware&lt;/a&gt; (again the free version) revealed that yes, a nasty infection of something or another had taken hold.  Bugger.&lt;br /&gt;&lt;br /&gt;First solution is the "fuck it" solution.  Fire up Acronis, tell it to restore from the previous Wednesday's backup.  It tells me it needs to restart the machine to restore to the system drive.  Fine, fine, just get on with it.  It restarts ... back into Windows.  No sign of a backup being restored.  Arse.  Next, grab a USB stick, set it up as bootable media and boot from that.  Fine.  Select archive to restore.  It cannot be restore because there may not be enough space left to boot.  What.  The.  FUCK. is that about?  This is a mirror of a whole disk.  It is not possible to fit more stuff in the image than was on the disk in the first fucking place.&lt;br /&gt;&lt;br /&gt;I have never seen this message on earlier version of True Image.  So I take a punt and download the trial version of the 2010 software.  It complains that the image is corrupted.  A Ha!  says I.  Maybe the error message is some sort of default and actually the archive is bollocksed.  So I reinstall the 2011 version and validate the archive.  The archive is fine.  Fucking arseholes.  This must be a backwards compatibility issue.  So I then use the 2011 software to convert the archive from True Image format to Windows Backup format, boot to the USB key version 2010 and ... it complains about the image being too big for the blah blah.  However, it does at least let me IGNORE THE BULLSHIT ERROR and just restore the image anyway.  Which is what it is doing now.  [UPDATE] It has now finished and the restore went fine.  So if you backup using TIH2011, all you need to do to restore an image is to convert it to a Windows Backup Image, remove TIH2011, install TIH2010, create a USB rescue disk, boot from the same and restore the Windows Backup Image.  Simples.&lt;br /&gt;&lt;br /&gt;I also discovered a little gem of a bug in the software.  I like incremental backups, where only the changes since the last backup are recorded.  It lets you keep lots of different versions for relatively little hard disk space.  There is only one problem with this option in the 2011 version.  It does not fucking work.  With one archive, which extends to 2Gb, I watched as it made the first archive file, then a day later made the second (7Kb - no changes), then a day later made the third file (also 7Kb no changes) by OVERWRITING THE FIRST FILE.  Fucking brilliant.  All data gone.  Even when all of the data is demonstrably there it complains about being unable to find the original volumes.  Fucking useless.  I now have two 7Kb files and no 2Gb data anywhere.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forum.acronis.com/forum/15860"&gt;Apparently&lt;/a&gt; &lt;a href="http://forum.acronis.com/search/apachesolr_search/incremental%20overwrite"&gt;both&lt;/a&gt; of these problems are known in the world of Acronis Users.  This has left me fucking pissed off.  I have backup software which, at a fairly fundamental level, does not fucking work.  If it wasn't bad enough that it overwrites backup files, it also DOES NOT LET YOU RESTORE FROM BACKUPS THAT YOU HAVE MADE.  Backup software which just backs up and does not restore IS NOT BACKUP SOFTWARE; it is a useless pile of crap.&lt;br /&gt;&lt;br /&gt;I loved the previous version of Acronis I had.  I can't even remember where I got it - it may have come bundled with the Seagate.  It worked fine.  I used it for months doing regular  backups of my important stuff, and I did restores from time to time.  It just would not detect my SATA hard disks on my new motherboard.  Now I have the latest 2011 version which is useless.&lt;br /&gt;&lt;br /&gt;Now, what about this Norton Ghost stuff then?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2127942211860853719?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2127942211860853719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/01/acronis-true-image-home-2011.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2127942211860853719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2127942211860853719'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/01/acronis-true-image-home-2011.html' title='Acronis True Image Home 2011'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-7541909188825815</id><published>2011-01-14T11:59:00.001Z</published><updated>2011-01-14T11:59:00.235Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='basics'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Finding correct Ubuntu packages</title><content type='html'>I have ranted at length in earlier posts about the hassle of trying to install software from source on Ubuntu.  What you end up with is a conflict between the Ubuntu package naming conventions and what the source code developer has put in its error messages.  See for instance the texinfo/makeinfo nonsense &lt;a href="http://justbloodywork.blogspot.com/2010/06/making-arse-of-it.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have stumbled upon an excellent way to resolve this.  What you do is go to &lt;a href="http://packages.ubuntu.com"&gt;http://packages.ubuntu.com&lt;/a&gt;, and then scroll down to the "Search the contents of packages" section.&lt;br /&gt;&lt;br /&gt;In the "Keyword" box type in the name from the source code error - such as "makeinfo".  In the dropdown list next to "Distribution" choose the version of Ubuntu you are running.  Then hit "Search".&lt;br /&gt;&lt;br /&gt;Hey presto, the third result is [/usr/bin/makeinfo] and the associated package is [texinfo].  Brilliant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-7541909188825815?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/7541909188825815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/01/finding-correct-ubuntu-packages.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7541909188825815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7541909188825815'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/01/finding-correct-ubuntu-packages.html' title='Finding correct Ubuntu packages'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-978402684918612641</id><published>2011-01-07T11:59:00.054Z</published><updated>2011-01-07T11:59:00.754Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><category scheme='http://www.blogger.com/atom/ns#' term='conky'/><title type='text'>Installing Conky</title><content type='html'>&lt;pre class="postCode"&gt;cd /dev/shm&lt;br /&gt;wget http://sourceforge.net/projects/conky/files/conky/1.8.1/conky-1.8.1.tar.bz2/download&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xjvf conky-1.8.1.tar.bz2&lt;br /&gt;cd conky-1.8.1&lt;br /&gt;./configure --prefix=/usr --enable-wlan --disable-lua --enable-x11 --enable-curl&lt;br /&gt;make -j2&lt;br /&gt;#make install&lt;br /&gt;/dev/shm/conky-1.8.1/src/conky&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt; ~/.conkyrc &amp;lt;&amp;lt; &amp;quot;EOF&amp;quot;&lt;br /&gt;# set to yes if you want Conky to be forked in the background&lt;br /&gt;background yes&lt;br /&gt;&lt;br /&gt;# Use Xft?&lt;br /&gt;use_xft yes&lt;br /&gt;&lt;br /&gt;# Set conky on the bottom of all other applications&lt;br /&gt;#on_bottom yes&lt;br /&gt;&lt;br /&gt;# Xft font when Xft is enabled&lt;br /&gt;xftfont Deja Vu Sans Mono:size=7.5&lt;br /&gt;&lt;br /&gt;# Text alpha when using Xft&lt;br /&gt;xftalpha 0.15&lt;br /&gt;&lt;br /&gt;# Update interval in seconds&lt;br /&gt;update_interval 5.0&lt;br /&gt;&lt;br /&gt;# This is the number of times Conky will update before quitting.&lt;br /&gt;# Set to zero to run forever.&lt;br /&gt;total_run_times 0&lt;br /&gt;&lt;br /&gt;# Create own window instead of using desktop (required in nautilus)&lt;br /&gt;own_window no&lt;br /&gt;&lt;br /&gt;# If own_window is yes, you may use type normal, desktop or overide&lt;br /&gt;#own_window_type desktop&lt;br /&gt;&lt;br /&gt;# Use pseudo transparency with own_window?&lt;br /&gt;#own_window_transparent yes&lt;br /&gt;&lt;br /&gt;# If own_window is yes, these window manager hints may be used&lt;br /&gt;#own_window_hints undecorated,below,skip_pager&lt;br /&gt;&lt;br /&gt;# Use double buffering (reduces flicker, may not work for everyone)&lt;br /&gt;double_buffer yes&lt;br /&gt;&lt;br /&gt;# Minimum size of text area&lt;br /&gt;minimum_size 280 5&lt;br /&gt;&lt;br /&gt;# Draw outlines?&lt;br /&gt;draw_outline no&lt;br /&gt;&lt;br /&gt;# Draw borders around text&lt;br /&gt;draw_borders no&lt;br /&gt;&lt;br /&gt;# Stippled borders?&lt;br /&gt;stippled_borders 8 no&lt;br /&gt;&lt;br /&gt;# border margins&lt;br /&gt;#border_margin 4&lt;br /&gt;&lt;br /&gt;# border width&lt;br /&gt;border_width 1&lt;br /&gt;&lt;br /&gt;# Default colors and also border colors&lt;br /&gt;default_color white&lt;br /&gt;&lt;br /&gt;# Text alignment, other possible values are commented&lt;br /&gt;#alignment top_left&lt;br /&gt;alignment top_right&lt;br /&gt;#alignment bottom_left&lt;br /&gt;#alignment bottom_right&lt;br /&gt;#alignment none&lt;br /&gt;&lt;br /&gt;# Gap between borders of screen and text&lt;br /&gt;# same thing as passing -x at command line&lt;br /&gt;gap_x 12&lt;br /&gt;gap_y 12&lt;br /&gt;&lt;br /&gt;# Subtract file system buffers from used memory?&lt;br /&gt;no_buffers yes&lt;br /&gt;&lt;br /&gt;# set to yes if you want all text to be in uppercase&lt;br /&gt;uppercase yes&lt;br /&gt;&lt;br /&gt;# number of cpu samples to average&lt;br /&gt;# set to 1 to disable averaging&lt;br /&gt;cpu_avg_samples 2&lt;br /&gt;&lt;br /&gt;# number of net samples to average&lt;br /&gt;# set to 1 to disable averaging&lt;br /&gt;net_avg_samples 2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Force UTF8? note that UTF8 support required XFT&lt;br /&gt;override_utf8_locale yes&lt;br /&gt;&lt;br /&gt;# Add spaces to keep things from moving about? This only affects certain objects.&lt;br /&gt;use_spacer none&lt;br /&gt;&lt;br /&gt;# variable is given either in format $variable or in ${variable}. Latter&lt;br /&gt;# allows characters right after the variable and must be used in network&lt;br /&gt;# stuff because of an argument&lt;br /&gt;&lt;br /&gt;# stuff after &amp;#039;TEXT&amp;#039; will be formatted on screen&lt;br /&gt;&lt;br /&gt;TEXT&lt;br /&gt;$color&lt;br /&gt;${color orange}SYSTEM ${hr 2}$color&lt;br /&gt;$nodename $sysname $kernel on $machine&lt;br /&gt;&lt;br /&gt;${color orange}CPU ${hr 2}$color&lt;br /&gt;${freq}MHz   Load: ${loadavg}   Temp: ${acpitemp}&lt;br /&gt;$cpubar&lt;br /&gt;${cpugraph 000000 ffffff}&lt;br /&gt;NAME             PID       CPU%      MEM%&lt;br /&gt;${top name 1} ${top pid 1}   ${top cpu 1}    ${top mem 1}&lt;br /&gt;${top name 2} ${top pid 2}   ${top cpu 2}    ${top mem 2}&lt;br /&gt;${top name 3} ${top pid 3}   ${top cpu 3}    ${top mem 3}&lt;br /&gt;${top name 4} ${top pid 4}   ${top cpu 4}    ${top mem 4}&lt;br /&gt;&lt;br /&gt;${color orange}MEMORY / DISK ${hr 2}$color&lt;br /&gt;RAM:   $memperc%   ${membar 6}$color&lt;br /&gt;Swap:  $swapperc%   ${swapbar 6}$color&lt;br /&gt;Root:  ${fs_free_perc /}%   ${fs_bar 6 /}$color&lt;br /&gt;&lt;br /&gt;${color orange}NETWORK (${addr eth1}) ${hr 2}$color&lt;br /&gt;Down: $color${downspeed eth1} k/s ${alignr}Up: ${upspeed eth1} k/s&lt;br /&gt;${downspeedgraph eth1 25,140 000000 ff0000} ${alignr}${upspeedgraph eth1 25,140 000000 00ff00}$color&lt;br /&gt;Total: ${totaldown eth1} ${alignr}Total: ${totalup eth1}&lt;br /&gt;${execi 30 netstat -ept | grep ESTAB | awk &amp;#039;{print $9}&amp;#039; | cut -d: -f1 | sort | uniq -c | sort -nr}&lt;br /&gt;$color Wifi Quality: ${color #07dbf4}${wireless_link_bar eth1}&lt;br /&gt;&lt;br /&gt;${color orange}Battery: ${color #ec0000}&lt;br /&gt;${battery BAT1} $color&lt;br /&gt;${battery_bar BAT1}&lt;br /&gt;&lt;br /&gt;${color orange}Master Volume:${color}${execi 3 ~/conky_volume.sh}&lt;br /&gt;#The next line does not work if the script outputs text, such as mute.  Need to fix this.&lt;br /&gt;${execibar 3 ~/conky_volume.sh}&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;cat &amp;gt; ~/conky_volume.sh &amp;lt;&amp;lt; &amp;quot;EOF&amp;quot;&lt;br /&gt;#!/bin/bash&lt;br /&gt;amixer get Master | awk -F&amp;#039;[]%[]&amp;#039; &amp;#039;/%/ {if ($7 == &amp;quot;off&amp;quot;) { print &amp;quot;Mute&amp;quot; } else { print $2&amp;quot;%&amp;quot; }}&amp;#039;&lt;br /&gt;EOF&lt;br /&gt;chmod +x ~/conky_volume.sh&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/5718818273328171887-978402684918612641?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/978402684918612641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2011/01/installing-conky.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/978402684918612641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/978402684918612641'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2011/01/installing-conky.html' title='Installing Conky'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-5516407687754384945</id><published>2010-12-31T11:59:00.004Z</published><updated>2010-12-31T11:59:00.653Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>eBook Management on Ubuntu</title><content type='html'>sudo apt-get install calibre&lt;br /&gt;&lt;br /&gt;Should deal with dependencies, but will install an OOD version.  So then:&lt;br /&gt;&lt;br /&gt;sudo python -c "import urllib2; exec urllib2.urlopen('http://status.calibre-ebook.com/linux_installer').read(); main()"&lt;br /&gt;&lt;br /&gt;To update to the latest.&lt;br /&gt;&lt;br /&gt;Sigil for ePub editing:&lt;br /&gt;&lt;br /&gt;wget http://sigil.googlecode.com/files/Sigil-0.3.1-Linux-x86-Setup.bin&lt;br /&gt;chmod +x Sigil-0.3.1-Linux-x86-Setup.bin&lt;br /&gt;sudo ./Sigil-0.3.1-Linux-x86-Setup.bin&lt;br /&gt;&lt;br /&gt;Open the ePub file in Sigil. If it doesn't open or has an error, convert the epub to itself, which will over write the existing epub - so back up first.&lt;br /&gt;&lt;br /&gt;Then open the folder "Styles" under the Book Browser, and open the Stylesheet.css&lt;br /&gt;&lt;br /&gt;In the style sheet, change all margin{left,right} to 0.&lt;br /&gt;&lt;br /&gt;Control S to save. Then exit Sigil.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-5516407687754384945?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/5516407687754384945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/ebook-management-on-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5516407687754384945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5516407687754384945'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/ebook-management-on-ubuntu.html' title='eBook Management on Ubuntu'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8780184873450408897</id><published>2010-12-24T11:59:00.101Z</published><updated>2010-12-24T11:59:00.585Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='openbox'/><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='praying for death'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LFS - Openbox Configuration</title><content type='html'>I originally wrote the following before I put together the far more sensible popular dependencies post, which cut down the shit significantly.  I leave this here therefore, as an example of the joys of dependency hell.&lt;br /&gt;&lt;br /&gt;I decide I want to install the obconf program which lets me configure openbox from a gui, and obmenu which lets me configure openbox's menu from, drum roll, a gui.  Shocker.  So, lets start by having a look at the README in the latest version of obmenu:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;REQUERIMENTS:&lt;br /&gt;&lt;br /&gt;  python &gt;= 2.3, pygtk, python-glade&lt;/pre&gt;&lt;br /&gt;OK, so we installed Python 2.6.4 for Firefox, so we just need the other two.  Now, what about obconf.  Great, there is nothing in the README file for obconf.  However, if you go to the website for obconf &lt;a href="http://openbox.org/wiki/ObConf:About"&gt;here&lt;/a&gt;, you get this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;Compiling ObConf requires the following packages:&lt;br /&gt;&lt;br /&gt;    GTK+ 2.x library and headers (development package)&lt;br /&gt;    Glade 2.x library and headers (development package)&lt;br /&gt;    Openbox 3.4 or above (the libraries development package if it is separate)&lt;/pre&gt;&lt;br /&gt;So, we have GTK and Openbox (it take a special kind of mind to decide to point out that the configuration software for openbox needs openbox to be installed).  Not sure what this Glade thing is, but it echos the python-glade package needed for obconf.  A ha!  &lt;a href="http://en.wikipedia.org/wiki/Glade_Interface_Designer"&gt;It&lt;/a&gt; is an interface designer.  Interestingly, wikipedia has in in the same category of tools as MUI for the Amiga.  The glade 2.x library is presumably the &lt;a href="http://www.linuxfromscratch.org/blfs/view/svn/general/libglade.html"&gt;libglade&lt;/a&gt; package referred to in BLFS.  Good news is we have previously installed both of its dependencies, libxml2 and GTK+2.  Now, as far as I and &lt;a href="http://lmgtfy.com/?q=python-glade"&gt;Google&lt;/a&gt; can gather there is no such fucking thing as python-glade, so I am operating on the presumption that python-glade = Glade 2.x library = libglade.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://ftp.gnome.org/pub/gnome/sources/libglade/2.6/libglade-2.6.4.tar.bz2&lt;br /&gt;tar -jxvf libglade-2.6.4.tar.bz2&lt;br /&gt;cd libglade-2.6.4&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make&lt;br /&gt;make check&lt;/pre&gt;&lt;br /&gt;Error, error, error and then I check the page and discover that one of the tests is supposed to fail.  OK, hands up that was my fault.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libglade-2.6.4&lt;/pre&gt;&lt;br /&gt;So that should be all the dependencies sorted out for obconf.  Next is obmenu.  Let's start with pygtk.  Its README file says this about dependencies:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;Requirements&lt;br /&gt;============&lt;br /&gt;  * C compiler (GCC and MSVC supported)&lt;br /&gt;  * Python 2.3.5 or higher&lt;br /&gt;  * PyGObject 2.12.1 or higher&lt;br /&gt;  * Glib 2.8.0 or higher&lt;br /&gt;  * GTK+ 2.8.0 or higher (optional) or&lt;br /&gt;    GTK+ 2.10.0 or higher for 2.10 API&lt;br /&gt;    GTK+ 2.12.0 or higher for 2.12 API&lt;br /&gt;    GTK+ 2.14.0 or higher for 2.14 API&lt;br /&gt;    GTK+ 2.16.0 or higher for 2.16 API&lt;br /&gt;  * libglade 2.5.0 or higher (optional)&lt;br /&gt;  * pycairo 1.0.2 or higher (optional)&lt;br /&gt;  * numpy (optional)&lt;/pre&gt;&lt;br /&gt;So, we obviously have GCC, we also have Python.  We also have GTK+2 higher than all version listed there, as well as GLib (remember this is G(nome)Lib not G(nu)Libc).  We have just installed libglade, so we are good to go.  Not going to bother with the optional stuff.  Lets just do this PyGObject thingy.  In turn, it requires gobject-introspection, although it doesn't tell you that in its README.  gobject-introspection in turn requires libiffi, according to BLFS.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget ftp://sourceware.org/pub/libffi/libffi-3.0.8.tar.gz&lt;br /&gt;tar -xzvf libffi-3.0.8.tar.gz&lt;br /&gt;cd libffi-3.0.8&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libffi-3.0.8&lt;/pre&gt;&lt;br /&gt;Actually installing gobject-introspection was a right pain in the arse.  The one with instructions in BLFS at the time of writing (0.6.14) doesn't fucking work with pygobject 2.26.0 (which is the latest available at the time of writing), so I downloaded the latest version of this.  Which doesn't fucking work with my version of Glib.  Ah fuck. So it turns into a guessing game to find a version of gobject-introspection which works with my glib AND pygobject.  Bastard.  0.9.5 works. Oh, hang on:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;subprocess.CalledProcessError: Command '['/bin/sh', '../../libtool', '--mode=link', '--tag=CC', '--silent', 'gcc', '-o', '/dev/shm/gobject-introspection-0.9.5/tests/scanner/tmp-introspect696b_W/Regress-1.0', '-L.', 'libregress.la', '../../girepository/libgirepository-1.0.la', '-pthread', '-lgio-2.0', '-lgobject-2.0', '-lgmodule-2.0', '-lgthread-2.0', '-lrt', '-lglib-2.0', '/dev/shm/gobject-introspection-0.9.5/tests/scanner/tmp-introspect696b_W/Regress-1.0.o']' returned non-zero exit status 1&lt;/pre&gt;&lt;br /&gt;No it fucking doesn't.  Right.  Lets try to solve this from the other direction and find the version of pygobject that will fucking work with gobject-introspection 0.6.14.  By the way, what the fuck is gobject-introspection.  It sounds suspiciously like an arts student's 'kooky' first album.  &lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/0.6/gobject-introspection-0.6.14.tar.bz2&lt;br /&gt;tar -xjvf gobject-introspection-0.6.14.tar.bz2&lt;br /&gt;cd gobject-introspection-0.6.14&lt;br /&gt;./configure --prefix=/usr --disable-tests &amp;&amp;&lt;br /&gt;make&lt;br /&gt;make check&lt;br /&gt;&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gobject-introspection-0.6.14&lt;/pre&gt;&lt;br /&gt;It turns out that if you look at the publish date of 0.6.14 it is 3rd June 2010.  If you then look at 2.21 of pygobject that was published on 12th July 2010.  Hmmm.  Probably too late.  2.20 was September 2009 so that will definitely work with 0.6.14.  Good.  Progress.  I install 2.20.&lt;br /&gt;&lt;br /&gt;Well it installed, but then when I came to the next step (pygtk), oh, holy fucking shitting bastard.  When I then downloaded 2.22 of pygtk, its README file states, and I quote:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;PyGObject 2.12.1 or higher&lt;/pre&gt;&lt;br /&gt;What do I have?  I have 2.20 - look its right up there!  But when ./configuring I got:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;checking for PYGOBJECT... configure: error: Package requirements (pygobject-2.0 &gt;= 2.21.3) were not met:&lt;/pre&gt;&lt;br /&gt;Cocksucker.  So when it SAYS 2.12.1 or higher it actually means 2.21.3 or higher.  Looks like some lazy bastard hasn't updated the README file doesn't it?  After checking file dates ... if I drop back to 2.17 of pygtk that should sync with 2.20 of PyGObject that I have installed.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;checking for PYGOBJECT... configure: error: Package requirements (pygobject-2.0 &gt;= 2.16.1) were not met:&lt;br /&gt;&lt;br /&gt;No package 'pygobject-2.0' found&lt;/pre&gt;&lt;br /&gt;Oh, jesus fuck give me strength.  YES IT FUCKING IS.  I try 2.21 of pygtk and I get exactly the same fucking, manifestly false, bullshit statement.  Right.  Lets try 2.21.3 of pygobject since pygtk seems to desire that above all other things.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;checking for GLIB - version &gt;= 2.22.4... yes (version 2.22.4)&lt;/pre&gt;&lt;br /&gt;Man, that is cutting things pretty god damned fine.  And does it fucking work?  Does it fuck.  Right, lets try exactly 2.16.1 of pygobject.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.16/pygobject-2.16.1.tar.bz2&lt;br /&gt;tar -xjvf pygobject-2.16.1.tar.bz2&lt;br /&gt;cd pygobject-2.16.1&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pygobject-2.16.1&lt;/pre&gt;&lt;br /&gt;Now for pygtk 2.17 again ...&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;checking for PYCAIRO... no&lt;br /&gt;no&lt;br /&gt;not checking for gtk due to missing pycairo&lt;br /&gt;checking for GDK target... x11&lt;br /&gt;configure: WARNING: Could not find a valid numpy installation, disabling.&lt;br /&gt;checking whether gcc understands -Wall... yes&lt;br /&gt;checking whether gcc understands -fno-strict-aliasing... yes&lt;br /&gt;checking whether gcc understands -std=c9x... yes&lt;br /&gt;configure: error: conditional "HAVE_GTK_2_16" was never defined.&lt;br /&gt;Usually this means the macro was only invoked conditionally.&lt;/pre&gt;&lt;br /&gt;God fucking damn cunting it.  PYCAIRO is supposed to be a fucking optional package.&lt;br /&gt;&lt;pre class="postOutput"&gt;* pycairo 1.0.2 or higher (optional)&lt;/pre&gt;See - OPTIONAL. Right.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://cairographics.org/releases/py2cairo-1.8.10.tar.gz&lt;br /&gt;tar -xzvf py2cairo-1.8.10.tar.gz&lt;br /&gt;cd pycairo-1.8.10&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pycairo-1.8.10&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.17/pygtk-2.17.0.tar.bz2&lt;br /&gt;tar -xjvf pygtk-2.17.0.tar.bz2&lt;br /&gt;cd pygtk-2.17.0&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pygtk-2.17.0&lt;/pre&gt;&lt;br /&gt;Well, at fucking last.  Lesson?  PYCairo is NOT FUCKING OPTIONAL.  Probably all the other versions of pygtk were stalling on this as well, so my install is now completely unnecessarily retarded.  Bastard.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://prdownloads.sourceforge.net/obmenu/obmenu-1.0.tar.gz?download&lt;br /&gt;tar -xzvf obmenu-1.0.tar.gz&lt;br /&gt;cd obmenu-1.0&lt;br /&gt;python setup.py install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf obmenu-1.0&lt;/pre&gt;&lt;br /&gt;Amazingly obmenu installed and is functional after all that shite.  On the other hand obconf does not fucking work because Startup Notification has not been installed - boo fucking hoo.  Bastard arseholes. This wasn't mentioned anywhere in its README of course.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://ftp.gnome.org/pub/gnome/sources/startup-notification/0.9/startup-notification-0.9.tar.bz2&lt;br /&gt;tar -xjvf startup-notification-0.9.tar.bz2&lt;br /&gt;cd startup-notification-0.9&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make&lt;br /&gt;make install &amp;&amp;&lt;br /&gt;install -v -m644 -D doc/startup-notification.txt /usr/share/doc/startup-notification-0.9/startup-notification.txt&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf startup-notification-0.9&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://openbox.org/dist/obconf/obconf-2.0.3.tar.gz&lt;br /&gt;tar -xzvf obconf-2.0.3.tar.gz&lt;br /&gt;cd obconf-2.0.3&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf obconf-2.0.3&lt;/pre&gt;&lt;br /&gt;And, fucking hell, they both now work.  That was not fun.&lt;br /&gt;&lt;br /&gt;By way of summary, the follow packages turned out to be needed:&lt;br /&gt;&lt;br /&gt;(GTK+2, Python, libxml2)&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;obmenu &lt;-- libglade&lt;br /&gt;       &lt;-- pygtk &lt;-- pygobject &lt;-- gobject-introspection &lt;-- libffi&lt;br /&gt;                 &lt;-- pycairo&lt;/pre&gt;&lt;pre class="postCode"&gt;obconf &lt;-- libglade&lt;br /&gt;       &lt;-- startup-notification&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8780184873450408897?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8780184873450408897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/lfs-openbox-configuration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8780184873450408897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8780184873450408897'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/lfs-openbox-configuration.html' title='LFS - Openbox Configuration'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8846486368544215621</id><published>2010-12-17T11:59:00.018Z</published><updated>2010-12-17T11:59:00.342Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Copy USB Install to HDD</title><content type='html'>mke2fs -jv -L lfs /dev/sda?&lt;br /&gt;mkdir /media/lfs&lt;br /&gt;mount /dev/sda7 /media/lfs&lt;br /&gt;cd /media/amiga&lt;br /&gt;sudo cp -axv . /media/lfs&lt;br /&gt;&lt;br /&gt;sudo chroot "/media/lfs" /usr/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin CORES_TO_USE=-j2 /bin/bash --login&lt;br /&gt;&lt;br /&gt;grub --batch &lt; /etc/grub.conf&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;sudo mkdir /media/root&lt;br /&gt;sudo mount -t ext3 /dev/sda? /media/root&lt;br /&gt;sudo mount -t proc none /media/root/proc&lt;br /&gt;sudo mount -o bind /dev /media/root/dev&lt;br /&gt;sudo chroot /media/root /bin/bash&lt;br /&gt;sudo grub&lt;br /&gt;find /boot/grub/stage1&lt;br /&gt;root (hd0,Y)&lt;br /&gt;setup (hd0)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8846486368544215621?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8846486368544215621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/copy-usb-install-to-hdd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8846486368544215621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8846486368544215621'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/copy-usb-install-to-hdd.html' title='Copy USB Install to HDD'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2575580028186288488</id><published>2010-12-10T11:59:00.015Z</published><updated>2010-12-10T11:59:00.197Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>Updated BLFS Packages - OpenOffice.org</title><content type='html'>&lt;pre class="postCode"&gt;mkdir /sources/ooo&lt;br /&gt;cd /sources/ooo&lt;br /&gt;wget http://ftp.gnu.org/gnu/gperf/gperf-3.0.4.tar.gz&lt;br /&gt;wget http://ftp.osuosl.org/pub/openoffice/stable/3.2.1/OOo_3.2.1_src_core.tar.bz2&lt;br /&gt;wget http://ftp.osuosl.org/pub/openoffice/stable/3.2.1/OOo_3.2.1_src_system.tar.bz2&lt;br /&gt;wget http://www.linuxfromscratch.org/patches/blfs/svn/OOo_3.2.1-build_with_db5-1.patch&lt;br /&gt;wget ftp://ftp.mozilla.org/pub/mozilla.org/seamonkey/releases/1.1.14/seamonkey-1.1.14.source.tar.bz2&lt;br /&gt;wget ftp://ftp.osuosl.org/pub/openoffice/stable/3.2.1/OOo_3.2.1_src_l10n.tar.bz2&lt;br /&gt;wget ftp://ftp.osuosl.org/pub/openoffice/stable/3.2.1/OOo_3.2.1_src_extensions.tar.bz2&lt;/pre&gt;&lt;br /&gt;We need to install one dependency 'gperf':&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;tar -xzvf /sources/ooo/gperf-3.0.4.tar.gz&lt;br /&gt;cd gperf-3.0.4&lt;br /&gt;./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.0.4 &amp;amp;&amp;amp;&lt;br /&gt;make&lt;br /&gt;make install &amp;amp;&amp;amp;&lt;br /&gt;install -m644 -v doc/gperf.{dvi,ps,pdf,txt} /usr/share/doc/gperf-3.0.4 &amp;amp;&amp;amp;&lt;br /&gt;pushd /usr/share/info &amp;amp;&amp;amp;&lt;br /&gt;rm -v dir &amp;amp;&amp;amp;&lt;br /&gt;for FILENAME in *; do&lt;br /&gt;    install-info $FILENAME dir 2&amp;gt;/dev/null&lt;br /&gt;done &amp;amp;&amp;amp;&lt;br /&gt;popd&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gperf-3.0.4&lt;/pre&gt;&lt;br /&gt;And now for OpenOffice.org which you just cannot install from a ramdisk on a 32bit machine.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/ooo&lt;br /&gt;tar -xjvf OOo_3.2.1_src_system.tar.bz2&lt;br /&gt;tar -xjvf OOo_3.2.1_src_core.tar.bz2&lt;br /&gt;tar -xjvf OOo_3.2.1_src_extensions.tar.bz2&lt;br /&gt;tar -xjvf OOo_3.2.1_src_l10n.tar.bz2&lt;br /&gt;cd OOO320_m19&lt;br /&gt;cp ../seamonkey-1.1.14.source.tar.bz2 moz/download/&lt;/pre&gt;&lt;br /&gt;Don't follow the instructions in BLFS, it gets the seamonkey filename wrong.  Apparently OOo shits itself if you have certain environment variables set, so unset them and fire on a patch.  In a rapidly developing theme the patch file name is also wrong on BLFS.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;umask 0022 &amp;&amp;&lt;br /&gt;unset LANG LC_ALL&lt;br /&gt;patch -Np1 -i ../OOo_3.2.1-build_with_db5-1.patch&lt;br /&gt;autoreconf&lt;/pre&gt;&lt;br /&gt;Now, set the configuration.  &lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;PKG_CONFIG=/usr/bin/pkg-config ./configure \&lt;br /&gt;--enable-graphite              \&lt;br /&gt;--disable-lockdown             \&lt;br /&gt;--disable-binfilter            \&lt;br /&gt;--disable-fontooo              \&lt;br /&gt;--disable-cups                 \&lt;br /&gt;--enable-fontconfig            \&lt;br /&gt;--disable-symbols              \&lt;br /&gt;--disable-gnome-vfs            \&lt;br /&gt;--disable-systray              \&lt;br /&gt;--disable-odk                  \&lt;br /&gt;--disable-qadevooo             \&lt;br /&gt;--enable-cairo                 \&lt;br /&gt;--disable-dbus                 \&lt;br /&gt;--disable-gconf                \&lt;br /&gt;--enable-gio                   \&lt;br /&gt;--disable-pam                  \&lt;br /&gt;--without-afms                 \&lt;br /&gt;--without-fonts                \&lt;br /&gt;--without-ppds                 \&lt;br /&gt;--without-pam                  \&lt;br /&gt;--with-system-stdlibs          \&lt;br /&gt;--with-system-libxml           \&lt;br /&gt;--with-system-libxslt          \&lt;br /&gt;--with-system-cairo            \&lt;br /&gt;--with-system-expat            \&lt;br /&gt;--with-system-zlib             \&lt;br /&gt;--with-system-jpeg             \&lt;br /&gt;--with-system-openssl          \&lt;br /&gt;--with-system-python           \&lt;br /&gt;--with-system-curl             \&lt;br /&gt;--with-system-freetype         \&lt;br /&gt;--with-jdk-home=/opt/jdk       \&lt;br /&gt;--with-java                    \&lt;br /&gt;--with-ant-home=/opt/ant       \&lt;br /&gt;--with-perl-home=/usr          \&lt;br /&gt;--with-x                       \&lt;br /&gt;--with-lang="en-GB"             \&lt;br /&gt;--with-dict=ENGB               \&lt;br /&gt;--with-package-format=native   \&lt;br /&gt;--with-vendor="Your name here"     \&lt;br /&gt;--with-use-shell=bash&lt;/pre&gt;&lt;br /&gt;Now compile this all with:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;source LinuxX86Env.Set.sh &amp;&amp;&lt;br /&gt;./bootstrap &amp;&amp;&lt;br /&gt;make $CORES_TO_USE&lt;/pre&gt;&lt;br /&gt;Then to install (several hours later):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;pushd instsetoo_native/unxlng?6.pro/OpenOffice/native/install/en-US/linux-2.6-*/buildroot/opt &amp;&amp;&lt;br /&gt;cp -r -v openoffice.org3 /opt/openoffice-3.2.1 &amp;&amp;&lt;br /&gt;cp -r -v openoffice.org/* /opt/openoffice-3.2.1 &amp;&amp;&lt;br /&gt;ln -sf basis3.2 /opt/openoffice-3.2.1/basis-link &amp;&amp;&lt;br /&gt;popd&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for appl in sbase scalc sdraw simpress smath soffice spadmin swriter&lt;br /&gt;do&lt;br /&gt;    ln -v -sf /opt/openoffice-3.2.1/program/$appl /usr/bin&lt;br /&gt;done&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;pushd sysui/desktop/icons &amp;&amp;&lt;br /&gt;install -v -m755 -d /usr/share/icons/{hicolor,locolor} &amp;&amp;&lt;br /&gt;cp -r -v hicolor/* /usr/share/icons/hicolor &amp;&amp;&lt;br /&gt;cp -r -v locolor/* /usr/share/icons/locolor &amp;&amp;&lt;br /&gt;popd&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;install -v -d -m755 /usr/share/applications &amp;&amp;&lt;br /&gt;pushd /opt/openoffice-3.2.1/share/xdg/ &amp;&amp;&lt;br /&gt;for appl in *.desktop&lt;br /&gt;do&lt;br /&gt;    sed -i '/Exec/d' $appl &amp;&amp;&lt;br /&gt;    echo "Exec=/usr/bin/s`echo $appl | sed 's/.desktop//'`" &gt;&gt; $appl &amp;&amp;&lt;br /&gt;    sed -i '/Icon/d' $appl &amp;&amp;&lt;br /&gt;    echo "Icon=`echo "ooo-${appl}3.2" | sed 's/\.desktop//'`" &gt;&gt; $appl&lt;br /&gt;done &amp;&amp;&lt;br /&gt;sed -i 's@bin/sprinteradmin@bin/spadmin@' printeradmin.desktop &amp;&amp;&lt;br /&gt;cp -v *.desktop /usr/share/applications &amp;&amp;&lt;br /&gt;popd&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;update-desktop-database&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cp -v dictionaries/unxlngi6.pro/bin/dict-*.oxt sdext/unxlngi6.pro/bin/*.oxt reportbuilder/unxlngi6.pro/bin/report-builder.oxt swext/unxlngi6.pro/bin/wiki-publisher.oxt /opt/openoffice-3.2.1/share/extension/install&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for ext in /opt/openoffice-3.2.1/share/extension/install/*.oxt&lt;br /&gt;do&lt;br /&gt;    /opt/openoffice-3.2.1/program/unopkg add --shared --verbose $ext&lt;br /&gt;done&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ln -sv /opt/openoffice-3.2.1/program/libnpsoplugin.so ${FFPATH}/plugins&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2575580028186288488?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2575580028186288488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/updated-blfs-packages-openofficeorg.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2575580028186288488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2575580028186288488'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/updated-blfs-packages-openofficeorg.html' title='Updated BLFS Packages - OpenOffice.org'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-1854946837449374271</id><published>2010-12-09T11:59:00.005Z</published><updated>2010-12-09T11:59:00.354Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>Updated BLFS Packages - Firefox</title><content type='html'>First the stand alone Firefox dependency Yasm:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/extras&lt;br /&gt;wget http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/extras/yasm-0.8.0.tar.gz&lt;br /&gt;cd yasm-0.8.0&lt;br /&gt;CC="gcc -fPIC" ./configure --prefix=/usr&lt;br /&gt;time make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf yasm-0.8.0&lt;/pre&gt;&lt;br /&gt;Now Firefox:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/extras&lt;br /&gt;wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/4.0b7/source/firefox-4.0b7.source.tar.bz2&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xjvf /sources/extras/firefox-4.0b7.source.tar.bz2&lt;br /&gt;cd moz*&lt;br /&gt;cat &amp;gt; .mozconfig &amp;lt;&amp;lt; "EOF"&lt;br /&gt;ac_add_options --enable-application=browser&lt;br /&gt;. $topsrcdir/browser/config/mozconfig&lt;br /&gt;mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../firefox-build&lt;br /&gt;mk_add_options MOZ_MAKE_FLAGS="-j2"&lt;br /&gt;#Or -j4 or -j8 or comment the whole thing out for single core.&lt;br /&gt;ac_add_options --prefix=/opt/firefox&lt;br /&gt;ac_add_options --enable-optimize&lt;br /&gt;ac_add_options --enable-system-cairo&lt;br /&gt;ac_add_options --enable-system-sqlite&lt;br /&gt;ac_add_options --enable-pango&lt;br /&gt;ac_add_options --with-system-nspr&lt;br /&gt;ac_add_options --with-system-nss&lt;br /&gt;ac_add_options --with-system-jpeg&lt;br /&gt;#ac_add_options --with-system-png&lt;br /&gt;ac_add_options --with-pthreads&lt;br /&gt;ac_add_options --with-system-zlib&lt;br /&gt;ac_add_options --disable-accessibility&lt;br /&gt;ac_add_options --disable-crashreporter&lt;br /&gt;ac_add_options --disable-dbus&lt;br /&gt;ac_add_options --disable-gnomevfs&lt;br /&gt;ac_add_options --disable-necko-wifi&lt;br /&gt;ac_add_options --disable-installer&lt;br /&gt;ac_add_options --disable-javaxpcom&lt;br /&gt;ac_add_options --disable-tests&lt;br /&gt;ac_add_options --disable-updater&lt;br /&gt;ac_add_options --disable-libnotify&lt;br /&gt;ac_add_options --enable-official-branding&lt;br /&gt;ac_add_options --enable-safe-browsing&lt;br /&gt;ac_add_options --enable-strip&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;time make -f client.mk build&lt;br /&gt;make -f client.mk install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf moz*&lt;/pre&gt;&lt;br /&gt;Be sure to check your install path and then change the text in the following command if needs be:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt;&amp;gt; /etc/profile.d/custom_variables.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;FFPATH=/opt/firefox/lib/firefox-4.0b7&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;source /etc/profile&lt;br /&gt;&lt;br /&gt;cat &amp;gt;&amp;gt; /etc/ld.so.conf &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# Extra Path so Firefox's libraries can be used by Flash10&lt;br /&gt;/opt/firefox/lib/firefox-4.0b7&lt;br /&gt;# End of Extra Path.&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;And now download and install the essential plugin flashplayer, and link the Java plugin.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz&lt;br /&gt;tar -xzvf install_flash_player_10_linux.tar.gz&lt;br /&gt;mkdir -v ${FFPATH}/plugins&lt;br /&gt;cp -v libflashplayer.so ${FFPATH}/plugins&lt;br /&gt;ln -sv /opt/jdk/jre/lib/i386/libnpjp2.so ${FFPATH}/plugins&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-1854946837449374271?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/1854946837449374271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/updated-blfs-packages-firefox.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/1854946837449374271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/1854946837449374271'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/updated-blfs-packages-firefox.html' title='Updated BLFS Packages - Firefox'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2033918185088107808</id><published>2010-12-08T11:59:00.004Z</published><updated>2010-12-08T11:59:01.013Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>Updated BLFS Packages - Desktop</title><content type='html'>We are using a slightly different install procedure this time.  We are starting with GTK, then installing the Dependencies, and then moving on to applications.  I put Openbox and Slim under that category, so here we go with the streamlined install now that the dependencies are taken care of:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/desktop&lt;br /&gt;wget http://download.berlios.de/slim/slim-1.3.2.tar.gz&lt;br /&gt;wget http://openbox.org/dist/openbox/openbox-3.4.11.1.tar.gz&lt;br /&gt;wget http://prdownloads.sourceforge.net/obmenu/obmenu-1.0.tar.gz&lt;br /&gt;wget http://openbox.org/dist/obconf/obconf-2.0.3.tar.gz&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/desktop/slim-1.3.2.tar.gz &lt;br /&gt;cd slim-1.3.2 &lt;br /&gt;sed -i -e "s:^MANDIR=.*:MANDIR=/usr/share/man:" -e "s:/usr/X11R6:/usr:" Makefile &lt;br /&gt;sed -i -e 's#X11R6/##g' -e 's#/usr/bin:##' -e 's/# daemon/daemon/' slim.conf&lt;br /&gt;make $CORES_TO_USE &lt;br /&gt;make install &lt;br /&gt;cat &amp;gt;&amp;gt; /etc/inittab &amp;lt;&amp;lt; "EOF"&lt;br /&gt;x:5:respawn:/usr/bin/slim &amp;gt;&amp;amp; /dev/null &lt;br /&gt;EOF&lt;br /&gt;cd .. &lt;br /&gt;rm -rf slim-1.3.2&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/desktop/openbox-3.4.11.1.tar.gz&lt;br /&gt;cd openbox-3.4.11.1&lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc --disable-session-management&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cat &amp;gt; /root/.xinitrc &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# Begin .xinitrc file&lt;br /&gt;#xterm  -g 80x20+0+0   &amp;amp;&lt;br /&gt;#xclock -g 100x100-0+0 &amp;amp;&lt;br /&gt;exec openbox-session&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf openbox-3.4.11.1&lt;br /&gt;&lt;br /&gt;mkdir -p ~/.config/openbox&lt;br /&gt;cp /etc/xdg/openbox/*.* ~/.config/openbox&lt;br /&gt;cat &amp;gt; ~/.config/openbox/menu.xml &amp;lt;&amp;lt; "EOF"&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;openbox_menu xmlns="http://openbox.org/3.4/menu"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="apps-editors-menu" label="Editors"&amp;gt;&lt;br /&gt;&amp;lt;item label="nano"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;command&amp;gt;xterm -e /usr/bin/nano&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;startupnotify&amp;gt;&lt;br /&gt;&amp;lt;enabled&amp;gt;yes&amp;lt;/enabled&amp;gt;&lt;br /&gt;&amp;lt;/startupnotify&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="apps-term-menu" label="Terminals"&amp;gt;&lt;br /&gt;&amp;lt;item label="Xterm"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&amp;lt;command&amp;gt;xterm&amp;lt;/command&amp;gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="apps-net-menu" label="Internet"&amp;gt;&lt;br /&gt;&amp;lt;item label="lynx"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;command&amp;gt;xterm -e /usr/bin/lynx&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;startupnotify&amp;gt;&lt;br /&gt;&amp;lt;enabled&amp;gt;yes&amp;lt;/enabled&amp;gt;&lt;br /&gt;&amp;lt;/startupnotify&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="apps-multimedia-menu" label="Multimedia"&amp;gt;&lt;br /&gt;&amp;lt;item label="alsamixer"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;command&amp;gt;xterm -e /usr/bin/alsamixer&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;startupnotify&amp;gt;&lt;br /&gt;&amp;lt;enabled&amp;gt;yes&amp;lt;/enabled&amp;gt;&lt;br /&gt;&amp;lt;/startupnotify&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="system-menu" label="System"&amp;gt;&lt;br /&gt;&amp;lt;item label="Openbox Configuration Manager"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;command&amp;gt;obconf&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;startupnotify&amp;gt;&amp;lt;enabled&amp;gt;yes&amp;lt;/enabled&amp;gt;&amp;lt;/startupnotify&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;item label="Openbox Menu Editor"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;execute&amp;gt;obmenu&amp;lt;/execute&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;separator /&amp;gt;&lt;br /&gt;&amp;lt;item label="Reconfigure Openbox"&amp;gt;&lt;br /&gt;&amp;lt;action name="Reconfigure" /&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="root-menu" label="Openbox 3"&amp;gt;&lt;br /&gt;&amp;lt;separator label="Applications" /&amp;gt;&lt;br /&gt;&amp;lt;menu id="apps-editors-menu"/&amp;gt;&lt;br /&gt;&amp;lt;menu id="apps-net-menu"/&amp;gt;&lt;br /&gt;&amp;lt;menu id="apps-multimedia-menu"/&amp;gt;&lt;br /&gt;&amp;lt;menu id="apps-term-menu"/&amp;gt;&lt;br /&gt;&amp;lt;separator label="System" /&amp;gt;&lt;br /&gt;&amp;lt;menu id="system-menu"/&amp;gt;&lt;br /&gt;&amp;lt;separator /&amp;gt;&lt;br /&gt;&amp;lt;item label="Log Out"&amp;gt;&lt;br /&gt;&amp;lt;action name="Exit"&amp;gt;&lt;br /&gt;&amp;lt;prompt&amp;gt;yes&amp;lt;/prompt&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/openbox_menu&amp;gt;&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/desktop/obmenu-1.0.tar.gz&lt;br /&gt;cd obmenu-1.0&lt;br /&gt;python setup.py install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf obmenu-1.0&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/desktop/obconf-2.0.3.tar.gz&lt;br /&gt;cd obconf-2.0.3&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf obconf-2.0.3&lt;/pre&gt;&lt;br /&gt;Remember to nano both /etc/slim.conf and /etc/inittab, and to change the settings therein confirm to the instructions &lt;a href="http://justbloodywork.blogspot.com/2010/08/lap-slim.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2033918185088107808?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2033918185088107808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/02/updated-blfs-packages-desktop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2033918185088107808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2033918185088107808'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/02/updated-blfs-packages-desktop.html' title='Updated BLFS Packages - Desktop'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8692700186625071987</id><published>2010-12-07T11:59:00.012Z</published><updated>2010-12-07T11:59:00.123Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LFS - Popular Dependencies</title><content type='html'>I have installed a number of bits of software onto my bare LFS/X/GTK system now, and I have noticed that I have come across the same dependencies time and again.  I have installed Firefox, OpenOffice and a number of smaller applications, all of which shared to an extent background software.  So, for the next build, I thought it would be a good idea to stick all of that software into a blogpost so I have a record of the shared stuff, so I can install it all in a one-er and then get on with the applications themselves.&lt;br /&gt;&lt;br /&gt;First of all, there are a few packages which crop up and I keep having to double check that I have installed them.  I have, because they form part of the core system.  They are:&lt;br /&gt;&lt;br /&gt;Installed with LFS&lt;br /&gt;zlib&lt;br /&gt;libuuid&lt;br /&gt;&lt;br /&gt;Installed Basics&lt;br /&gt;zip&lt;br /&gt;unzip&lt;br /&gt;lzma&lt;br /&gt;openssl&lt;br /&gt;&lt;br /&gt;Installed with Xorg:&lt;br /&gt;XML::Parser&lt;br /&gt;Intltool&lt;br /&gt;libpng (and yes I applied the patch to allow it to be used with Firefox)&lt;br /&gt;Fontconfig&lt;br /&gt;Pixman&lt;br /&gt;&lt;br /&gt;Installed with GTK:&lt;br /&gt;Cairo&lt;br /&gt;Pango&lt;br /&gt;PCRE&lt;br /&gt;tiff&lt;br /&gt;jpeg&lt;br /&gt;&lt;br /&gt;I do not need to worry about those again, they are already installed.  So what is not, and what is the best order to install these extras in?  I think first of all we will install some programs that do not depend on any of the other packages we are about to dump into the system.  SQLite is a database program and startup-notification makes the pointer do the hourglass thing while another program is starting up.  For some programs, unbelievably this is actually a prerequisite.  &lt;br /&gt;&lt;br /&gt;I am going to stick all of these source files in a separate folder in sources - this is just to show that they are not part of the structure of LFS, and neither are they the Applications that I will end up running.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir /sources/dependencies&lt;br /&gt;cd /sources/dependencies&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/startup-notification/0.9/startup-notification-0.9.tar.bz2&lt;br /&gt;wget http://sqlite.org/sqlite-amalgamation-3.7.3.tar.gz&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xjvf /sources/dependencies/startup-notification-0.9.tar.bz2&lt;br /&gt;cd startup-notification-0.9&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install &amp;amp;&amp;amp;&lt;br /&gt;install -v -m644 -D doc/startup-notification.txt /usr/share/doc/startup-notification-0.9/startup-notification.txt&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf startup-notification-0.9&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/sqlite-amalgamation-3.7.3.tar.gz&lt;br /&gt;cd sqlite-3.7.3&lt;br /&gt;CFLAGS="-g -O2 -DSQLITE_SECURE_DELETE -DSQLITE_ENABLE_UNLOCK_NOTIFY=1" ./configure --prefix=/usr --enable-threadsafe --enable-readline --enable-dynamic-extensions &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf sqlite-3.7.3&lt;/pre&gt;&lt;br /&gt;Lets move on to a biggie which is the Python language.  A number of applications use this, as do some of the intermediate libraries.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2&lt;br /&gt;wget http://www.linuxfromscratch.org/patches/blfs/svn/Python-2.6.4-bdb_4.8-1.patch&lt;br /&gt;wget http://docs.python.org/ftp/python/doc/2.6/python-2.6-docs-html.tar.bz2&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xjvf /sources/dependencies/Python-2.6.4.tar.bz2&lt;br /&gt;cd Python-2.6.4&lt;br /&gt;sed -i "s/ndbm_libs = \[\]/ndbm_libs = ['gdbm', 'gdbm_compat']/" setup.py&lt;br /&gt;patch -Np1 -i /sources/dependencies/Python-2.6.4-bdb_4.8-1.patch&lt;br /&gt;./configure --prefix=/usr --enable-shared&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;chmod -v 755 /usr/lib/libpython2.6.so.1.0&lt;br /&gt;install -v -m755 -d /usr/share/doc/Python-2.6.4/html&lt;br /&gt;tar --strip-components=1 --no-same-owner --no-same-permissions -C /usr/share/doc/Python-2.6.4/html -xvf /sources/dependencies/python-2.6-docs-html.tar.bz2&lt;br /&gt;cat &amp;gt;&amp;gt; /etc/profile.d/35-python.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;export PYTHONDOCS=/usr/share/doc/Python-2.6.4/html&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf Python-2.6.4&lt;/pre&gt;&lt;br /&gt;Right, now it is time for some hot library action:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.14.tar.bz2&lt;br /&gt;wget http://xmlsoft.org/sources/libxml2-2.7.6.tar.gz&lt;br /&gt;wget http://xmlsoft.org/sources/libxslt-1.1.26.tar.gz&lt;br /&gt;wget ftp://sourceware.org/pub/libffi/libffi-3.0.8.tar.gz&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/libglade/2.6/libglade-2.6.4.tar.bz2&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xjvf /sources/dependencies/libIDL-0.8.14.tar.bz2&lt;br /&gt;cd libIDL-0.8.14&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libIDL-0.8.14&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/libxml2-2.7.6.tar.gz&lt;br /&gt;cd libxml2-2.7.6&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libxml2-2.7.6&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/libxslt-1.1.26.tar.gz&lt;br /&gt;cd libxslt-1.1.26&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libxslt-1.1.26&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/libffi-3.0.8.tar.gz&lt;br /&gt;cd libffi-3.0.8&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libffi-3.0.8&lt;br /&gt;&lt;br /&gt;tar -jxvf /sources/dependencies/libglade-2.6.4.tar.bz2&lt;br /&gt;cd libglade-2.6.4&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libglade-2.6.4&lt;/pre&gt;&lt;br /&gt;Still on the libraries front, we installed Glib, Cairo, Pango and GTK.  Some applications need GTK to be able to speak C++ so we need to install the following crossover libraries (the libsigc++ is needed for glibmm).  Note that this project has taken so long that I am now out of date with my version of glib.  I had to update it before I could install glibmm.  I also had to update gtk+2 and ATK, but not cairo or pango.  I will write up a new GTK+2 installation post to bring the installation up to date.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://cairographics.org/releases/cairomm-1.6.2.tar.gz&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/libsigc++/2.2/libsigc++-2.2.8.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/glibmm/2.24/glibmm-2.24.2.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/pangomm/2.26/pangomm-2.26.2.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/gtkmm/2.20/gtkmm-2.20.3.tar.bz2&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/dependencies/cairomm-1.6.2.tar.gz&lt;br /&gt;cd cairomm-1.6.2&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf cairomm-1.6.2&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/libsigc++-2.2.8.tar.bz2&lt;br /&gt;cd libsigc++-2.2.8&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libsigc++-2.2.8&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/glibmm-2.24.2.tar.bz2&lt;br /&gt;cd glibmm-2.24.2&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf glibmm-2.24.2&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/pangomm-2.26.2.tar.bz2&lt;br /&gt;cd pangomm-2.26.2&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pangomm-2.26.2&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/gtkmm-2.20.3.tar.bz2&lt;br /&gt;cd gtkmm-2.20.3&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gtkmm-2.20.3&lt;/pre&gt;&lt;br /&gt;The next set are modules which plug in to the Python and give it access to GTK.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/0.6/gobject-introspection-0.6.14.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/pygobject/2.21/pygobject-2.21.3.tar.bz2&lt;br /&gt;wget http://cairographics.org/releases/pycairo-1.8.8.tar.gz&lt;br /&gt;wget http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.17/pygtk-2.17.0.tar.bz2&lt;br /&gt;wget http://downloads.sourceforge.net/pyxml/PyXML-0.8.4.tar.gz&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/gtksourceview/2.10/gtksourceview-2.10.4.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/pygtksourceview/2.10/pygtksourceview-2.10.1.tar.bz2&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xjvf /sources/dependencies/gobject-introspection-0.6.14.tar.bz2&lt;br /&gt;cd gobject-introspection-0.6.14&lt;br /&gt;./configure --prefix=/usr --disable-tests &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gobject-introspection-0.6.14&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/pygobject-2.21.3.tar.bz2&lt;br /&gt;cd pygobject-2.21.3&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pygobject-2.21.3&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/pycairo-1.8.8.tar.gz&lt;br /&gt;cd pycairo-1.8.8&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pycairo-1.8.8&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/pygtk-2.17.0.tar.bz2&lt;br /&gt;cd pygtk-2.17.0&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pygtk-2.17.0&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/PyXML-0.8.4.tar.gz&lt;br /&gt;cd PyXML-0.8.4&lt;br /&gt;python setup.py build&lt;br /&gt;python setup.py install &amp;amp;&amp;amp;&lt;br /&gt;install -v -m644 doc/man/xmlproc_*.1 /usr/share/man/man1 &amp;amp;&amp;amp;&lt;br /&gt;install -v -m755 -d /usr/share/doc/PyXML-0.8.4 &amp;amp;&amp;amp;&lt;br /&gt;cp -v -R doc demo test /usr/share/doc/PyXML-0.8.4 &amp;amp;&amp;amp;&lt;br /&gt;install -v -m644 README* /usr/share/doc/PyXML-0.8.4&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf PyXML-0.8.4&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/gtksourceview-2.10.4.tar.bz2&lt;br /&gt;cd gtksourceview-2.10.4&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gtksourceview-2.10.4&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/pygtksourceview-2.10.1.tar.bz2&lt;br /&gt;cd pygtksourceview-2.10.1&lt;br /&gt;./configure --prefix=/usr --disable-docs &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pygtksourceview-2.10.1&lt;/pre&gt;&lt;br /&gt;Sticking with the previous theme, we also need to install some modules for Perl:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Archive-Zip-1.20.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Base-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Raw-Bzip2-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Bzip2-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Raw-Zlib-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Zlib-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Zlib-2.005.tar.gz&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/dependencies/IO-Compress-Base-2.005.tar.gz&lt;br /&gt;cd  IO-Compress-Base-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  IO-Compress-Base-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/Compress-Raw-Bzip2-2.005.tar.gz&lt;br /&gt;cd  Compress-Raw-Bzip2-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  Compress-Raw-Bzip2-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/IO-Compress-Bzip2-2.005.tar.gz&lt;br /&gt;cd  IO-Compress-Bzip2-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  IO-Compress-Bzip2-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/Compress-Raw-Zlib-2.005.tar.gz&lt;br /&gt;cd  Compress-Raw-Zlib-2.005&lt;br /&gt;sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|" -e "s|INCLUDE\s*= ./zlib-src|INCLUDE    = /usr/include|" -e "s|LIB\s*= ./zlib-src|LIB        = /usr/lib|" config.in&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  Compress-Raw-Zlib-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/IO-Compress-Zlib-2.005.tar.gz&lt;br /&gt;cd  IO-Compress-Zlib-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  IO-Compress-Zlib-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/Compress-Zlib-2.005.tar.gz&lt;br /&gt;cd  Compress-Zlib-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  Compress-Zlib-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/Archive-Zip-1.20.tar.gz&lt;br /&gt;cd  Archive-Zip-1.20&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rf  Archive-Zip-1.20&lt;/pre&gt;&lt;br /&gt;Now we need some applications which are regularly relied on:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget ftp://ftp.gnu.org/gnu/which/which-2.20.tar.gz&lt;br /&gt;wget http://curl.haxx.se/download/curl-7.20.0.tar.bz2&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/dependencies/which-2.20.tar.gz&lt;br /&gt;cd which-2.20&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf which-2.20&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/curl-7.20.0.tar.bz2&lt;br /&gt;cd curl-7.20.0&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;find docs -name "Makefile*" -o -name "*.1" -o -name "*.3" | xargs rm&lt;br /&gt;install -v -d -m755 /usr/share/doc/curl-7.20.0&lt;br /&gt;cp -v -R docs/* /usr/share/doc/curl-7.20.0&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf curl-7.20.0&lt;/pre&gt;&lt;br /&gt;And some C++ stuff which I am a little in the dark about.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://downloads.sourceforge.net/boost/boost-jam-3.1.17.tgz&lt;br /&gt;wget http://downloads.sourceforge.net/boost/boost_1_37_0.tar.bz2&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/dependencies/boost-jam-3.1.17.tgz&lt;br /&gt;cd boost-jam-3.1.17&lt;br /&gt;./build.sh&lt;br /&gt;cd bin.linux* &amp;amp;&amp;amp;&lt;br /&gt;cp -v bjam /usr/bin&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf boost-jam-3.1.17&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/boost_1_37_0.tar.bz2&lt;br /&gt;cd boost_1_37_0&lt;br /&gt;./configure --prefix=/usr --with-toolset=gcc --with-bjam=/usr/bin/bjam &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install &amp;amp;&amp;amp;&lt;br /&gt;ln -sfnv boost-1_37/boost /usr/include/boost&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf boost_1_37_0&lt;/pre&gt;&lt;br /&gt;Some security libraries (and a stand alone SQLite database to support them:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.8.6/src/nspr-4.8.6.tar.gz&lt;br /&gt;wget http://www.linuxfromscratch.org/patches/blfs/svn/nspr-4.8.6-pkgconfig-1.patch&lt;br /&gt;wget http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_12_4_RTM/src/nss-3.12.4.tar.gz&lt;br /&gt;wget http://svn.cross-lfs.org/svn/repos/patches/nss/nss-3.12.4-fixes-1.patch&lt;br /&gt;wget http://cross-lfs.org/~jciccone/nss-3.12-r5-config.in&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/nspr-4.8.6.tar.gz&lt;br /&gt;cd nspr-4.8.6&lt;br /&gt;patch -Np1 -i /sources/dependencies/nspr-4.8.6-pkgconfig-1.patch &amp;amp;&amp;amp;&lt;br /&gt;cd mozilla/nsprpub &amp;amp;&amp;amp;&lt;br /&gt;./configure --prefix=/usr --with-mozilla --with-pthreads &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install &amp;amp;&amp;amp;&lt;br /&gt;cp -v -LR dist/include/nspr /usr/include &amp;amp;&amp;amp;&lt;br /&gt;rm -v -f /usr/bin/{prerr.properties,compile-et.pl}&lt;br /&gt;cd ../../..&lt;br /&gt;rm -rvf nspr-4.8.6&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/nss-3.12.4.tar.gz&lt;br /&gt;cd nss-3.12.4&lt;br /&gt;patch -Np0 -i /sources/dependencies/nss-3.12.4-fixes-1.patch &amp;amp;&amp;amp;&lt;br /&gt;sed -i 's@\$(MKSHLIB) -o@\$(MKSHLIB) \$(LDFLAGS) -o@g' mozilla/security/coreconf/rules.mk &amp;amp;&amp;amp;&lt;br /&gt;for dir in mozilla/security/{coreconf,dbm,nss}; do&lt;br /&gt;  make -C $dir  BUILD_OPT=1 PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 NSPR_INCLUDE_DIR=$(pkg-config --variable=includedir nspr) NSPR_LIB_DIR=$(pkg-config --variable=libdir nspr) FREEBL_NO_DEPEND=1 || break&lt;br /&gt;done&lt;br /&gt;for file in libsoftokn3.so libfreebl3.so libnss3.so libnssutil3.so libssl3.so libsmime3.so libnssckbi.so libnssdbm3.so; do&lt;br /&gt;  install -m755 mozilla/dist/*.OBJ/lib/${file} /usr/lib&lt;br /&gt;done&lt;br /&gt;for file in libcrmf.a libnssb.a libnssckfw.a; do&lt;br /&gt;  install -m644 mozilla/dist/*.OBJ/lib/${file} /usr/lib&lt;br /&gt;done&lt;br /&gt;for file in certutil cmsutil crlutil modutil pk12util signtool signver ssltap; do&lt;br /&gt;  install -m755 mozilla/dist/*.OBJ/bin/${file} /usr/bin&lt;br /&gt;done&lt;br /&gt;install -m755 -d /usr/include/nss3&lt;br /&gt;install -m644 mozilla/dist/public/nss/*.h /usr/include/nss3 &amp;amp;&amp;amp;&lt;br /&gt;ln -sfv nss3 /usr/include/nss&lt;br /&gt;cat &amp;gt; /usr/lib/pkgconfig/nss.pc &amp;lt;&amp;lt; "EOF"&lt;br /&gt;prefix=/usr&lt;br /&gt;exec_prefix=/usr/bin&lt;br /&gt;libdir=/usr/lib&lt;br /&gt;includedir=/usr/include/nss3&lt;br /&gt;&lt;br /&gt;Name: NSS&lt;br /&gt;Description: Network Security Services&lt;br /&gt;Version: 3.12.4&lt;br /&gt;Requires: sqlite3 nspr &amp;gt;= 4.8&lt;br /&gt;Libs: -L${libdir} -lssl3 -lsmime3 -lnss3 -lnssutil3&lt;br /&gt;Cflags: -I${includedir}&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;chmod 644 /usr/lib/pkgconfig/nss.pc&lt;br /&gt;ln -sfv nss.pc /usr/lib/pkgconfig/mozilla-nss.pc&lt;br /&gt;&lt;br /&gt;install -v -m755 /sources/dependencies/nss-3.12-r5-config.in /usr/bin/nss-config &amp;amp;&amp;amp;&lt;br /&gt;sed -i -e "s/@MOD_MAJOR_VERSION@/3/" -e "s/@MOD_MINOR_VERSION@/12/" -e "s/@MOD_PATCH_VERSION@/3/" -e "s/@prefix@/\/usr/" /usr/bin/nss-config&lt;br /&gt;&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf nss-3.12.4&lt;/pre&gt;&lt;br /&gt;Lastly I am going to install some Java software including, stunningly, Java.  Download the Java source from this &lt;a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u21-oth-JPR@CDS-CDS_Developer"&gt;link&lt;/a&gt; into the /sources/extras folder.  Then run these commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /dev/shm&lt;br /&gt;chmod +x /sources/extras/jdk-6u21-linux-i586.bin&lt;br /&gt;/sources/extras/jdk-6u21-linux-i586.bin&lt;br /&gt;cd jdk1.6.0_21&lt;br /&gt;install -v -m755 -d /opt/jdk-6u21&lt;br /&gt;mv -v * /opt/jdk-6u21&lt;br /&gt;chown -v -R root:root /opt/jdk-6u21&lt;br /&gt;ln -v -sf xawt/libmawt.so /opt/jdk-6u21/jre/lib/i386/&lt;br /&gt;cd ..&lt;br /&gt;sed -i 's@XINERAMA@FAKEEXTN@g' /opt/jdk-6u21/jre/lib/i386/xawt/libmawt.so&lt;br /&gt;ln -v -nsf jdk-6u21 /opt/jdk&lt;br /&gt;&lt;br /&gt;cat &gt;&gt; /etc/profile.d/30-jdk.sh &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/profile.d/30-jdk.sh&lt;br /&gt;&lt;br /&gt;# Set JAVA_HOME directory&lt;br /&gt;JAVA_HOME=/opt/jdk&lt;br /&gt;&lt;br /&gt;# Adjust PATH&lt;br /&gt;pathappend ${JAVA_HOME}/bin PATH&lt;br /&gt;&lt;br /&gt;# Auto Java CLASSPATH&lt;br /&gt;# Copy jar files to, or create symlinks in this directory&lt;br /&gt;AUTO_CLASSPATH_DIR=/usr/lib/classpath&lt;br /&gt;pathprepend . CLASSPATH&lt;br /&gt;for dir in `find ${AUTO_CLASSPATH_DIR} -type d 2&gt;/dev/null`; do&lt;br /&gt;pathappend $dir CLASSPATH&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;export JAVA_HOME CLASSPATH&lt;br /&gt;unset AUTO_CLASSPATH_DIR&lt;br /&gt;unset dir&lt;br /&gt;&lt;br /&gt;# End /etc/profile.d/30-jdk.sh&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;source /etc/profile&lt;/pre&gt;&lt;br /&gt;JUnit is not, as you may be forgiven for assuming, a boy band.  It is, instead, a small Java application that allows various tests to be run on other Java applications, such as Apache Ant which is a Java based alternative to [make] and OpenOffice.org, amongst others, is going to use it to compile.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://downloads.sourceforge.net/junit/junit4.8.1.zip&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/a/apache-ant-1.8.1-src.tar.bz2&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;unzip /sources/dependencies/junit4.8.1.zip&lt;br /&gt;cd junit4.8.1&lt;br /&gt;install -v -m755 -d /usr/share/{,doc/}junit-4.8.1 &amp;&amp;&lt;br /&gt;chown -R root:root . &amp;&amp;&lt;br /&gt;cp -v -R junit* org  /usr/share/junit-4.8.1 &amp;&amp;&lt;br /&gt;cp -v -R *.html *doc /usr/share/doc/junit-4.8.1&lt;br /&gt;export CLASSPATH=$CLASSPATH:/usr/share/junit-4.8.1/junit-4.8.1.jar:/usr/share/junit-4.8.1&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf junit4.8.1&lt;br /&gt;&lt;br /&gt;tar -jxvf /sources/dependencies/apache-ant-1.8.1-src.tar.bz2&lt;br /&gt;cd apache-ant-1.8.1&lt;br /&gt;sed -i 's|${dist.dir}/etc|/etc/ant|'        build.xml &amp;&amp;&lt;br /&gt;sed -i 's|/etc/ant.conf|/etc/ant/ant.conf|' src/script/ant &amp;&amp;&lt;br /&gt;cp -v /usr/share/junit-4.8.1/junit-4.8.1.jar lib/optional/junit.jar&lt;br /&gt;./build.sh -Ddist.dir=/opt/ant-1.8.1 dist &amp;&amp;&lt;br /&gt;ln -v -sf /etc/ant /opt/ant-1.8.1/etc &amp;&amp;&lt;br /&gt;ln -v -sf ant-1.8.1 /opt/ant&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf apache-ant-1.8.1&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8692700186625071987?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8692700186625071987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/lfs-popular-dependencies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8692700186625071987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8692700186625071987'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/lfs-popular-dependencies.html' title='LFS - Popular Dependencies'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-6805404694198541273</id><published>2010-12-06T11:59:00.013Z</published><updated>2010-12-06T11:59:00.478Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>Updated BLFS Packages - GTK</title><content type='html'>The reason for this update is two fold.  Firstly I have nearly finished a stand alone post incorporating all the libraries, languages and programs that I found the applications I wanted to install (Firefox, OpenOffice et al) had as dependencies.  If these are all installed in a one-er it makes it easier to go on and install the applications AND it makes it easier to update one post when there are version changes.  Secondly, so much time had passed between my original post on GTK that that version was out of date.  So, I need to bring GTK up to date.  I will just be updating the All In One post, all the explanations set out in full in the main post still apply, but do not need to be rehearsed here.&lt;br /&gt;&lt;br /&gt;So, the current installation idea is: Configuration, Toolchain, Actual Build, Hardware, Xorg, GTK, Shared Prerequisites, Desktop, and finally applications.  Here is the new GTK.  I had to go beyond BLFS and upgrade Glib and GTK+2 because they just did not work.  In addition, Firefox in particular wanted the latest version of Cairo available, so I had to upgrade it, which meant that the Pixman version installed with Xorg was no longer good enough, so that needed updated as well.  The latest version of GTK+2 wanted an updated pixbuf package, which I think used to be incorporated in GTK+2.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir /sources/desktop&lt;br /&gt;cd /sources/desktop&lt;br /&gt;wget http://www.ijg.org/files/jpegsrc.v7.tar.gz&lt;br /&gt;wget http://download.osgeo.org/libtiff/tiff-3.9.4.tar.gz&lt;br /&gt;wget http://downloads.sourceforge.net/pcre/pcre-8.10.tar.bz2&lt;br /&gt;wget http://cairographics.org/releases/pixman-0.21.2.tar.gz&lt;br /&gt;wget http://cairographics.org/releases/cairo-1.10.0.tar.gz&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/glib/2.27/glib-2.27.3.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/pango/1.28/pango-1.28.1.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/atk/1.30/atk-1.30.0.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.22/gdk-pixbuf-2.22.1.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/gtk+/2.22/gtk+-2.22.1.tar.bz2&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/desktop/jpegsrc.v7.tar.gz&lt;br /&gt;cd jpeg-7&lt;br /&gt;./configure --prefix=/usr --enable-static --enable-shared&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rf jpeg-7&lt;br /&gt;ldconfig&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/desktop/tiff-3.9.4.tar.gz&lt;br /&gt;cd tiff-3.9.4&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf tiff-3.9.4&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/desktop/pcre-8.10.tar.bz2&lt;br /&gt;cd pcre-8.10&lt;br /&gt;./configure --prefix=/usr --docdir=/usr/share/doc/pcre-8.10 --enable-utf8 --enable-unicode-properties --enable-pcregrep-libz --enable-pcregrep-libbz2&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;mv -v /usr/lib/libpcre.so.* /lib/&lt;br /&gt;ln -v -sf ../../lib/libpcre.so.0 /usr/lib/libpcre.so&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pcre-8.10&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/desktop/pixman-0.21.2.tar.gz&lt;br /&gt;cd pixman-0.21.2&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pixman-0.21.2&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/desktop/cairo-1.10.0.tar.gz&lt;br /&gt;cd cairo-1.10.0&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf cairo-1.10.0&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/desktop/glib-2.27.3.tar.bz2&lt;br /&gt;cd glib-2.27.3&lt;br /&gt;./configure --prefix=/usr --with-pcre=system&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make $CORES_TO_USE install&lt;br /&gt;cat &amp;gt; /etc/profile.d/glib2-locale.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# Use the current locale charset for filenames&lt;br /&gt;# in applications using GLib&lt;br /&gt;export G_FILENAME_ENCODING=@locale&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf glib-2.27.3&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/desktop/pango-1.28.1.tar.bz2&lt;br /&gt;cd pango-1.28.1&lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pango-1.28.1&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/desktop/atk-1.30.0.tar.bz2&lt;br /&gt;cd atk-1.30.0&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf atk-1.30.0&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/desktop/gdk-pixbuf-2.22.1.tar.bz2&lt;br /&gt;cd gdk-pixbuf-2.22.1&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gdk-pixbuf-2.22.1&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/desktop/gtk+-2.22.1.tar.bz2&lt;br /&gt;cd gtk+-2.22.1&lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc &amp;&amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install &amp;&amp;&lt;br /&gt;install -v -m755 -d /usr/share/doc/gtk+-2.22.1/{faq,tutorial} &amp;&amp;&lt;br /&gt;cp -v -R docs/faq/html/* /usr/share/doc/gtk+-2.22.1/faq &amp;&amp;&lt;br /&gt;cp -v -R docs/tutorial/html/* /usr/share/doc/gtk+-2.22.1/tutorial &amp;&amp;&lt;br /&gt;install -v -m644 docs/*.txt /usr/share/doc/gtk+-2.22.1&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gtk+-2.22.1&lt;/pre&gt;&lt;br /&gt;Version 2.22 of gtk+2 has problems with icons.  In particular you need to install some icons to fill in some blanks.  The easiest way to sort this is to install the gnome icon theme.  We first of all need a program to make the theme names backwards compatible.  Don't really know what this is about, but it also needs another XML::Type of Thing.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/dependencies&lt;br /&gt;wget http://cpan.org/authors/id/G/GR/GRANTM/XML-Simple-2.18.tar.gz&lt;br /&gt;wget http://tango.freedesktop.org/releases/icon-naming-utils-0.8.90.tar.bz2&lt;br /&gt;wget http://ftp.gnome.org/pub/gnome/sources/gnome-icon-theme/2.30/gnome-icon-theme-2.30.3.tar.bz2&lt;br /&gt;&lt;br /&gt;cd /dev/shm&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/dependencies/XML-Simple-2.18.tar.gz&lt;br /&gt;cd XML-Simple-2.18&lt;br /&gt;perl Makefile.PL&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf XML-Simple-2.18&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/icon-naming-utils-0.8.90.tar.bz2&lt;br /&gt;cd icon-naming-utils-0.8.90&lt;br /&gt;./configure --prefix=/usr --libexecdir=/usr/lib/icon-naming-utils &amp;&amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf icon-naming-utils-0.8.90&lt;br /&gt;&lt;br /&gt;tar -xjvf /sources/dependencies/gnome-icon-theme-2.30.3.tar.bz2&lt;br /&gt;cd gnome-icon-theme-2.30.3&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gnome-icon-theme-2.30.3&lt;/pre&gt;&lt;br /&gt;You then need to create a configuration file for gtk to point it to the new icons we just installed.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt; ~/.gtkrc-2.0 &amp;lt;&amp;lt; "EOF"&lt;br /&gt;gtk-icon-theme-name="gnome"&lt;br /&gt;EOF&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-6805404694198541273?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/6805404694198541273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/updated-blfs-packages-gtk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6805404694198541273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6805404694198541273'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/updated-blfs-packages-gtk.html' title='Updated BLFS Packages - GTK'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-5080284975262609297</id><published>2010-12-03T11:59:00.012Z</published><updated>2010-12-03T11:59:00.304Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='openoffice.org'/><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LFS - OpenOffice.org</title><content type='html'>&lt;pre class="postCode"&gt;mkdir /sources/ooo&lt;br /&gt;cd /sources/ooo&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/a/apache-ant-1.8.0-src.tar.bz2&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Archive-Zip-1.20.tar.gz&lt;br /&gt;wget http://downloads.sourceforge.net/junit/junit4.8.1.zip&lt;br /&gt;wget http://ftp.osuosl.org/pub/openoffice/stable/3.2.1/OOo_3.2.1_src_core.tar.bz2&lt;br /&gt;wget http://ftp.osuosl.org/pub/openoffice/stable/3.2.1/OOo_3.2.1_src_system.tar.bz2&lt;br /&gt;wget http://www.linuxfromscratch.org/patches/blfs/svn/OOo_3.2.1-build_with_db5-1.patch&lt;br /&gt;wget ftp://ftp.mozilla.org/pub/mozilla.org/seamonkey/releases/1.1.14/seamonkey-1.1.14.source.tar.bz2&lt;br /&gt;wget ftp://ftp.osuosl.org/pub/openoffice/stable/3.2.1/OOo_3.2.1_src_l10n.tar.bz2&lt;br /&gt;wget ftp://ftp.osuosl.org/pub/openoffice/stable/3.2.1/OOo_3.2.1_src_extensions.tar.bz2&lt;/pre&gt;&lt;br /&gt;JUnit is not, as you may be forgiven for assuming, a boy band.  It is, instead, a small Java application that allows various tests to be run on other Java applications (such as the one we are about to install).&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;unzip /sources/ooo/junit4.8.1.zip&lt;br /&gt;cd junit4.8.1&lt;br /&gt;install -v -m755 -d /usr/share/{,doc/}junit-4.8.1 &amp;&amp;&lt;br /&gt;chown -R root:root . &amp;&amp;&lt;br /&gt;cp -v -R junit* org  /usr/share/junit-4.8.1 &amp;&amp;&lt;br /&gt;cp -v -R *.html *doc /usr/share/doc/junit-4.8.1&lt;br /&gt;export CLASSPATH=$CLASSPATH:/usr/share/junit-4.8.1/junit-4.8.1.jar:/usr/share/junit-4.8.1&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf junit4.8.1&lt;/pre&gt;&lt;br /&gt;Apache Ant is a Java based alternative to [make] and OpenOffice.org is going to use it to compile.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;tar -jxvf /sources/ooo/apache-ant-1.8.0-src.tar.bz2&lt;br /&gt;cd apache-ant-1.8.0&lt;br /&gt;sed -i 's|${dist.dir}/etc|/etc/ant|'        build.xml &amp;&amp;&lt;br /&gt;sed -i 's|/etc/ant.conf|/etc/ant/ant.conf|' src/script/ant &amp;&amp;&lt;br /&gt;cp -v /usr/share/junit-4.8.1/junit-4.8.1.jar lib/optional/junit.jar&lt;br /&gt;./build.sh -Ddist.dir=/opt/ant-1.8.0 dist &amp;&amp;&lt;br /&gt;ln -v -sf /etc/ant /opt/ant-1.8.0/etc &amp;&amp;&lt;br /&gt;ln -v -sf ant-1.8.0 /opt/ant&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf apache-ant-1.8.0&lt;/pre&gt;&lt;br /&gt;Next we come to one of my favourite ways BLFS has of fucking me off.  If you look at the prerequisites for OpenOffice.org 3.2.1 in BLFS &lt;a href="http://www.linuxfromscratch.org/blfs/view/svn/xsoft/openoffice.html"&gt;here&lt;/a&gt; you see Apache Ant, (good just installed that), GTK+2 (installed that ages ago), the Perl module XML::Parser (installed for Xorg), another one called Archive::Zip (right, need that), which (installed it to get lspci working with PowerTop), Zip and Unzip (both installed AGES ago).&lt;br /&gt;&lt;br /&gt;Looks easy dunnit?  Only one tiny Perl Module to install.  Ah.  Welcome to the wonders of Perl Module dependencies.  Archive::Zip needs Compress::Zlib, which in turn needs ... ohforfuckssake.  Just have a look at this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/ooo&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Base-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Raw-Bzip2-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Bzip2-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Raw-Zlib-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Zlib-2.005.tar.gz&lt;br /&gt;wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Zlib-2.005.tar.gz&lt;/pre&gt;&lt;br /&gt;Incidentally I am using the Server Beach mirror for these files, because I have had problems in the past trying to find them.  They are pretty tiny, so hopefully that's OK.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;tar -xzvf /sources/ooo/IO-Compress-Base-2.005.tar.gz&lt;br /&gt;cd  IO-Compress-Base-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  IO-Compress-Base-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/ooo/Compress-Raw-Bzip2-2.005.tar.gz&lt;br /&gt;cd  Compress-Raw-Bzip2-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  Compress-Raw-Bzip2-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/ooo/IO-Compress-Bzip2-2.005.tar.gz&lt;br /&gt;cd  IO-Compress-Bzip2-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  IO-Compress-Bzip2-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/ooo/Compress-Raw-Zlib-2.005.tar.gz&lt;br /&gt;cd  Compress-Raw-Zlib-2.005&lt;br /&gt;sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|" -e "s|INCLUDE\s*= ./zlib-src|INCLUDE    = /usr/include|" -e "s|LIB\s*= ./zlib-src|LIB        = /usr/lib|" config.in&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  Compress-Raw-Zlib-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/ooo/IO-Compress-Zlib-2.005.tar.gz&lt;br /&gt;cd  IO-Compress-Zlib-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  IO-Compress-Zlib-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/ooo/Compress-Zlib-2.005.tar.gz&lt;br /&gt;cd  Compress-Zlib-2.005&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  Compress-Zlib-2.005&lt;br /&gt;&lt;br /&gt;tar -xzvf /sources/ooo/Archive-Zip-1.20.tar.gz&lt;br /&gt;cd  Archive-Zip-1.20&lt;br /&gt;perl Makefile.PL &amp;&amp;&lt;br /&gt;make &amp;&amp;&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rf  Archive-Zip-1.20&lt;/pre&gt;&lt;br /&gt;Buggeration, we also need gperf:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://ftp.gnu.org/gnu/gperf/gperf-3.0.4.tar.gz&lt;br /&gt;tar -xzvf gperf-3.0.4.tar.gz&lt;br /&gt;cd gperf-3.0.4&lt;br /&gt;./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.0.4 &amp;amp;&amp;amp;&lt;br /&gt;make&lt;br /&gt;make install &amp;amp;&amp;amp;&lt;br /&gt;install -m644 -v doc/gperf.{dvi,ps,pdf,txt} /usr/share/doc/gperf-3.0.4 &amp;amp;&amp;amp;&lt;br /&gt;pushd /usr/share/info &amp;amp;&amp;amp;&lt;br /&gt;rm -v dir &amp;amp;&amp;amp;&lt;br /&gt;for FILENAME in *; do&lt;br /&gt;    install-info $FILENAME dir 2&amp;gt;/dev/null&lt;br /&gt;done &amp;amp;&amp;amp;&lt;br /&gt;popd&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gperf-3.0.4&lt;/pre&gt;&lt;br /&gt;And now for OpenOffice.org which you just cannot install from a ramdisk on a 32bit machine.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/ooo&lt;br /&gt;tar -xjvf OOo_3.2.1_src_system.tar.bz2&lt;br /&gt;tar -xjvf OOo_3.2.1_src_core.tar.bz2&lt;br /&gt;tar -xjvf OOo_3.2.1_src_extensions.tar.bz2&lt;br /&gt;tar -xjvf OOo_3.2.1_src_l10n.tar.bz2&lt;br /&gt;cd OOO320_m19&lt;br /&gt;cp ../seamonkey-1.1.14.source.tar.bz2 moz/download/&lt;/pre&gt;&lt;br /&gt;Don't follow the instructions in BLFS, it gets the seamonkey filename wrong.  Apparently OOo shits itself if you have certain environment variables set, so unset them and fire on a patch.  In a rapidly developing theme the patch file name is also wrong on BLFS.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;umask 0022 &amp;&amp;&lt;br /&gt;unset LANG LC_ALL&lt;br /&gt;patch -Np1 -i ../OOo_3.2.1-build_with_db5-1.patch&lt;br /&gt;autoreconf&lt;/pre&gt;&lt;br /&gt;Now, set the configuration.  I originally tried to set this with:&lt;br /&gt;&lt;pre class="postCode"&gt;--with-system-libxml           \&lt;/pre&gt;but the system complained that:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;to prevent incompatibilities between internal libxslt and libxml2, the office will be build with system-libxslt&lt;br /&gt;checking which libxslt to use... external&lt;br /&gt;checking for LIBXSLT... configure: error: Package requirements (libxslt) were not met:&lt;br /&gt;&lt;br /&gt;No package 'libxslt' found&lt;/pre&gt;&lt;br /&gt;So I just did not tell OOO that I already had libxml installed to force it to use the version that it ships with in the source package.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;PKG_CONFIG=/usr/bin/pkg-config ./configure \&lt;br /&gt;--enable-graphite              \&lt;br /&gt;--disable-lockdown             \&lt;br /&gt;--disable-binfilter            \&lt;br /&gt;--disable-fontooo              \&lt;br /&gt;--disable-cups                 \&lt;br /&gt;--enable-fontconfig            \&lt;br /&gt;--disable-symbols              \&lt;br /&gt;--disable-gnome-vfs            \&lt;br /&gt;--disable-systray              \&lt;br /&gt;--disable-odk                  \&lt;br /&gt;--disable-qadevooo             \&lt;br /&gt;--enable-cairo                 \&lt;br /&gt;--disable-dbus                 \&lt;br /&gt;--disable-gconf                \&lt;br /&gt;--enable-gio                   \&lt;br /&gt;--disable-pam                  \&lt;br /&gt;--without-afms                 \&lt;br /&gt;--without-fonts                \&lt;br /&gt;--without-ppds                 \&lt;br /&gt;--without-pam                  \&lt;br /&gt;--with-system-stdlibs          \&lt;br /&gt;--with-system-cairo            \&lt;br /&gt;--with-system-expat            \&lt;br /&gt;--with-system-zlib             \&lt;br /&gt;--with-system-jpeg             \&lt;br /&gt;--with-system-openssl          \&lt;br /&gt;--with-system-python           \&lt;br /&gt;--with-system-curl             \&lt;br /&gt;--with-jdk-home=/opt/jdk       \&lt;br /&gt;--with-java                    \&lt;br /&gt;--with-ant-home=/opt/ant       \&lt;br /&gt;--with-perl-home=/usr          \&lt;br /&gt;--with-x                       \&lt;br /&gt;--with-lang="en-GB"            \&lt;br /&gt;--with-dict="en-GB"            \&lt;br /&gt;--with-package-format=native   \&lt;br /&gt;--with-vendor="Your name here"     \&lt;br /&gt;--with-use-shell=bash&lt;/pre&gt;&lt;br /&gt;Now compile this all with:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;source LinuxX86Env.Set.sh &amp;&amp;&lt;br /&gt;./bootstrap &amp;&amp;&lt;br /&gt;make $CORES_TO_USE&lt;/pre&gt;&lt;br /&gt;Oh, joy un-fucking-bound.  I got this error message (buried in a pile of crap by the way):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;/shlibsign: No such file or directory&lt;/pre&gt;&lt;br /&gt;I did a google search for that and it turned up &lt;a href="http://wiki.services.openoffice.org/wiki/Mozilla2Seamonkey/Problem_Log/Windows"&gt;this&lt;/a&gt; post (albeit for someone compiling OOo on Windows).  Seems there is something wrong in the Seamonkey Makefile which means it can't define its source directory properly.  I did a bit more searching and found &lt;a href=" http://www.openoffice.org/servlets/ReadMsg?list=allsvn&amp;msgNo=5712"&gt;this&lt;/a&gt; solution.&lt;br /&gt;&lt;br /&gt;Now that looks like the contents of a patch file to me.  The important lines for this problem are the following:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;-SRCDIR = $(call core_abspath,.)&lt;br /&gt;...&lt;br /&gt; +ifeq ($(OS_TARGET), Linux)&lt;br /&gt; + SRCDIR = .&lt;/pre&gt;&lt;br /&gt;Translated into english that means [-] remove the troublesome [SRCDIR] line, and [+] replace it [if] your [TARGET] [OS] [eq]uals [Linux] with [SRCDIR = .].  The patch is for a different version of the Seamonkey source though, and I am not sure how to download or apply it from where I found it even if it was for the version I have.  So, best option is to just do the proposed changes by hand.  You can do this in [nano] by running the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;nano /sources/ooo/OOO320_m19/nss/unxlngi6.pro/misc/build/mozilla/security/nss/cmd/shlibsign/Makefile&lt;/pre&gt;&lt;br /&gt;You then find [CTRL + W] the core_abspath line and turn it into [SRCDIR = .].  Save the file, and rerun the [make] command. But, of course, that didn't fucking work either.  It was still complaining that it couldn't find some file.  So I went to a new command prompt and ran the [find] command to get the absolute path to the file.  I then re-ran the [nano] command to edit the Makefile and I just pasted in the full absolute path (minus the /[filename] bit at the end).  And then it correctly built in:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;real    930m58.090s&lt;br /&gt;user    806m18.691s&lt;br /&gt;sys     57m40.225s&lt;/pre&gt;&lt;br /&gt;930 MINUTES!  And, it ran for a good 30-40 minutes before it crashed the first time due to the stupid path problem.  So that's 960 minutes at least - a whole 16 HOURS to compile this!  The sources folder (with all the working directories for the build) ended up taking up 8.8Gb of space.  So no chance to compile on a ramdrive using a 32bit machine then.&lt;br /&gt;&lt;br /&gt;Hope I got the settings right.  Time to install it.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;pushd instsetoo_native/unxlng?6.pro/OpenOffice/native/install/en-US/linux-2.6-*/buildroot/opt &amp;&amp;&lt;br /&gt;cp -r -v openoffice.org3 /opt/openoffice-3.2.1 &amp;&amp;&lt;br /&gt;cp -r -v openoffice.org/* /opt/openoffice-3.2.1 &amp;&amp;&lt;br /&gt;ln -sf basis3.2 /opt/openoffice-3.2.1/basis-link &amp;&amp;&lt;br /&gt;popd&lt;/pre&gt;&lt;br /&gt;Ok, those commands look a bit odd.  The first one [pushd] basically says "Remember where we started and move to the following directory"  The one at the end, popd, says, "OK, finished now - go back to where we started.  The [&amp;&amp;} at the end of each line tells the system to run all of the commands or none of the commands.  So if one fails, or there is a mistake, it doesn't run all of them.  The other commands are the usual copy and link commands we have seen before.  Next up is a brief linking loop:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for appl in sbase scalc sdraw simpress smath soffice spadmin swriter&lt;br /&gt;do&lt;br /&gt;    ln -v -sf /opt/openoffice-3.2.1/program/$appl /usr/bin&lt;br /&gt;done&lt;/pre&gt;&lt;br /&gt;That basically gives the variable [$appl] the value [sbase] then runs the [l]i[n]k command in the next line, then changes the variable to [scalc] and runs the command again, and so on.&lt;br /&gt;&lt;br /&gt;To install some shiny icons, we run:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;pushd sysui/desktop/icons &amp;&amp;&lt;br /&gt;install -v -m755 -d /usr/share/icons/{hicolor,locolor} &amp;&amp;&lt;br /&gt;cp -r -v hicolor/* /usr/share/icons/hicolor &amp;&amp;&lt;br /&gt;cp -r -v locolor/* /usr/share/icons/locolor &amp;&amp;&lt;br /&gt;popd&lt;/pre&gt;&lt;br /&gt;That just makes a couple of directories and then populates them.  Lastly, if you happen to be using .desktop files to organise your menu systems (which may be possible with Openbox, I am not sure) then you want to install the .desktop files for OpenOffice:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;install -v -d -m755 /usr/share/applications &amp;&amp;&lt;br /&gt;pushd /opt/openoffice-3.2.1/share/xdg/ &amp;&amp;&lt;br /&gt;for appl in *.desktop&lt;br /&gt;do&lt;br /&gt;    sed -i '/Exec/d' $appl &amp;&amp;&lt;br /&gt;    echo "Exec=/usr/bin/s`echo $appl | sed 's/.desktop//'`" &gt;&gt; $appl &amp;&amp;&lt;br /&gt;    sed -i '/Icon/d' $appl &amp;&amp;&lt;br /&gt;    echo "Icon=`echo "ooo-${appl}3.2" | sed 's/\.desktop//'`" &gt;&gt; $appl&lt;br /&gt;done &amp;&amp;&lt;br /&gt;sed -i 's@bin/sprinteradmin@bin/spadmin@' printeradmin.desktop &amp;&amp;&lt;br /&gt;cp -v *.desktop /usr/share/applications &amp;&amp;&lt;br /&gt;popd&lt;/pre&gt;&lt;br /&gt;That command is an amalgam of the ones we have just run.  Firstly it creates a directory if it doesn't exist anyway.  Then it uses pushd to save the current location and to move to another directory.  In the directory it then runs a loop on every file in the new directory with a [.desktop] extension.  The loop includes (aaaargh) sed commands.  It looks like it is changing the default entries for [Exec] and [Icon] in the [.desktop] files.  Must have a good reason for doing this.  Oh!  I see, the original .desktop files had an Exec line which tried to run [openoffice.org3 -writer %U] for instance.  Sed replaces that with [/usr/bin/swriter] which is also the name of the link file we made above.  It also tweaks the Icon line, but I know not why.&lt;br /&gt;&lt;br /&gt;I do not get the final [sed] on the [printeradmin.desktop] file.  It then just copies the files to the appropriate place.  If you have installed the desktop-files-utils package (which I have not) then you can now run the following command to let it know to rebuild the menus:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;update-desktop-database&lt;/pre&gt;&lt;br /&gt;We then need to install the dictionaries and any extensions we compiled (don't remember compiling any but hey ho):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cp -v dictionaries/unxlngi6.pro/bin/dict-*.oxt sdext/unxlngi6.pro/bin/*.oxt reportbuilder/unxlngi6.pro/bin/report-builder.oxt swext/unxlngi6.pro/bin/wiki-publisher.oxt /opt/openoffice-3.2.1/share/extension/install&lt;/pre&gt;&lt;br /&gt;When I ran this, it copied all the dictionaries, but could not find any other extensions.  And we then need to install the extensions, which may need some manual input:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for ext in /opt/openoffice-3.2.1/share/extension/install/*.oxt&lt;br /&gt;do&lt;br /&gt;    /opt/openoffice-3.2.1/program/unopkg add --shared --verbose $ext&lt;br /&gt;done&lt;/pre&gt;&lt;br /&gt;This gave me LOADS of dictionaries.  I think I may have inadvertently installed ALL of them.  I will have to look back at the [with-dict] option that I used - may have been wrong.  Last step is to install a link so that you can view office documents from within Firefox:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ln -sv /opt/openoffice-3.2.1/program/libnpsoplugin.so /opt/firefox4b7/lib/firefox-4.0b7/plugins&lt;/pre&gt;&lt;br /&gt;Obviously, choose the proper path for your current firefox installation.&lt;br /&gt;&lt;br /&gt;Et, voila.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-5080284975262609297?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/5080284975262609297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/lfs-openofficeorg.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5080284975262609297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5080284975262609297'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/lfs-openofficeorg.html' title='LFS - OpenOffice.org'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-6121116201492309916</id><published>2010-12-01T14:12:00.001Z</published><updated>2010-12-01T17:01:53.637Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='liveCD'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>AMD/ATI drivers for Radeon HD 6870 on Maverick Meertcat Live CD</title><content type='html'>That's a painful bloody title for a blog post I can tell you.&lt;br /&gt;Download the installer from &lt;a href="https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/ati-driver-installer-10-11-x86.x86_64.run"&gt;here&lt;/a&gt; to your Live USB key root directory.  And make it executable:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;chmod +x ati-driver-installer-10-11-x86.x86_64.run&lt;/pre&gt;&lt;br /&gt;Then reboot into the Live CD.  Hit [CTRL+ALT+F1] and type the commands:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo /etc/init.d/gdm stop&lt;br /&gt;cd /dev/shm&lt;br /&gt;sudo /cdrom/ati-driver-installer-10-11-x86.x86_64.run&lt;/pre&gt;&lt;br /&gt;Answer yes to all the questions.  Then run:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cat &gt; /etc/X11/xorg.conf &lt;&lt; "EOF"&lt;br /&gt;Section "Files"&lt;br /&gt; ModulePath   "/usr/lib/xorg/modules"&lt;br /&gt; ModulePath   "/usr/lib/X11/modules"&lt;br /&gt;EndSection&lt;br /&gt;Section "Device"&lt;br /&gt; Identifier  "ATI radeon 6870"&lt;br /&gt; Driver      "fglrx"&lt;br /&gt;EndSection&lt;br /&gt;EOF&lt;/pre&gt;To remove the "Unsupported Hardware" logo run this useful script from the Arch Wiki:&lt;pre class="postCode"&gt;sudo cat &gt; ./remove_logo.sh &lt;&lt; "EOF"&lt;br /&gt;DRIVER=/usr/lib/xorg/modules/drivers/fglrx_drv.so&lt;br /&gt;for x in $(objdump -d $DRIVER|awk '/call/&amp;amp;&amp;amp;/EnableLogo/{print "\\x"$2"\\x"$3"\\x"$4"\\x"$5"\\x"$6}'); do&lt;br /&gt; sed -i "s/$x/\x90\x90\x90\x90\x90/g" $DRIVER&lt;br /&gt;done&lt;br /&gt;EOF&lt;br /&gt;sudo chmod +x ./remove_logo.sh&lt;br /&gt;sudo ./remove_logo.sh&lt;/pre&gt;and then just:&lt;pre class="postCode"&gt;start x&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-6121116201492309916?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/6121116201492309916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/amdati-drivers-for-radeon-hd-6870-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6121116201492309916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/6121116201492309916'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/amdati-drivers-for-radeon-hd-6870-on.html' title='AMD/ATI drivers for Radeon HD 6870 on Maverick Meertcat Live CD'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4009402051825895056</id><published>2010-12-01T13:41:00.000Z</published><updated>2010-12-01T13:41:15.720Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>Linux from Scratch - Radeon HD 6870</title><content type='html'>If one has recently purchased an AMD/ATI Radeon HD 6870, one will be pretty fucking pissed off with the lack of linux drivers for the same.  However, one can do a bodge job as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd ~&lt;br /&gt;wget https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/ati-driver-installer-10-11-x86.x86_64.run&lt;br /&gt;chmod +x ati-driver-installer-10-11-x86.x86_64.run&lt;br /&gt;cd /dev/shm&lt;br /&gt;~/ati-driver-installer-10-11-x86.x86_64.run&lt;/pre&gt;&lt;br /&gt;Choose to install the driver, not build a package, and don't bother with the expert settings.  Now, the problem is that the modules are installed to /usr/lib/xorg/modules and not the LFS default of /usr/lib/X11/modules.  I considered farting around with symbolic links to sort everything out, but it turns out that Xorg has a brighter idea.  You just add ANOTHER Modules Path to the xorg.conf that you are working with so the files section has:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;ModulePath   "/usr/lib/X11/modules"&lt;br /&gt;ModulePath   "/usr/lib/xorg/modules"&lt;/pre&gt;&lt;br /&gt;You then change the driver from 'intel' or 'vesa' or whatever, to 'fglrx':&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;Driver      "fglrx"&lt;/pre&gt;&lt;br /&gt;and bob's your proverbial mother's brother.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4009402051825895056?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4009402051825895056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/linux-from-scratch-radeon-hd-6870.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4009402051825895056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4009402051825895056'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/12/linux-from-scratch-radeon-hd-6870.html' title='Linux from Scratch - Radeon HD 6870'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4454015507284112687</id><published>2010-11-30T13:34:00.002Z</published><updated>2010-11-30T13:36:24.659Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='dd'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><title type='text'>Backing up Entire Drives with [dd]</title><content type='html'>If you want to backup a partition use, [partimage].  It is excellent, and will happily achieve the task.&lt;br /&gt;&lt;br /&gt;If, on the other hand, you want to backup the whole disk, there does not seem to me to be an OS alternative other than [dd].&lt;br /&gt;&lt;br /&gt;To backup the [i]nput [f]ile (because in linux EVERYTHING is a file) [dev]ice [sda] in chunks with a [s]ize of 1 [M]ega[b]yte, [|] piping all data to the [bzip2] program set at the highest encryption setting [-9] to [&gt;] the file [disk_image.301110.img.bz2] on the share [backup/reception] on the cifs server [readynasduo.local] from a live [ubuntu] user's account (having first browsed to the CIFS share, run this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo dd if=/dev/sda bs=1M | bzip2 -9 &gt;'/home/ubuntu/.gvfs/backup on readynasduo.local/reception/disk_image.301110.img.bz2'&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4454015507284112687?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4454015507284112687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/backing-up-entire-drives-with-dd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4454015507284112687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4454015507284112687'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/backing-up-entire-drives-with-dd.html' title='Backing up Entire Drives with [dd]'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4268520851292308037</id><published>2010-11-30T12:36:00.000Z</published><updated>2010-11-30T12:36:30.443Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='power'/><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LFS - Powertop &amp; acpi</title><content type='html'>Powertop is a system which is supposed to help you save battery life on a portable PC by identifying areas to optimise.  Powertop requires lspci (optional) which in turn wants 'which', so:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget ftp://ftp.gnu.org/gnu/which/which-2.20.tar.gz&lt;br /&gt;tar -xzvf which-2.20.tar.gz&lt;br /&gt;cd which-2.20&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf which-2.20&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://www.kernel.org/pub/software/utils/pciutils/pciutils-3.1.7.tar.bz2&lt;br /&gt;tar -xjvf pciutils-3.1.7.tar.bz2&lt;br /&gt;cd pciutils-3.1.7&lt;br /&gt;make PREFIX=/usr ZLIB=no&lt;br /&gt;make PREFIX=/usr install&lt;br /&gt;make PREFIX=/usr install-lib&lt;br /&gt;update-pciids&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pciutils-3.1.7&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://www.lesswatts.org/projects/powertop/download/powertop-1.13.tar.gz&lt;br /&gt;tar -xzvf powertop-1.13.tar.gz&lt;br /&gt;cd powertop-1.13&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf powertop-1.13.tar.gz&lt;/pre&gt;&lt;br /&gt;Just leave it running for 5+ minutes and you will get an estimate of usage.&lt;br /&gt;&lt;br /&gt;Another useful power tool is acpi for getting battery information, and you install as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://sourceforge.net/projects/acpiclient/files/acpiclient/1.5/acpi-1.5.tar.gz/download&lt;br /&gt;tar -xzvf acpi-1.5.tar.gz&lt;br /&gt;cd acpi-1.5&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf acpi-1.5&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4268520851292308037?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4268520851292308037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/lfs-powertop-acpi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4268520851292308037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4268520851292308037'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/lfs-powertop-acpi.html' title='LFS - Powertop &amp; acpi'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8917211033802303361</id><published>2010-11-26T11:59:00.013Z</published><updated>2010-11-26T11:59:00.121Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='openbox'/><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>Extra Openbox Menu Items</title><content type='html'>Some items to add to the Openbox menu:&lt;br /&gt;&lt;br /&gt;Here is an entry for Firefox 4 beta:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;&amp;lt;item label="firefox"&amp;gt;&amp;lt;action name="Execute"&amp;gt;&amp;lt;execute&amp;gt;/opt/firefox4/bin/firefox&amp;lt;/execute&amp;gt;&amp;lt;/action&amp;gt;&amp;lt;/item&amp;gt;&lt;/pre&gt;&lt;br /&gt;Here is an entry to Suspend the machine to RAM.  I cannot get this actual command to run, so I have to pop the command in a script and then run the script.  There has to be a better way of doing this.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;&amp;lt;item label="Suspend to RAM"&amp;gt;&amp;lt;action name="Execute"&amp;gt;&amp;lt;command&amp;gt;~/str.sh&amp;lt;/command&amp;gt;&amp;lt;/action&amp;gt;&amp;lt;/item&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt; ~/str.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;echo mem &amp;gt; /sys/power/state&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;The next two items would be good in the system section - Powertop for useful battery information, and top for system process information.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;&amp;lt;item label="Powertop"&amp;gt;&amp;lt;action name="Execute"&amp;gt;&amp;lt;command&amp;gt;xterm -e /usr/bin/powertop&amp;lt;/command&amp;gt;&amp;lt;/action&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;item label="Top"&amp;gt;&amp;lt;action name="Execute"&amp;gt;&amp;lt;command&amp;gt;xterm -e /usr/bin/top -i&amp;lt;/command&amp;gt;&amp;lt;/action&amp;gt;&amp;lt;/item&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8917211033802303361?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8917211033802303361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/extra-openbox-menu-items.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8917211033802303361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8917211033802303361'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/extra-openbox-menu-items.html' title='Extra Openbox Menu Items'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-3601208394085100514</id><published>2010-11-19T11:59:00.025Z</published><updated>2010-11-26T10:07:16.131Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fonts'/><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LFS - Fonts</title><content type='html'>The standard font that X comes with is, bluntly, shit.  So lets install some new fonts to brighten everything up.&lt;br /&gt;&lt;br /&gt;Firstly, setup the directory to store the downloaded files in:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir /sources/fonts&lt;br /&gt;cd /sources/fonts&lt;/pre&gt;&lt;br /&gt;Next download a bog standard, and nice looking, free font, &lt;a href="http://en.wikipedia.org/wiki/DejaVu_fonts"&gt;Dejavu&lt;/a&gt;.  The commands basically 1. make a folder in /usr/share/fonts 2. copies all ttf files into that directory 3. runs the program fc-cache to load the ttf files.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://sourceforge.net/projects/dejavu/files/dejavu/2.32/dejavu-fonts-ttf-2.32.tar.bz2/download&lt;br /&gt;tar -jxvf dejavu-fonts-ttf-2.32.tar.bz2&lt;br /&gt;cd dejavu-fonts-ttf-2.32/ttf&lt;br /&gt;install -v -d -m755 /usr/share/fonts/dejavu &amp;&amp;&lt;br /&gt;install -v -m644 *.ttf /usr/share/fonts/dejavu &amp;&amp;&lt;br /&gt;fc-cache -v /usr/share/fonts/dejavu&lt;br /&gt;cd ../../&lt;br /&gt;rm -rf dejavu-fonts-ttf-2.32&lt;/pre&gt;&lt;br /&gt;Next we are going to install some Microsoft fonts - which are freely licensed.  To do this we are going to need a bit of software to unpack the Microsoft archive:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://www.cabextract.org.uk/cabextract-1.2.tar.gz&lt;br /&gt;tar -xzvf cabextract-1.2.tar.gz&lt;br /&gt;cd cabextract-1.2&lt;br /&gt;./configure --prefix=/usr &amp;&amp;&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rf cabextract-1.2&lt;/pre&gt;&lt;br /&gt;Now we need to get the fonts:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/andale32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/arial32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/arialb32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/comic32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/courie32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/georgi32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/impact32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/times32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/trebuc32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/verdan32.exe/download&lt;br /&gt;wget http://sourceforge.net/projects/corefonts/files/the%20fonts/final/webdin32.exe/download&lt;/pre&gt;&lt;br /&gt;We then install the fonts using a bit of a script to automate the repetitive commands.  Apart from the cabextract command basically we are doing the same as the Dejavu commands above.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;for msfont in andale32 arial32 arialb32 comic32 courie32 georgi32 impact32 times32 trebuc32 verdan32 webdin32&lt;br /&gt;do&lt;br /&gt;mkdir $msfont&lt;br /&gt;cabextract $msfont.exe -d $msfont&lt;br /&gt;cd $msfont&lt;br /&gt;install -v -d -m755 /usr/share/fonts/$msfont&lt;br /&gt;install -v -m644 *.TTF /usr/share/fonts/$msfont&lt;br /&gt;install -v -m644 *.ttf /usr/share/fonts/$msfont&lt;br /&gt;fc-cache -v /usr/share/fonts/$msfont&lt;br /&gt;cd ..&lt;br /&gt;rm -rf $msfont&lt;br /&gt;done&lt;/pre&gt;&lt;br /&gt;I am not entirely sure if this last step actually does anything, but it is supposed to make a config file which anti aliases the fonts.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt; ~/.fonts.conf &amp;lt;&amp;lt; "EOF"&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&amp;gt;&lt;br /&gt;&amp;lt;fontconfig&amp;gt;&lt;br /&gt; &amp;lt;match target="font"&amp;gt;&lt;br /&gt;   &amp;lt;edit name="autohint" mode="assign"&amp;gt;&lt;br /&gt;     &amp;lt;bool&amp;gt;true&amp;lt;/bool&amp;gt;&lt;br /&gt;   &amp;lt;/edit&amp;gt;&lt;br /&gt; &amp;lt;/match&amp;gt;&lt;br /&gt;&amp;lt;/fontconfig&amp;gt;&lt;br /&gt;EOF&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-3601208394085100514?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/3601208394085100514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/lap-fonts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3601208394085100514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3601208394085100514'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/lap-fonts.html' title='LFS - Fonts'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-75744588090444886</id><published>2010-11-12T11:59:00.000Z</published><updated>2010-11-12T11:59:00.699Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='f1'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Command Line F1 Live Timing</title><content type='html'>Live Timing is pretty much essential for any self respecting F1 fan.  It lets you follow what is going on for every car, so you are not restricted to what ever the (usually braindead) director chooses to show you from time to time.&lt;br /&gt;&lt;br /&gt;Bad news.  It needs Java to work.  This is unfortunate if you want it to run on an inexpensive Netbook which struggles with Java.  Also, it crashes from time to time, and restarting a browser and reloading a Java page is not much fun.&lt;br /&gt;&lt;br /&gt;Helpfully some chap has written a command line client for live timing, and you can get it here:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;wget http://launchpad.net/live-f1/0.2/0.2.10/+download/live-f1-0.2.10.tar.gz&lt;/pre&gt;&lt;br /&gt;You install it as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;tar -xzvf live-f1-0.2.10.tar.gz&lt;br /&gt;cd live-f1_0.2.10&lt;br /&gt;./configure&lt;br /&gt;make&lt;/pre&gt;&lt;br /&gt;The software will now be available in the [./src] directory, and you can run it by typing:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;./src/live-f1&lt;/pre&gt;&lt;br /&gt;You need to set up your user/password file in [~] as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class=postCode&gt;cat &gt; ~/.f1rc &lt;&lt; "EOF"&lt;br /&gt;email YOUR_EMAIL_ADDRESS&lt;br /&gt;password YOUR_PASSWORD&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;OBVIOUSLY you change the YOUR_X bits to match your log on details from the Live Timing's website.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-75744588090444886?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/75744588090444886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/command-line-f1-live-timing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/75744588090444886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/75744588090444886'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/command-line-f1-live-timing.html' title='Command Line F1 Live Timing'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4931085133495900199</id><published>2010-11-05T11:59:00.003Z</published><updated>2010-11-05T11:59:01.210Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='liveCD'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Wireless Networking on Maverick</title><content type='html'>Once I shifted to Maverick Meercat, I found that the drivers became obstinate.  Helpfully the Broadcom folks have uploaded a couple of patches which sorts this out.  These are then, updated instructions on how to get the fucking thing to work.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /media/2G&lt;br /&gt;wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5.60.48.36.tar.gz &lt;br /&gt;wget http://www.broadcom.com/docs/linux_sta/sta_5.60.48.36_2.6.33_kernel_patch.zip&lt;br /&gt;wget http://www.broadcom.com/docs/linux_sta/sta_5.60.48.36_2.6.34_multicast_kernel_patch.zip&lt;/pre&gt;&lt;br /&gt;My USB Stick is called [2G] so Ubuntu automounts it into a directory with the same name in [/media].  The next command downloads the latest version of the hybrid driver.  I am not sure what a hybrid driver is, but if I had to guess I would say it is a driver AND firmware contained in the same package.  Incidentally, you could just use the same URL in windows and save the file to the USB Key.  You then reboot to the USB Key and run the following commands (ideally from a script):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;cp /cdrom/hybrid-portsrc-x86_32-v5.60.48.36.tar.gz .&lt;br /&gt;mkdir hybrid_wl &lt;br /&gt;cd hybrid_wl &lt;br /&gt;tar -xzvf ../hybrid-portsrc-x86_32-v5.60.48.36.tar.gz&lt;br /&gt;unzip /cdrom/sta_5.60.48.36_2.6.33_kernel_patch.zip&lt;br /&gt;patch -p0 &lt; patch&lt;br /&gt;unzip /cdrom/linux_sta/sta_5.60.48.36_2.6.34_multicast_kernel_patch.zip&lt;br /&gt;patch -p0 &lt; patch_hybrid_multicast&lt;br /&gt;make clean&lt;br /&gt;make&lt;br /&gt;sudo rmmod b43 &lt;br /&gt;sudo rmmod b44 &lt;br /&gt;sudo rmmod b43legacy&lt;br /&gt;sudo rmmod wl&lt;br /&gt;sudo rmmod ssb &lt;br /&gt;sudo rmmod ndiswrapper &lt;br /&gt;sudo rmmod lib80211&lt;br /&gt;sudo modprobe lib80211&lt;br /&gt;sudo insmod wl.ko&lt;/pre&gt;&lt;br /&gt;The [cp] commands [c]o[p]ys the file we downloaded into the current [.] directory, which is [/tmp] because we just moved into it.  The patch commands change the source code files in terms of the instructions contained in the special patch files.&lt;br /&gt;&lt;br /&gt;There are lots of [r]e[m]ove [mod]ules commands, because there are so many modules which potentially interfere with the [wl] driver.  Again, once this script has finished, the interface should be up and running.  This one will take a little longer to run because it is building the module from source code each time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4931085133495900199?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4931085133495900199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/wireless-networking-on-maverick.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4931085133495900199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4931085133495900199'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/11/wireless-networking-on-maverick.html' title='Wireless Networking on Maverick'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4918091699702248628</id><published>2010-10-29T11:59:00.002+01:00</published><updated>2010-10-29T11:59:00.360+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liveCD'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Making a Maverick Live CD</title><content type='html'>This is a simple update of my live CD &lt;a href="http://justbloodywork.blogspot.com/2010/09/building-custom-livecd-for-ubuntu.html"&gt;instructions&lt;/a&gt;, but this time updated for Maverick Meercat.  This time I am going to leave the original CD image on removable media to cut down the space taken up by this operation.&lt;br /&gt;&lt;br /&gt;First of all we are going to need some extra packages for our running system to manipulate the CD image.  To install these, run this command from a terminal window.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo aptitude install squashfs-tools genisoimage&lt;/pre&gt;&lt;br /&gt;The CD image contains one large archive file which stores all of the disk environment for the LiveCD.  The squashfs-tools handles this archive.  Basically, we unpack everything, add our extra packages, and then repack everything.  The genisoimage [gen]erates the final [iso] [image] which we put onto the USB Key in due course.&lt;br /&gt;&lt;br /&gt;Now, make a working directory in [~] home, and copy the image file into it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir ~/live&lt;br /&gt;cd ~/live&lt;/pre&gt;&lt;br /&gt;Next we are going to actually mount the CD image so we can use it as if we had burned it to a CD and inserted it.  We need to create the mount point first of all:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir mnt&lt;br /&gt;sudo mount -o loop /media/[whatever]/ubuntu-10.10-desktop-i386.iso mnt&lt;/pre&gt;&lt;br /&gt;The [whatever] will differ depending on exactly where your system mounts the USB Key you just plugged in.  The &lt;a href="http://en.wikipedia.org/wiki/Loop_device"&gt;loop&lt;/a&gt; [o]ption allows us to mount the image file as a folder.&lt;br /&gt;&lt;br /&gt;Now we need to copy all of the files off the mounted image APART from the large squashed file.  Again we want a separate folder to store these files:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir extract-cd&lt;br /&gt;rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd&lt;/pre&gt;&lt;br /&gt;Next we need to extract the big archive file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo unsquashfs mnt/casper/filesystem.squashfs&lt;/pre&gt;&lt;br /&gt;It uncompresses to a folder name we want to change by the typical linux method of [m]o[v]ing it.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo mv squashfs-root edit&lt;/pre&gt;&lt;br /&gt;We are going to be chrooting into the filesystem we just unpacked, and we want to use some of the files on our existing machine to point the way to the internet, and to give us access to our current hardware:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cp /etc/resolv.conf edit/etc/&lt;br /&gt;sudo cp /etc/hosts edit/etc/&lt;br /&gt;sudo mount --bind /dev/ edit/dev&lt;/pre&gt;&lt;br /&gt;Now we chroot in and mount some virtual filesystems:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo chroot edit&lt;br /&gt;mount -t proc none /proc&lt;br /&gt;mount -t sysfs none /sys&lt;br /&gt;mount -t devpts none /dev/pts&lt;/pre&gt;&lt;br /&gt;We also need to set some system variables and create a symbolic link for some reason or another. &lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;export HOME=/root&lt;br /&gt;export LC_ALL=C&lt;br /&gt;dbus-uuidgen &gt; /var/lib/dbus/machine-id&lt;br /&gt;dpkg-divert --local --rename --add /sbin/initctl&lt;br /&gt;ln -s /bin/true /sbin/initctl&lt;/pre&gt;&lt;br /&gt;I think the dbus command generates a code for this specific machine that some installation stuff may need.  No idea what the [initctl] stuff is all about.&lt;br /&gt;Excellent.  We are now at the point where we can start to install stuff.  First of all, and this was fucking frustrating trying to work this out, we need to enable the universe and multiverse repositories if we want to install packages from them.  We need to do this in command line:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo nano /etc/apt/sources.list&lt;/pre&gt;&lt;br /&gt;This next command adds an external repository to the list of places we can download stuff from.  It's a biggie but it basically is just a series of commands that run in sequence.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list; sudo apt-get -q update; sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring; sudo apt-get -q update&lt;/pre&gt;&lt;br /&gt;Before installing stuff, it might be a good idea to clean out some stuff we are not going to use.  First of all have a look at all the installed packages in order of size:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | less&lt;/pre&gt;&lt;br /&gt;The first on the list looks like a massive package, but what you have to understand is that this is showing you the UNCOMPRESSED sizes.  Yeah, thanks for that.  If you check on http://packages.ubuntu.com/lucid for the ubuntu-docs information, you find it is only taking up a few hundred Kb when squashed.&lt;br /&gt;So what can you remove?  Evolution is a prime candidate.  Not much use on a LiveCD.  You will be using webmail from a LiveCD.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep evolution&lt;/pre&gt;&lt;br /&gt;This will show you all packages which have evolution in the title.  It should look like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;9760 evolution-common&lt;br /&gt;5160 libevolution&lt;br /&gt;2916 evolution-exchange&lt;br /&gt;1540 evolution-data-server&lt;br /&gt;1152 evolution-webcal&lt;br /&gt;1076 evolution&lt;br /&gt;700 evolution-plugins&lt;br /&gt;368 evolution-data-server-common&lt;br /&gt;128 evolution-indicator&lt;br /&gt;128 evolution-couchdb&lt;/pre&gt;&lt;br /&gt;You can remove all, apart from evolution-data-server-common which is needed by other applications, by running this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge evolution-common libevolution evolution-exchange evolution-data-server evolution-webcal evolution evolution-plugins evolution-indicator evolution-couchdb&lt;/pre&gt;&lt;br /&gt;The language packs also take up a lot of space, and I do not need anything but English.  Find these by running:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep language-&lt;/pre&gt;&lt;br /&gt;and then remove the ones we do not want:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge language-pack-gnome-xh-base language-pack-xh-base language-pack-gnome-zh-hans-base language-pack-zh-hans-base language-pack-gnome-es-base language-pack-gnome-pt-base language-pack-gnome-de-base language-pack-pt-base language-pack-es-base language-pack-de-base language-pack-gnome-bn-base language-pack-bn-base&lt;/pre&gt;&lt;br /&gt;There are other language packs, but they are to small to worry about clearing up unless you are intent on getting this image as small as possible.  The final obvious low hanging fruit are foreign font sets.  Do a search for [t]rue[t]ype[f]ont packages:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep ttf&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;12584 ttf-unfonts-core - Korean&lt;br /&gt;6200 ttf-takao-pgothic - Japanese&lt;br /&gt;5456 ttf-thai-tlwg - Thai&lt;br /&gt;5184 ttf-wqy-microhei - Don't know for sure, better keep&lt;br /&gt;4204 ttf-freefont - Latin, keep&lt;br /&gt;2632 ttf-indic-fonts-core - Indian&lt;br /&gt;2564 ttf-dejavu-core - Latin, keep&lt;br /&gt;1724 ttf-liberation - Latin, keep&lt;br /&gt;1708 ttf-opensymbol - Symbols, needed for OpenOffice, keep&lt;br /&gt;592 ttf-khmeros-core Cambodian&lt;br /&gt;216 ttf-punjabi-fonts - Punjabi&lt;br /&gt;144 ttf-lao - Lao, where ever Lao is&lt;br /&gt;116 ttf-kacst-one - Arabic&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge ttf-unfonts-core ttf-takao-pgothic ttf-thai-tlwg ttf-wqy-microhei ttf-indic-fonts-core ttf-khmeros-core ttf-punjabi-fonts ttf-lao ttf-kacst-one&lt;/pre&gt;&lt;br /&gt;I am not going to be printing from the LiveCD so I can remove the software and drivers as follows.  Do not worry about the ubuntu-desktop meta file - it is just an easy way of ensuring that all the ubuntu basic stuff is installed.  As soon as printing is removed, the installation no longer qualifies as an ubuntu desktop but it doesn't actually remove the rest of the stuff.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge cups hplip-data&lt;/pre&gt;&lt;br /&gt;I am also going to remove rhythmbox, because it does take up a lot of space, and like evolution it is really the type of application you need to set up on an installed machine rather than running from a LiveCD.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge rhythmbox&lt;/pre&gt;&lt;br /&gt;Even after all of those deletions, once I recompressed the image I found I had saved a paltry 90Mb or so.  Ho hum.  Once you have carried out all the removals, a good strategy is to upgrade all your remaining packages to the latest versions.  You do NOT want to upgrade the Kernel or Grub because that causes bad things to happen and will stop the Live USB stick booting.  So, create the following files to 'pin' those packages to their current versions:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cat &amp;gt; hold_back_kernel &amp;lt;&amp;lt; "EOF"&lt;br /&gt;Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic&lt;br /&gt;Pin: version 2.6.35.22.23&lt;br /&gt;Pin-Priority: 1001&lt;br /&gt;EOF&lt;br /&gt;sudo mv hold_back_kernel /etc/apt/preferences.d/&lt;br /&gt;sudo cat &amp;gt; hold_back_grub &amp;lt;&amp;lt; "EOF"&lt;br /&gt;Package: grub-common&lt;br /&gt;Pin: version 1.98+20100804-5ubuntu3&lt;br /&gt;Pin-Priority: 1001&lt;br /&gt;EOF&lt;br /&gt;sudo mv hold_back_grub /etc/apt/preferences.d/&lt;br /&gt;sudo apt-get update&lt;/pre&gt;&lt;br /&gt;You can check that the version numbers are correct (they should be for the Live CD you have downloaded) and check the system knows about the new rules by running these commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-cache policy&lt;br /&gt;dpkg -l linux-generic&lt;br /&gt;dpkg -l grub-common&lt;/pre&gt;&lt;br /&gt;The last few lines of all of that should look like this (you can see the version numbers match up):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;Pinned packages:&lt;br /&gt;     linux-headers-generic -&gt; 2.6.35.22.23&lt;br /&gt;     linux-image-generic -&gt; 2.6.35.22.23&lt;br /&gt;     grub-common -&gt; 1.98+20100804-5ubuntu3&lt;br /&gt;     linux-generic -&gt; 2.6.35.22.23&lt;br /&gt;root@compaq:/# dpkg -l linux-generic&lt;br /&gt;Desired=Unknown/Install/Remove/Purge/Hold&lt;br /&gt;| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend&lt;br /&gt;|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)&lt;br /&gt;||/ Name                      Version                   Description&lt;br /&gt;+++-=========================-=========================-==================================================================&lt;br /&gt;ii  linux-generic             2.6.35.22.23              Complete Generic Linux kernel&lt;br /&gt;root@compaq:/# dpkg -l grub-common&lt;br /&gt;Desired=Unknown/Install/Remove/Purge/Hold&lt;br /&gt;| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend&lt;br /&gt;|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)&lt;br /&gt;||/ Name                      Version                   Description&lt;br /&gt;+++-=========================-=========================-==================================================================&lt;br /&gt;ii  grub-common               1.98+20100804-5ubuntu3    GRand Unified Bootloader, version 2 (common files)&lt;/pre&gt;&lt;br /&gt;You should now be able to run the upgrade excluding those troublesome packages.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get upgrade&lt;/pre&gt;&lt;br /&gt;We can now run a massive install command to add the extra packages that we want.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install \&lt;br /&gt;\&lt;br /&gt;build-essential linux-headers-generic libgtk2.0-dev patch bison texinfo \&lt;br /&gt;\&lt;br /&gt;xul-ext-adblock-plus flashplugin-installer openjdk-6-jre icedtea6-plugin \&lt;br /&gt;\&lt;br /&gt;openoffice.org-writer openoffice.org-java-common openoffice.org-l10n-en-gb openoffice.org-help-en-gb openoffice.org-style-human myspell-en-gb openoffice.org-hyphenation-en-us openoffice.org-thesaurus-en-us openoffice.org-java-common \&lt;br /&gt;\&lt;br /&gt;ttf-mscorefonts-installer \&lt;br /&gt;\&lt;br /&gt;smplayer vlc avidemux audacity pitivi \&lt;br /&gt;\&lt;br /&gt;totem totem-plugins-extra gstreamer0.10-pitfdll gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse \&lt;br /&gt;\&lt;br /&gt;non-free-codecs libavcodec-unstripped-52 libdvdcss2 libdvdread4 libdvdnav4 \&lt;br /&gt;\&lt;br /&gt;lame mjpegtools twolame mpeg2dec liba52-0.7.4-dev ffmpeg ffmpeg2theora w32codecs \&lt;br /&gt;\&lt;br /&gt;keepassx \&lt;br /&gt;\&lt;br /&gt;xchm comix ghostscript ghostscript-x gqview \&lt;br /&gt;\&lt;br /&gt;wine \&lt;br /&gt;\&lt;br /&gt;transmission \&lt;br /&gt;\&lt;br /&gt;f-spot dcraw gimp gimp-data-extras gimp-help-en \&lt;br /&gt;\&lt;br /&gt;celestia celestia-common celestia-common-nonfree stellarium googleearth-package \&lt;br /&gt;\&lt;br /&gt;subversion yasm \&lt;br /&gt;autoconf libtool zlib1g-dev libbz2-dev intltool libglib2.0-dev \&lt;br /&gt;libdbus-glib-1-dev libgtk2.0-dev libgudev-1.0-dev \&lt;br /&gt;libwebkit-dev libnotify-dev libgstreamer0.10-dev \&lt;br /&gt;libgstreamer-plugins-base0.10-dev \&lt;br /&gt;\&lt;br /&gt;monodevelop&lt;/pre&gt;&lt;br /&gt;To install Google Earth from the package downloaded above, you run:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;make-googleearth-package&lt;/pre&gt;&lt;br /&gt;I also want a couple of bits of software which are not available in the repositories.  The first is Handbrake which is used to auto convert between video formats, and then Truecrypt which is a handy encryption system.&lt;br /&gt;&lt;br /&gt;The lump of packages near the end of the long list above (subversion to libgstreamer) contains the dependencies for Handbrake.  Handbrake itself is installed using the svn system:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;svn checkout svn://svn.handbrake.fr/HandBrake/trunk hb-trunk&lt;br /&gt;cd hb-trunk&lt;br /&gt;./configure --launch&lt;br /&gt;cd build&lt;br /&gt;make install&lt;/pre&gt;&lt;br /&gt;Truecrypt is a pain in the arse since they want you to accept their stupid licence instead of just releasing under the GPL.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;wget http://www.truecrypt.org/download/truecrypt-7.0a-linux-x86.tar.gz&lt;br /&gt;tar -xzvf truecrypt-7.0a-linux-x86.tar.gz&lt;br /&gt;./truecrypt-7.0a-setup-x86&lt;/pre&gt;&lt;br /&gt;Extract the package file - it automatically stores it in /tmp.  We need to extract it to /, and it auto installs to the correct folders.  So:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /&lt;br /&gt;tar -xzvf /tmp/truecrypt_7.0a_i386.tar.gz&lt;/pre&gt;&lt;br /&gt;And that is that for Truecrypt.&lt;br /&gt;&lt;br /&gt;If you were stupid enough to upgrade the kernel package, it is extremely likely that doing a upgrade of all the packages will change the kernel version.  To ensure that the new kernel is actually used, you need to go into the ...&lt;br /&gt;~/live/edit/boot&lt;br /&gt;...folder and copy the latest versions of the vmlinuz compressed kernel and the initrd.img files to the ...&lt;br /&gt;~/live/extract-cd/casper&lt;br /&gt;...folder.  You then need to delete the existing initrd.lz file, and rename the initrd.img file you just copied over to replace it.  Do the same with the vmlinuz files. This has NEVER worked for me so I do not upgrade the kernel package.&lt;br /&gt;&lt;br /&gt;If you want the clock in the LiveCD machine to show the proper time, take a moment and set your time zone and keyboard for UK use:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo setxkbmap gb&lt;br /&gt;sudo cp -v --remove-destination /usr/share/zoneinfo/Europe/London /etc/localtime&lt;/pre&gt;&lt;br /&gt;Of course, the keyboard command does not fucking work.  I now have no fucking idea how to change the keyboard map from the command line.  Brilliant.  I mean there must be a file somewhere, anywhere, that actually stores these settings.  Where?  No fucking clue.  Moving on:&lt;br /&gt;&lt;br /&gt;We now need to clean up some user account stuff incase any of the installed packages made changes:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;awk -F: '$3 &gt; 999' /etc/passwd&lt;br /&gt;usermod -u 500 $hit #where hit is any user ID greater than 999&lt;/pre&gt;&lt;br /&gt;Right, and we are good to do a general clean up:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get clean&lt;br /&gt;rm -rf /tmp/* ~/.bash_history&lt;br /&gt;rm /etc/resolv.conf&lt;br /&gt;rm /var/lib/dbus/machine-id&lt;br /&gt;rm /sbin/initctl&lt;br /&gt;dpkg-divert --rename --remove /sbin/initctl&lt;br /&gt;umount /proc&lt;br /&gt;umount /sys&lt;br /&gt;umount /dev/pts&lt;br /&gt;exit&lt;br /&gt;sudo umount edit/dev&lt;/pre&gt;&lt;br /&gt;The [rm] commands obviously [r]e[m]ove stuff, and the remaining commands undo the setup commands we used to get into the [chroot] environment.  Virtually every time I do this I get a fucking annoying error telling me that it can't umount these things because they are in use.  Well, you know what I say to that?  Hello Mr. Reboot.&lt;br /&gt;&lt;br /&gt;Once the system has come back on, fire up a terminal and:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd ~/live&lt;/pre&gt;&lt;br /&gt;Now, update the .manifest file which is a list of installed packages:&lt;br /&gt;&lt;pre class="postCode"&gt;chmod +w extract-cd/casper/filesystem.manifest&lt;br /&gt;sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' &gt; extract-cd/casper/filesystem.manifest&lt;br /&gt;sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop&lt;br /&gt;sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop&lt;br /&gt;sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop&lt;/pre&gt;&lt;br /&gt;Now delete the existing squashed archive and replace it.  Don't worry if it cannot find one, there shouldn't be one the first time you run through these instructions.&lt;br /&gt;&lt;pre class="postCode"&gt;sudo rm extract-cd/casper/filesystem.squashfs&lt;br /&gt;sudo mksquashfs edit extract-cd/casper/filesystem.squashfs&lt;/pre&gt;&lt;br /&gt;That last command will take most time of anything here, as it (re)compressess all the packages we want.  If you are feeling particularly narcisstic you can edit the disk details (change the image name) that pop up on boot:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo nano extract-cd/README.diskdefines&lt;/pre&gt;&lt;br /&gt;Now we need to rebuild the md5sum check file:&lt;br /&gt;&lt;pre class="postCode"&gt;cd extract-cd&lt;br /&gt;sudo rm md5sum.txt&lt;br /&gt;find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt&lt;/pre&gt;&lt;br /&gt;That will probably take two [sudo] password requests - one for the straight [sudo] and one for the [| sudo] piped version.  Do not know why.  Irritating as fuck.&lt;br /&gt;&lt;br /&gt;And finally we need to build a new iso image:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-10.10-desktop-i386-custom.iso .&lt;/pre&gt;&lt;br /&gt;Once you have that image you use the unetbootin software (which comes in both windows and linux flavours) to load the image onto the USB Key.  You need to use version 494 at least to get it to work with Maverick.  Job done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4918091699702248628?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4918091699702248628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/making-maverick-live-cd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4918091699702248628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4918091699702248628'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/making-maverick-live-cd.html' title='Making a Maverick Live CD'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-5917928894055936748</id><published>2010-10-26T20:47:00.000+01:00</published><updated>2010-10-26T20:47:51.144+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p55m-ud2'/><title type='text'>Hardware Fuckup 2: The Return</title><content type='html'>The fucking fucker is fucking fucked a-fucking-gain.&lt;br /&gt;&lt;br /&gt;Turned machine off in morning, fine.&lt;br /&gt;&lt;br /&gt;Turned machine on this evening, same fucking bastard symptoms as March.  Lights come on and the fan spins for half a second then off.&lt;br /&gt;&lt;br /&gt;Cockmaster.&lt;br /&gt;&lt;br /&gt;The difference this time was that the machine was doing NOTHING when it seems to have failed for no reason at all.  It was OFF.  The power supply, at least, is untouched, and works fine in another machine.&lt;br /&gt;&lt;br /&gt;Bawbag.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-5917928894055936748?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/5917928894055936748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/hardware-fuckup-2-return.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5917928894055936748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5917928894055936748'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/hardware-fuckup-2-return.html' title='Hardware Fuckup 2: The Return'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8400019504946711999</id><published>2010-10-22T11:59:00.012+01:00</published><updated>2010-11-26T10:07:16.132Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>LFS - Firefox 4 Beta from Source</title><content type='html'>The new version of Firefox is nearly out, and I wanted to try it with my LFS system.  I figured that it should not be too different to Firefox 3.6 which I have installed.  I encountered two problems when installing FF4.  Firstly, for some strange reason, it can't use the libpng that I have installed.  I updated libpng to the latest version, but still nada.  It also needed the yasm software which is some programming language stuff.&lt;br /&gt;&lt;br /&gt;So:&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/extras&lt;br /&gt;wget http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/extras/yasm-0.8.0.tar.gz&lt;br /&gt;cd yasm-0.8.0&lt;br /&gt;CC="gcc -fPIC" ./configure --prefix=/usr&lt;br /&gt;time make $CORES_TO_USE&lt;br /&gt;make install&lt;/pre&gt;&lt;br /&gt;And then:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/extras&lt;br /&gt;wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/4.0b6/source/firefox-4.0b6.source.tar.bz2&lt;br /&gt;cd /dev/shm&lt;br /&gt;tar -xjvf /sources/extras/firefox-4.0b6.source.tar.bz2&lt;br /&gt;cd moz*&lt;br /&gt;cat &gt; .mozconfig &lt;&lt; "EOF"&lt;br /&gt;ac_add_options --enable-application=browser&lt;br /&gt;. $topsrcdir/browser/config/mozconfig&lt;br /&gt;mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../firefox-build&lt;br /&gt;mk_add_options MOZ_MAKE_FLAGS="-j4"&lt;br /&gt;ac_add_options --prefix=/opt/firefox4&lt;br /&gt;ac_add_options --enable-optimize&lt;br /&gt;ac_add_options --enable-system-cairo&lt;br /&gt;ac_add_options --with-system-jpeg&lt;br /&gt;#ac_add_options --with-system-png&lt;br /&gt;ac_add_options --with-pthreads&lt;br /&gt;ac_add_options --with-system-zlib&lt;br /&gt;ac_add_options --disable-accessibility&lt;br /&gt;ac_add_options --disable-crashreporter&lt;br /&gt;ac_add_options --disable-dbus&lt;br /&gt;ac_add_options --disable-gnomevfs&lt;br /&gt;ac_add_options --disable-necko-wifi&lt;br /&gt;ac_add_options --disable-installer&lt;br /&gt;ac_add_options --disable-javaxpcom&lt;br /&gt;ac_add_options --disable-tests&lt;br /&gt;ac_add_options --disable-updater&lt;br /&gt;ac_add_options --disable-libnotify&lt;br /&gt;ac_add_options --enable-official-branding&lt;br /&gt;ac_add_options --enable-safe-browsing&lt;br /&gt;ac_add_options --enable-strip&lt;br /&gt;EOF&lt;/pre&gt;Note - the "-j4" line.  Make this j2 for a dual core, or leave it out altogether for single core.  I have commented out the libpng line, because I will want it back if I ever find out what is screwed up.  I have also changed the install directory so I can install it alongside FF3.Now run:&lt;pre class="postCode"&gt;time make -f client.mk build&lt;br /&gt;make -f client.mk install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf moz*&lt;/pre&gt;I think I may have found the problem with Flash 10.  My system is missing some dependencies.  Running [ldd] on the library reports the following as missing:&lt;pre class="postOutput"&gt;libssl3.so =&gt; not found&lt;br /&gt;libsmime3.so =&gt; not found&lt;br /&gt;libnss3.so =&gt; not found&lt;br /&gt;libplds4.so =&gt; not found&lt;br /&gt;libplc4.so =&gt; not found&lt;br /&gt;libnspr4.so =&gt; not found&lt;/pre&gt;All of these libraries are in the Firefox folder - but are NOT available to the system as a whole.  So I need to somehow tell the system it can look in the firefox folders to get these things.  They way to do this is by adding the firefox path to following file:&lt;pre class="postCode"&gt;cat &gt;&gt; /etc/ld.so.conf &lt;&lt; "EOF"&lt;br /&gt;# Extra Path so Firefox's libraries can be used by Flash10&lt;br /&gt;/opt/firefox4/lib/firefox-4.0b6&lt;br /&gt;# End of Extra Path.&lt;br /&gt;EOF&lt;/pre&gt;OK.  We now get a fucking different problem.  It can't find the cURL library.  Which it DOESN'T FUCKING ASK FOR when you [ldd] the fucker.  OK.&lt;pre class="postCode"&gt;wget http://curl.haxx.se/download/curl-7.20.0.tar.bz2&lt;br /&gt;tar -xjvf curl-7.20.0.tar.bz2&lt;br /&gt;cd curl-7.20.0&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;/pre&gt;Holy fuck the [make check] is the best I have ever seen!  It gives you an actual ETA of how long the test is going to take to run!  It is awesome.  And then it ruins everything by not giving you a final report.  Bastard.&lt;pre class="postCode"&gt;make install&lt;br /&gt;find docs -name "Makefile*" -o -name "*.1" -o -name "*.3" | xargs rm&lt;br /&gt;install -v -d -m755 /usr/share/doc/curl-7.20.0&lt;br /&gt;cp -v -R docs/* /usr/share/doc/curl-7.20.0&lt;/pre&gt;And, finally, the fucker works.  You just install Flashplayer 10 using the following instructions:&lt;pre class="postCode"&gt;wget http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz&lt;br /&gt;tar -xzvf install_flash_player_10_linux.tar.gz&lt;br /&gt;mkdir -v /opt/firefox4/lib/firefox-4.0b6/plugins&lt;br /&gt;cp -v libflashplayer.so /opt/firefox4/lib/firefox-4.0b6/plugins&lt;/pre&gt;If you have already installed Java, just link it to the new plugins directory:&lt;pre class="postCode"&gt;ln -sv /opt/jdk/jre/lib/i386/libnpjp2.so /opt/firefox4/lib/firefox-4.0b6/plugins&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8400019504946711999?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8400019504946711999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/lap-firefox-4-beta.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8400019504946711999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8400019504946711999'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/lap-firefox-4-beta.html' title='LFS - Firefox 4 Beta from Source'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-7156665365044665724</id><published>2010-10-15T11:59:00.057+01:00</published><updated>2010-10-15T11:59:00.104+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='whdload'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>LAP - WHDLoad</title><content type='html'>You need lha &amp; installer&lt;br /&gt;&lt;br /&gt;cd ~amiga/shared&lt;br /&gt;wget http://www.whdload.de/whdload/WHDLoad_usr.lha&lt;br /&gt;wget http://www.aminet.net/util/boot/skick346.lha&lt;br /&gt;wget http://aminet.net/util/pack/xfdmaster.lha&lt;br /&gt;cp ~/amiga/roms/1.3.rom ./kick34005.A500&lt;br /&gt;cp ~/amiga/roms/3.1.rom ./kick40068.A1200&lt;br /&gt;&lt;br /&gt;lha x shared:WHDLoad_usr.lha ram:&lt;br /&gt;[install to c:]&lt;br /&gt;lha x shared:skick346.lha devs:&lt;br /&gt;copy shared:kick34005.A500 devs:Kickstarts&lt;br /&gt;copy shared:kick40068.A1200 devs:Kickstarts&lt;br /&gt;lha x shared:xfdmaster.lha ram:&lt;br /&gt;copy ram:xfd_User/C/xfddecrunch c:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-7156665365044665724?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/7156665365044665724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/lap-whdload.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7156665365044665724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7156665365044665724'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/lap-whdload.html' title='LAP - WHDLoad'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8201242732443571162</id><published>2010-10-08T11:59:00.012+01:00</published><updated>2010-10-17T19:49:03.623+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='basics'/><title type='text'>System Info from the Command Line</title><content type='html'>Bizarrely it can be a frustrating experience to get sensible information about your system from a linux machine.  Fortunately, this has been sorted out in the latest versions of Ubuntu which come with the [name of app] which seems to give one a full overview of the hardware installed in the system. Ubuntu's DIsk Usage Analyser is a very useful way of finding out what  is taking up space in the system.&lt;br /&gt;&lt;br /&gt;Those graphical applications are dependency heavy though, and require you to have the whole of Gnome installed before they are prepared to work.  I therefore present herein a non-exhaustive list of commands which get you to the same kind of useful information:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;df -h&lt;/pre&gt;&lt;br /&gt;This gives you the total [d]isk space used and [f]ree in [h]uman readable numbers.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;df -hH&lt;/pre&gt;&lt;br /&gt;This gives you the same information in marketing megabytes, not actual megabytes.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;du [dir] -h&lt;/pre&gt;&lt;br /&gt;Gives you the [d]isk [u]sage of a directory and all its subdirectories individually.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;du [dir] -hs&lt;/pre&gt;&lt;br /&gt;Gives you the [d]isk [u]sage of the whole directory in one number.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;top -i&lt;/pre&gt;...brings up a fullscreen updating display of the current active processes, and general memory/swap usage.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ps -auxf | sort -nr -k 4 | head -10&lt;/pre&gt;...should show you the top ten processes by memory usage.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;free -m&lt;/pre&gt;...shows you memory usage only in [m]egabytes.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo du --max-depth=1 --exclude=*dev* --exclude=*tmp* --exclude=*proc* | sort -n -r&lt;/pre&gt;&lt;br /&gt;This is a useful command to run from the root directory as it lists the space used by all subfolders to that directory only.  It does not go below the subfolder level ([max-depth=1]).  It does not work with [-h] as the sort ([| sort -n -r]) gets confused and does not deal with the M or K distinction.  In other words a 20000k file is treated as larger than a 20m file.  The excludes are useful because proc and dev are virtual and do not take up any space on the disk.  I had tmp mounted to a ramdisk when I was doing my Amiga project, so I also wanted to exclude that.&lt;br /&gt;&lt;br /&gt;This following does seem to do the sort better (or at all):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;du -ks --exclude=*dev* --exclude=*tmp* --exclude=*proc* * | sort -nr | cut -f2 | xargs -d '\n' du -sh&lt;/pre&gt;&lt;br /&gt;I have no idea what the [cut] or [args] bits do, but they seem to sort out (ha ha) the sorting problem.&lt;br /&gt;&lt;br /&gt;To get Battery information from the command line, you use the following two commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat /proc/acpi/battery/BAT1/state&lt;br /&gt;cat /proc/acpi/battery/BAT1/info&lt;/pre&gt;&lt;br /&gt;The variable here is the [BAT1] bit.  Yours may be BAT0 or something else.  Just check the contents of the directory and you should find something.  There is a useful perl script &lt;a href="http://www.osix.net/modules/article/?id=716"&gt;here&lt;/a&gt; which extracts and displays the information produced by the preceding commands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8201242732443571162?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8201242732443571162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/system-info-from-command-line.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8201242732443571162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8201242732443571162'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/system-info-from-command-line.html' title='System Info from the Command Line'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8518314121022398529</id><published>2010-10-01T11:59:00.048+01:00</published><updated>2010-11-26T10:07:16.133Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='post project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>LFS - Firefox from Source</title><content type='html'>OK, I have buckled under the pressure of being sick fucking fed up of text only browsing.  Actually, when I looked at it, with the packages I have installed, there are only two dependencies needed to get firefox up and running.  So, firefox it is.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /sources/extras&lt;/pre&gt;&lt;br /&gt;The first dependency here is something to do with Interface Definition Language files.  Apparently firefox needs to use them, whatever they actually are.  Absolutely simply installation commands.&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.14.tar.bz2&lt;br /&gt;tar -xjvf /sources/extras/libIDL-0.8.14.tar.bz2&lt;br /&gt;cd libIDL-0.8.14&lt;br /&gt;./configure --prefix=/usr &amp;amp;&amp;amp;&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libIDL-0.8.14&lt;/pre&gt;&lt;br /&gt;Next up is Python.  Frankly I am surprised it has taken until now for this to be installed.  Python is another language like C or Perl.&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2&lt;br /&gt;wget http://www.linuxfromscratch.org/patches/blfs/svn/Python-2.6.4-bdb_4.8-1.patch&lt;br /&gt;wget http://docs.python.org/ftp/python/doc/2.6/python-2.6-docs-html.tar.bz2&lt;br /&gt;tar -xjvf /sources/extras/Python-2.6.4.tar.bz2&lt;br /&gt;cd Python-2.6.4&lt;/pre&gt;&lt;br /&gt;We need to fix a potential build problem with a quick [sed].  I have no idea whatsoever what the patch is supposed to fix, BLFS is silent on the issue.&lt;br /&gt;&lt;pre class="postCode"&gt;sed -i "s/ndbm_libs = \[\]/ndbm_libs = ['gdbm', 'gdbm_compat']/" setup.py&lt;br /&gt;patch -Np1 -i /sources/extras/Python-2.6.4-bdb_4.8-1.patch&lt;br /&gt;./configure --prefix=/usr --enable-shared&lt;br /&gt;make&lt;br /&gt;make test&lt;br /&gt;make install&lt;br /&gt;chmod -v 755 /usr/lib/libpython2.6.so.1.0&lt;/pre&gt;&lt;br /&gt;We also want to install Python's documentation, we downloaded it after all.  We also need to set a system variable to get the documentation to work properly.&lt;br /&gt;&lt;pre class="postCode"&gt;install -v -m755 -d /usr/share/doc/Python-2.6.4/html&lt;br /&gt;tar --strip-components=1 --no-same-owner --no-same-permissions -C /usr/share/doc/Python-2.6.4/html -xvf /sources/extras/python-2.6-docs-html.tar.bz2&lt;br /&gt;cat &amp;gt;&amp;gt; /etc/profile &amp;lt;&amp;lt; "EOF"&lt;br /&gt;export PYTHONDOCS=/usr/share/doc/Python-2.6.4/html&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf Python-2.6.4&lt;/pre&gt;&lt;br /&gt;And now we come to Firefox itself.  This is probably the most complicated build we have done up until now.  In fact it is so complicated that we need to create a separate file just to feed the configuration options to the make command.&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.8/source/firefox-3.6.8.source.tar.bz2&lt;br /&gt;tar -xjvf /sources/extras/firefox-3.6.8.source.tar.bz2&lt;br /&gt;cd moz*&lt;/pre&gt;&lt;br /&gt;The folder created by the unpacking is called [mozilla]-something or other.  Using the previous command is a simple way to ensure that we definitely move into that folder, no matter what its specific name.  Now lets set up the config file.  There are two ways to go with firefox.  It comes with quite a lot of its dependencies built in.  If you have these packages installed in the system, it is best to use those versions.  For the missing dependencies we could download and install the latest versions, but that is too much of a pain in the arse frankly.  Some of the packages we can use, like cairo, jpeg, png, and zlib because we have installed those.  If you are dealing with a more mature BLFS install, you may have more system packages you can enable.&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt; .mozconfig &amp;lt;&amp;lt; "EOF"&lt;br /&gt;ac_add_options --enable-application=browser&lt;br /&gt;. $topsrcdir/browser/config/mozconfig&lt;br /&gt;mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../firefox-build&lt;br /&gt;ac_add_options --prefix=/opt/firefox&lt;br /&gt;ac_add_options --enable-optimize&lt;br /&gt;ac_add_options --enable-system-cairo&lt;br /&gt;ac_add_options --with-system-jpeg&lt;br /&gt;ac_add_options --with-system-png&lt;br /&gt;ac_add_options --with-pthreads&lt;br /&gt;ac_add_options --with-system-zlib&lt;br /&gt;ac_add_options --disable-accessibility&lt;br /&gt;ac_add_options --disable-crashreporter&lt;br /&gt;ac_add_options --disable-dbus&lt;br /&gt;ac_add_options --disable-gnomevfs&lt;br /&gt;ac_add_options --disable-necko-wifi&lt;br /&gt;ac_add_options --disable-installer&lt;br /&gt;ac_add_options --disable-javaxpcom&lt;br /&gt;ac_add_options --disable-tests&lt;br /&gt;ac_add_options --disable-updater&lt;br /&gt;ac_add_options --disable-libnotify&lt;br /&gt;ac_add_options --enable-official-branding&lt;br /&gt;ac_add_options --enable-safe-browsing&lt;br /&gt;ac_add_options --enable-strip&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;Now you run the compilation.  This takes just over 20 minutes on my quad core, so it is a biggie.  You might want to benchmark by [time]ing the build.&lt;br /&gt;&lt;pre class="postCode"&gt;time make $CORES_TO_USE -f client.mk build&lt;br /&gt;make -f client.mk install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf moz*&lt;/pre&gt;&lt;br /&gt;Now may be a good time to install two special firefox plugins: Flash and Java.&lt;br /&gt;&lt;br /&gt;First Flash.  In the first instance I will try flash 9, because Flashplayer 10 has compatibility problems with firefox.&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://fpdownload.macromedia.com/get/flashplayer/installers/archive/fp9_archive.zip&lt;br /&gt;unzip /sources/extras/fp9_archive.zip&lt;br /&gt;cd fp9_archive/9r246&lt;br /&gt;tar -xzvf flashplayer9r246_linux.tar.gz&lt;br /&gt;cd install_flash_player_9_linux&lt;br /&gt;cp ./libflashplayer.so /opt/firefox/lib/firefox-3.6.8/plugins&lt;br /&gt;cd ../../..&lt;br /&gt;rm -rf  fp9_archive&lt;/pre&gt;&lt;br /&gt;Just in case they have fixed Flash 10, you can get it from here:&lt;br /&gt;&lt;pre class="postCode"&gt;wget http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz&lt;br /&gt;tar -xzvf install_flash_player_10_linux.tar.gz&lt;br /&gt;cp -v libflashplayer.so /opt/firefox/lib/firefox-3.6.8/plugins&lt;/pre&gt;&lt;br /&gt;For Java, you need to download the binary install file, which is only available from Sun's website.  You should now be using Firefox to browse so just save the appropriate file into the /sources/extras folder from this &lt;a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u21-oth-JPR@CDS-CDS_Developer"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Then, from the directory you download this to, run:&lt;br /&gt;&lt;pre class="postCode"&gt;chmod +x /sources/extras/jdk-6u21-linux-i586.bin&lt;br /&gt;/sources/extras/jdk-6u21-linux-i586.bin&lt;br /&gt;cd jdk1.6.0_21&lt;br /&gt;install -v -m755 -d /opt/jdk-6u21&lt;br /&gt;mv -v * /opt/jdk-6u21&lt;br /&gt;chown -v -R root:root /opt/jdk-6u21&lt;br /&gt;ln -v -sf xawt/libmawt.so /opt/jdk-6u21/jre/lib/i386/&lt;br /&gt;cd ..&lt;br /&gt;sed -i 's@XINERAMA@FAKEEXTN@g' /opt/jdk-6u21/jre/lib/i386/xawt/libmawt.so&lt;br /&gt;ln -v -nsf jdk-6u21 /opt/jdk&lt;/pre&gt;&lt;br /&gt;Java needs quite complicated environment variables to be set, so we'll create a profile file:&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt;&amp;gt; /etc/profile.d/30-jdk.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# Begin /etc/profile.d/30-jdk.sh&lt;br /&gt;&lt;br /&gt;# Set JAVA_HOME directory&lt;br /&gt;JAVA_HOME=/opt/jdk&lt;br /&gt;&lt;br /&gt;# Adjust PATH&lt;br /&gt;pathappend ${JAVA_HOME}/bin PATH&lt;br /&gt;&lt;br /&gt;# Auto Java CLASSPATH&lt;br /&gt;# Copy jar files to, or create symlinks in this directory&lt;br /&gt;AUTO_CLASSPATH_DIR=/usr/lib/classpath&lt;br /&gt;pathprepend . CLASSPATH&lt;br /&gt;for dir in `find ${AUTO_CLASSPATH_DIR} -type d 2&amp;gt;/dev/null`; do&lt;br /&gt;pathappend $dir CLASSPATH&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;export JAVA_HOME CLASSPATH&lt;br /&gt;unset AUTO_CLASSPATH_DIR&lt;br /&gt;unset dir&lt;br /&gt;&lt;br /&gt;# End /etc/profile.d/30-jdk.sh&lt;br /&gt;EOF&lt;/pre&gt;&lt;br /&gt;Either log out and in or run the following command to load the new environment settings:&lt;br /&gt;&lt;pre class="postCode"&gt;source /etc/profile&lt;/pre&gt;&lt;br /&gt;The Java plugin for firefox needs to be installed by way of symbolic link, just copying it will not work for some reason:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;ln -sv /opt/jdk/jre/lib/i386/libnpjp2.so /opt/firefox/lib/firefox-3.6.8/plugins&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-8518314121022398529?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/8518314121022398529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/lap-firefox.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8518314121022398529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/8518314121022398529'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/10/lap-firefox.html' title='LFS - Firefox from Source'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-174791437521599962</id><published>2010-09-24T11:59:00.003+01:00</published><updated>2010-09-24T11:59:00.200+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='blogspot'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>How to Post Code in Blog{er,spot}</title><content type='html'>This was a collossal pain in the arse to work out, but actually turned out to be quite easy to implement.  Y'see when you post text to a blog post everything works fine.  The problem is if you try to post code - html, linux command line stuff.  You end up with lots of special characters that the site tries to render in HTML instead of just displaying.  So instead of (for example) a line which shows the code to get coloured text, you just get the coloured text.  Not helpful.&lt;br /&gt;&lt;br /&gt;There are many and varied explanations of how to do this, but I prefer this way which is cobbled together from multiple sources.  For my epic Amiga Linux project I needed to be able to display commands to type in AND the outputs of commands.  I wanted to have those blocks distinct from each other and the surrounding text.  This is what I eventually came up with.&lt;br /&gt;&lt;br /&gt;Go to the Design tab, and choose the Edit HTML section.  You get a text box which behaves much in the same way as the post editting box.  Scroll down until you get to a line which says:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;]]&amp;gt;&amp;lt;/b:skin&amp;gt;&lt;/pre&gt;&lt;br /&gt;Insert above that line the following text:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;.postCode{&lt;br /&gt;background:#eeeeee; &lt;br /&gt;border:1px solid #A6B0BF; &lt;br /&gt;font-size:120%; &lt;br /&gt;line-height:100%; &lt;br /&gt;overflow:auto; &lt;br /&gt;padding:10px; &lt;br /&gt;color:#000000&lt;br /&gt;}&lt;br /&gt;.postOutput{&lt;br /&gt;background:#000000; &lt;br /&gt;border:1px solid #A6B0BF; &lt;br /&gt;font-size:120%; &lt;br /&gt;line-height:100%; &lt;br /&gt;overflow:auto; &lt;br /&gt;padding:10px; &lt;br /&gt;color:#eeeeee&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;My workflow is then to copy the text I am working on into some &lt;a href="http://www.reconn.us/component/option,com_wrapper/Itemid,62/"&gt;website or other &lt;/a&gt;which will automatically convert all the special characters to their &lt;a href="http://en.wikipedia.org/wiki/HTML#Character_and_entity_references"&gt;escape codes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Then I paste the resulting text into the blog editing window in HTML mode.  I then switch to compose mode, and change all of the code or output text into quotes.  I then switch back to the HTML mode, copy all of the HTML text and paste it into a text editor.&lt;br /&gt;&lt;br /&gt;I then do a search and replace all "/blockquote" entries for "/pre" and then "blockquote" for "pre class="postCode"".  That converts all of the quotes to the code class that I defined above.  It is black text (the colour is 00 for all RGB) on a nearly white background (ee in all RGB - ff for all would be completely white).&lt;br /&gt;&lt;br /&gt;I then sift through the post and check for any postCode classes that I need to change to postOutput.  That is nearly white text on a black background, which gives good contrast between the two texts.  If I do actually want to quote something I do it last.&lt;br /&gt;&lt;br /&gt;I end up with the following tag regime for the two types of quoted code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;&amp;lt;pre class="postCode"&amp;gt; code &amp;lt;/pre&amp;gt;&lt;/pre&gt;or &lt;br /&gt;&lt;pre class="postOutput"&gt;&amp;lt;pre class="postOutput"&amp;gt; output &amp;lt;/pre&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-174791437521599962?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/174791437521599962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/how-to-post-code-in-blogerspot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/174791437521599962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/174791437521599962'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/how-to-post-code-in-blogerspot.html' title='How to Post Code in Blog{er,spot}'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-3953111919111184714</id><published>2010-09-17T11:59:00.001+01:00</published><updated>2010-09-25T20:37:43.602+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='liveCD'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Wireless Networking on an Ubuntu LiveCD</title><content type='html'>I have two PCs which I regularly like to boot to a LiveCD environment.  One is a Desktop machine with a Linksys WMP54GS wireless card, the other is a Compaq Mini 700 netbook.  The linksys uses Broadcom's 4306 chipset and I think the netbook uses the 4312.  I would like them both to work with a LiveCD.  Neither of them work with a LiveCD.  Using Ubuntu there is a simple solution for each machine.  All you do is run (on the desktop):&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install b43-fwcutter&lt;/pre&gt;or on the netbook:&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install bcmwl-kernel-source&lt;/pre&gt;and the system will connected to Ubuntu's servers through the internet and will automatically download all the software it needs to configure your internet connection which lets you connect to Ubuntu's servers and ... hang on a fucking minute, I've spotted a flaw.&lt;br /&gt;&lt;br /&gt;So how else do I solve this thorny little problem BEFORE the LiveCD gets an internet connection.  There are two separate solutions - one for each machine.  For the Desktop machine, I just need to load the firmware onto the running LiveCD system.  The B43 driver is installed by Ubuntu as a kernel module.  Using a different operating system (windows is fine for this because the USB Key is FAT32) I dump a copy of the b43 folder (which I have painstakingly explained how to get a hold of &lt;a href="http://justbloodywork.blogspot.com/search/label/firmware"&gt;elsewhere&lt;/a&gt;) containing the firmware onto the USB Key.  I can then run the following commands in the terminal (or ideally put them into an executable script on the USB Key).&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cp -r "/cdrom/b43" /lib/firmware/&lt;br /&gt;sudo rmmod b43&lt;br /&gt;sudo modprobe b43&lt;/pre&gt;&lt;br /&gt;What that does is copy the b43 folder from the USB Key (ubuntu mounts the LiveCD medium to /cdrom, no matter what it actually is) to the /lib/firmware directory.  The next two commands remove and then reinstall the b43 module to activate the firmware.  Wireless networks should now show up in Network Manager.&lt;br /&gt;&lt;br /&gt;OK, second solution for the netbook, and a bit trickier.  First of all, the above b43 based solution did work.  Sometimes.  Other times it would come up with error messages visible using [dmesg], and then refuse to work.  It would also sometimes cause the interface to fail even when rebooting into a perfectly working installed operating system, resulting in the need to shut the whole thing down and take out its battery before trying again.  So, not entirely reliable then.  Lets use the proper driver.&lt;br /&gt;&lt;br /&gt;First of all, we are going to want to build the driver from source code, so we must have the following packages built into the USB Key:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;build-essential &lt;br /&gt;linux-headers-generic&lt;/blockquote&gt;&lt;br /&gt;This means that you need to generate a custom LiveCD image.  There is simply no point in following these instructions if you are using a vanilla LiveCD image.&lt;br /&gt;&lt;br /&gt;Next we want to download the driver.  I stuck the USB Key in a running version of Ubuntu and ran the following commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /media/2G&lt;br /&gt;wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5.60.48.36.tar.gz &lt;/pre&gt;&lt;br /&gt;My USB Stick is called [2G] so Ubuntu automounts it into a directory with the same name in [/media].  The next command downloads the latest version of the hybrid driver.  I am not sure what a hybrid driver is, but if I had to guess I would say it is a driver AND firmware contained in the same package.  Incidentally, you could just use the same URL in windows and save the file to the USB Key.  You then reboot to the USB Key and run the following commands (ideally from a script):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;cp /cdrom/hybrid-portsrc-x86_32-v5.60.48.36.tar.gz .&lt;br /&gt;mkdir hybrid_wl &lt;br /&gt;cd hybrid_wl &lt;br /&gt;tar -xzvf ../hybrid-portsrc-x86_32-v5.60.48.36.tar.gz &lt;br /&gt;make clean&lt;br /&gt;make&lt;br /&gt;sudo rmmod b43 &lt;br /&gt;sudo rmmod b44 &lt;br /&gt;sudo rmmod b43legacy&lt;br /&gt;sudo rmmod wl&lt;br /&gt;sudo rmmod ssb &lt;br /&gt;sudo rmmod ndiswrapper &lt;br /&gt;sudo rmmod lib80211&lt;br /&gt;sudo modprobe lib80211&lt;br /&gt;sudo insmod wl.ko&lt;/pre&gt;&lt;br /&gt;The [cp] commands [c]o[p]ys the file we downloaded into the current [.] directory, which is [/tmp] because we just moved into it.&lt;br /&gt;&lt;br /&gt;There are lots of [r]e[m]ove [mod]ules commands, because there are so many modules which potentially interfere with the [wl] driver.  Again, once this script has finished, the interface should be up and running.  This one will take a little longer to run because it is building the module from source code each time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-3953111919111184714?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/3953111919111184714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/wireless-networking-on-ubuntu-livecd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3953111919111184714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/3953111919111184714'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/wireless-networking-on-ubuntu-livecd.html' title='Wireless Networking on an Ubuntu LiveCD'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-7125927398671579951</id><published>2010-09-10T11:59:00.011+01:00</published><updated>2010-10-08T11:23:42.135+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liveCD'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Building a Custom LiveCD for Ubuntu</title><content type='html'>There are many and varied reasons for running a LiveCD based operating system.  In no particular order, you can use it on a PC without a hard disk, or more commonly with a malfunctioning hard disk.  You can use it on a friends PC, taking all your applications with you.  You can use it to do your online banking in a safe environment.  You can use it to ... well you get the picture.&lt;br /&gt;&lt;br /&gt;So how do you actually go about customising one?  And why would you?  Well the nice people at Canonical get to decide which of the MANY Ubuntu packages get to live on the LiveCD that you have downloaded.  What if they exclude stuff that you want - support for video playback for instance, or the tools for compiling software from source?  Of course, the easy option is to just boot the Ubuntu LiveCD and get networking up and running and off you go - you can download whatever other software you want.  The trouble is that when you download software it gets stored in RAM which means a) you need to download it again next time which is a pain especially if you do not have internet available, and b) it uses up space in RAM.&lt;br /&gt;&lt;br /&gt;So when you get to know what kind of packages you use on a LiveCD on a regular basis, it might just be a good idea to build them into a customised LiveCD.  How hard can it be.  Hmmm.  Quite hard, but not skull crackingly awful.  You can build one on either a windows or linux (ubuntu) desktop machine.  Building one from Ubuntu itself, is easy to get into - from windows is going to take a bit more time.  It is worth going over the windows steps though, because the LiveCD user may just want to have Ubuntu Live rather than installed.&lt;br /&gt;&lt;br /&gt;So, for windows you will need XP, Vista or 7, about 10Gb of free disk space, an internet connection, and this software:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.filehippo.com/download_vmware_player/6056/"&gt;VMWare Player&lt;/a&gt; This is virtualisation software.  It allows you to run virtual machines on Windows.  This version is freeware, it only allows you to run machines that someone else has designed.&lt;br /&gt;&lt;a href="http://www.powerwf.com/download/Latest/VMXBuilder-Setup.exe"&gt;VMX Builder&lt;/a&gt;  This is freeware software which lets you design virtual machines to use in VMWare Player without having to pay for VMWare Server.&lt;br /&gt;&lt;a href="http://unetbootin.sourceforge.net/unetbootin-windows-latest.exe"&gt;Unetbootin&lt;/a&gt;  This software lets you install a LiveCD image to a USB Key.&lt;br /&gt;&lt;a href="http://www.ubuntu.com/desktop/get-ubuntu/download"&gt;Ubuntu LiveCD image&lt;/a&gt;  We are going to use this to both install onto the Virtual Machine AND as the base for the customized CD.&lt;br /&gt;&lt;br /&gt;So, use the VMX Builder to setup a machine.  Give it a decent amount of RAM, say half of what you have available, a 10Gb harddisk file (make it the expandable kind) access to 2 of your cores if you have a multi core system AND access to your network.  Bridging is fine.  Also, make sure that you let it access your USB Devices as that is how we are going to get data into and out of the virtual machine.  Lastly, tell it to use the CD Image that you downloaded as its CD Drive.&lt;br /&gt;&lt;br /&gt;Before you start, get a FAT32 formatted USB Key and stick a copy of the CD Image on it.  Then boot your virtual PC and install Ubuntu from the LiveCD.  Reboot, and get the VMWare Player to mount the USB Key.  You should now be able to proceed with the following instructions.&lt;br /&gt;&lt;br /&gt;Native Ubuntu users should start from this point.  You don't have to faff around with virtual machines, the one you have should be perfectly fine for this task.  So lets get started.&lt;br /&gt;&lt;br /&gt;First of all we are going to need some extra packages for our running system to manipulate the CD image.  To install these, run this command from a terminal window.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo aptitude install squashfs-tools genisoimage&lt;/pre&gt;&lt;br /&gt;The CD image contains one large archive file which stores all of the disk environment for the LiveCD.  The squashfs-tools handles this archive.  Basically, we unpack everything, add our extra packages, and then repack everything.  The genisoimage [gen]erates the final [iso] [image] which we put onto the USB Key in due course.&lt;br /&gt;&lt;br /&gt;Now, make a working directory in [~] home, and copy the image file into it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir ~/live&lt;br /&gt;cp /media/[whatever]/ubuntu-10.04-desktop-i386.iso ~/live&lt;br /&gt;cd ~/live&lt;/pre&gt;&lt;br /&gt;The [whatever] will differ depending on exactly where your system mounts the USB Key you just plugged in.  Next we are going to actually mount the CD image so we can use it as if we had burned it to a CD and inserted it.  We need to create the mount point first of all:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir mnt&lt;br /&gt;sudo mount -o loop ubuntu-10.04-desktop-i386.iso mnt&lt;/pre&gt;&lt;br /&gt;The &lt;a href="http://en.wikipedia.org/wiki/Loop_device"&gt;loop&lt;/a&gt; [o]ption allows us to mount the image file as a folder.&lt;br /&gt;&lt;br /&gt;Now we need to copy all of the files off the mounted image APART from the large squashed file.  Again we want a separate folder to store these files:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;mkdir extract-cd&lt;br /&gt;rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd&lt;/pre&gt;&lt;br /&gt;Next we need to extract the big archive file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo unsquashfs mnt/casper/filesystem.squashfs&lt;/pre&gt;&lt;br /&gt;It uncompresses to a folder name we want to change by the typical linux method of [m]o[v]ing it.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo mv squashfs-root edit&lt;/pre&gt;&lt;br /&gt;We are going to be chrooting into the filesystem we just unpacked, and we want to use some of the files on our existing machine to point the way to the internet, and to give us access to our current hardware:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cp /etc/resolv.conf edit/etc/&lt;br /&gt;sudo cp /etc/hosts edit/etc/&lt;br /&gt;sudo mount --bind /dev/ edit/dev&lt;/pre&gt;&lt;br /&gt;Now we chroot in and mount some virtual filesystems:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo chroot edit&lt;br /&gt;mount -t proc none /proc&lt;br /&gt;mount -t sysfs none /sys&lt;br /&gt;mount -t devpts none /dev/pts&lt;/pre&gt;&lt;br /&gt;We also need to set some system variables and create a symbolic link for some reason or another. &lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;export HOME=/root&lt;br /&gt;export LC_ALL=C&lt;br /&gt;dbus-uuidgen &gt; /var/lib/dbus/machine-id&lt;br /&gt;dpkg-divert --local --rename --add /sbin/initctl&lt;br /&gt;ln -s /bin/true /sbin/initctl&lt;/pre&gt;&lt;br /&gt;I think the dbus command generates a code for this specific machine that some installation stuff may need.  No idea what the [initctl] stuff is all about.&lt;br /&gt;Excellent.  We are now at the point where we can start to install stuff.  First of all, and this was fucking frustrating trying to work this out, we need to enable the universe and multiverse repositories if we want to install packages from them.  We need to do this in command line:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo nano /etc/apt/sources.list&lt;/pre&gt;&lt;br /&gt;This next command adds an external repository to the list of places we can download stuff from.  It's a biggie but it basically is just a series of commands that run in sequence.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list; sudo apt-get -q update; sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring; sudo apt-get -q update&lt;/pre&gt;&lt;br /&gt;Before installing stuff, it might be a good idea to clean out some stuff we are not going to use.  First of all have a look at all the installed packages in order of size:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | less&lt;/pre&gt;&lt;br /&gt;The first on the list looks like a massive package, but what you have to understand is that this is showing you the UNCOMPRESSED sizes.  Yeah, thanks for that.  If you check on http://packages.ubuntu.com/lucid for the ubuntu-docs information, you find it is only taking up a few hundred Kb when squashed.&lt;br /&gt;So what can you remove?  Evolution is a prime candidate.  Not much use on a LiveCD.  You will be using webmail from a LiveCD.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep evolution&lt;/pre&gt;&lt;br /&gt;This will show you all packages which have evolution in the title.  It should look like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;58440 evolution-common&lt;br /&gt;8468 evolution-data-server-common&lt;br /&gt;7020 evolution&lt;br /&gt;3584 evolution-exchange&lt;br /&gt;1404 evolution-data-server&lt;br /&gt;1120 evolution-webcal&lt;br /&gt;616 evolution-plugins&lt;br /&gt;320 evolution-couchdb&lt;br /&gt;136 evolution-indicator&lt;/pre&gt;&lt;br /&gt;You can remove all, apart from evolution-data-server-common which is needed by other applications, by running this command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge evolution-common evolution evolution-exchange evolution-data-server evolution-webcal evolution-plugins evolution-couchdb evolution-indicator&lt;/pre&gt;&lt;br /&gt;I cannot be bothered with HP printer drivers, so:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge hplip-data&lt;/pre&gt;&lt;br /&gt;The language packs also take up a lot of space, and I do not need anything but English.  Find these by running:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep language-&lt;/pre&gt;&lt;br /&gt;and then remove the ones we do not want:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge language-pack-gnome-fr-base language-pack-gnome-es-base language-pack-gnome-pt-base language-pack-gnome-de-base language-pack-pt-base language-pack-es-base language-pack-fr-base language-pack-de-base language-pack-gnome-bn-base language-pack-bn-base&lt;/pre&gt;&lt;br /&gt;There are other language packs, but they are to small to worry about clearing up unless you are intent on getting this image as small as possible.  The final obvious low hanging fruit are foreign font sets.  Do a search for [t]rue[t]ype[f]ont packages:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | grep ttf&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;12584 ttf-unfonts-core - Korean&lt;br /&gt;6200 ttf-takao-pgothic - Japanese&lt;br /&gt;5456 ttf-thai-tlwg - Thai&lt;br /&gt;5184 ttf-wqy-microhei - Don't know for sure, better keep&lt;br /&gt;4204 ttf-freefont - Latin, keep&lt;br /&gt;2632 ttf-indic-fonts-core - Indian&lt;br /&gt;2564 ttf-dejavu-core - Latin, keep&lt;br /&gt;1724 ttf-liberation - Latin, keep&lt;br /&gt;1708 ttf-opensymbol - Symbols, needed for OpenOffice, keep&lt;br /&gt;592 ttf-khmeros-core Cambodian&lt;br /&gt;216 ttf-punjabi-fonts - Punjabi&lt;br /&gt;144 ttf-lao - Lao, where ever Lao is&lt;br /&gt;116 ttf-kacst-one - Arabic&lt;/pre&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge ttf-unfonts-core ttf-takao-pgothic ttf-thai-tlwg ttf-wqy-microhei ttf-indic-fonts-core ttf-khmeros-core ttf-punjabi-fonts ttf-lao ttf-kacst-one&lt;/pre&gt;&lt;br /&gt;I may be tempted to remove the cups printing system, but the response to:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge cups&lt;/pre&gt;&lt;br /&gt;is&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;The following packages will be REMOVED:&lt;br /&gt;  bluez-cups* cups* cups-driver-gutenprint* foo2zjs* foomatic-db* foomatic-db-engine* ghostscript-cups* openprinting-ppds* pxljr* splix* ubuntu-desktop*&lt;br /&gt;0 upgraded, 0 newly installed, 11 to remove and 253 not upgraded.&lt;br /&gt;After this operation, 41.5MB disk space will be freed.&lt;/pre&gt;&lt;br /&gt;I do not particularly want to mess with the ubuntu-desktop meta file.  This makes sure that your LiveCD has all the basic Ubuntu Desktop files installed.  Still, 41.5MB is 41.5MB.  I will leave this one for future experiment.&lt;br /&gt;&lt;br /&gt;I am also going to remove rhythmbox, because it does take up a lot of space, and like evolution it is really the type of application you need to set up on an installed machine rather than running from a LiveCD.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;apt-get remove --purge rhythmbox&lt;/pre&gt;&lt;br /&gt;Even after all of those deletions, once I recompressed the image I found I had saved a paltry 90Mb or so.  Ho hum.  Once you have carried out all the removals, a good strategy is to upgrade all your remaining packages to the latest versions.  You do NOT want to upgrade the Kernel or Grub because that causes bad things to happen and will stop the Live USB stick booting.  So, create the following files to 'pin' those packages to their current versions:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo cat &amp;gt; hold_back_kernel &amp;lt;&amp;lt; "EOF"&lt;br /&gt;Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic&lt;br /&gt;Pin: version 2.6.32.21.22&lt;br /&gt;Pin-Priority: 1001&lt;br /&gt;EOF&lt;br /&gt;sudo mv hold_back_kernel /etc/apt/preferences.d/&lt;br /&gt;sudo cat &amp;gt; hold_back_grub &amp;lt;&amp;lt; "EOF"&lt;br /&gt;Package: grub-common&lt;br /&gt;Pin: version 1.98-1ubuntu5&lt;br /&gt;Pin-Priority: 1001&lt;br /&gt;EOF&lt;br /&gt;sudo mv hold_back_grub /etc/apt/preferences.d/&lt;br /&gt;sudo apt-get update&lt;/pre&gt;&lt;br /&gt;You can check that the version numbers are correct (they should be for the Live CD you have downloaded) and check the system knows about the new rules by running these commands:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-cache policy&lt;br /&gt;dpkg -l linux-generic&lt;br /&gt;dpkg -l grub-common&lt;/pre&gt;&lt;br /&gt;The last few lines of all of that should look like this (you can see the version numbers match up):&lt;br /&gt;&lt;br /&gt;&lt;pre class="postOutput"&gt;Pinned packages:&lt;br /&gt;     linux-headers-generic -&amp;gt; 2.6.32.21.22&lt;br /&gt;     linux-image-generic -&amp;gt; 2.6.32.21.22&lt;br /&gt;     grub-common -&amp;gt; 1.98-1ubuntu5&lt;br /&gt;     linux-generic -&amp;gt; 2.6.32.21.22&lt;br /&gt;ubuntu@ubuntu:~$ dpkg -l linux-generic&lt;br /&gt;Desired=Unknown/Install/Remove/Purge/Hold&lt;br /&gt;| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend&lt;br /&gt;|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)&lt;br /&gt;||/ Name                                   Version                                Description&lt;br /&gt;+++-======================================-======================================-============================================================================================&lt;br /&gt;ii  linux-generic                          2.6.32.21.22                           Complete Generic Linux kernel&lt;br /&gt;ubuntu@ubuntu:~$ dpkg -l grub-common&lt;br /&gt;Desired=Unknown/Install/Remove/Purge/Hold&lt;br /&gt;| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend&lt;br /&gt;|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)&lt;br /&gt;||/ Name                                   Version                                Description&lt;br /&gt;+++-======================================-======================================-============================================================================================&lt;br /&gt;ii  grub-common                            1.98-1ubuntu5                          GRand Unified Bootloader, version 2 (common files)&lt;/pre&gt;&lt;br /&gt;You should now be able to run the upgrade excluding those troublesome packages.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get upgrade&lt;/pre&gt;&lt;br /&gt;We can now run a massive install command to add the extra packages that we want.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo apt-get install \&lt;br /&gt;\&lt;br /&gt;build-essential linux-headers-generic libgtk2.0-dev patch bison texinfo \&lt;br /&gt;\&lt;br /&gt;ubuntu-desktop \&lt;br /&gt;\&lt;br /&gt;adblock-plus flashplugin-installer openjdk-6-jre icedtea6-plugin \&lt;br /&gt;\&lt;br /&gt;openoffice.org-writer openoffice.org-java-common openoffice.org-l10n-en-gb openoffice.org-help-en-gb openoffice.org-style-human myspell-en-gb openoffice.org-hyphenation-en-us openoffice.org-thesaurus-en-us openoffice.org-java-common \&lt;br /&gt;\&lt;br /&gt;ttf-mscorefonts-installer \&lt;br /&gt;\&lt;br /&gt;smplayer vlc avidemux audacity pitivi \&lt;br /&gt;\&lt;br /&gt;totem totem-plugins-extra gstreamer0.10-pitfdll gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse \&lt;br /&gt;\&lt;br /&gt;non-free-codecs libavcodec-unstripped-52 libdvdcss2 libdvdread4 libdvdnav4 \&lt;br /&gt;\&lt;br /&gt;lame mjpegtools twolame mpeg2dec liba52-0.7.4-dev ffmpeg ffmpeg2theora w32codecs \&lt;br /&gt;\&lt;br /&gt;keepassx \&lt;br /&gt;\&lt;br /&gt;xchm comix ghostscript ghostscript-x gqview \&lt;br /&gt;\&lt;br /&gt;wine \&lt;br /&gt;\&lt;br /&gt;transmission \&lt;br /&gt;\&lt;br /&gt;f-spot dcraw gimp gimp-data-extras gimp-help-en \&lt;br /&gt;\&lt;br /&gt;celestia celestia-common celestia-common-nonfree stellarium googleearth googleearth-data \&lt;br /&gt;\&lt;br /&gt;subversion yasm \&lt;br /&gt;autoconf libtool zlib1g-dev libbz2-dev intltool libglib2.0-dev \&lt;br /&gt;libdbus-glib-1-dev libgtk2.0-dev libgudev-1.0-dev \&lt;br /&gt;libwebkit-dev libnotify-dev libgstreamer0.10-dev \&lt;br /&gt;libgstreamer-plugins-base0.10-dev \&lt;br /&gt;\&lt;br /&gt;monodevelop&lt;/pre&gt;&lt;br /&gt;I also want a couple of bits of software which are not available in the repositories.  The first is Handbrake which is used to auto convert between video formats, and then Truecrypt which is a handy encryption system.&lt;br /&gt;&lt;br /&gt;The lump of packages near the end of the long list above (subversion to libgstreamer) contains the dependencies for Handbrake.  Handbrake itself is installed using the svn system:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;svn checkout svn://svn.handbrake.fr/HandBrake/trunk hb-trunk&lt;br /&gt;cd hb-trunk&lt;br /&gt;./configure --launch&lt;br /&gt;cd build&lt;br /&gt;make install&lt;/pre&gt;&lt;br /&gt;Truecrypt is a pain in the arse since they want you to accept their stupid licence instead of just releasing under the GPL.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;wget http://www.truecrypt.org/download/truecrypt-7.0-linux-x86.tar.gz&lt;br /&gt;tar -xzvf truecrypt-7.0-linux-x86.tar.gz&lt;br /&gt;./truecrypt-7.0-setup-x86&lt;/pre&gt;&lt;br /&gt;Extract the package file - it automatically stores it in /tmp.  We need to extract it to /, and it auto installs to the correct folders.  So:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /&lt;br /&gt;tar -xzvf /tmp/truecrypt_7.0_i386.tar.gz&lt;/pre&gt;&lt;br /&gt;And that is that for Truecrypt.&lt;br /&gt;&lt;br /&gt;If you were stupid enough to upgrade the kernel package, it is extremely likely that doing a upgrade of all the packages will change the kernel version.  To ensure that the new kernel is actually used, you need to go into the ...&lt;br /&gt;~/live/edit/boot&lt;br /&gt;...folder and copy the latest versions of the vmlinuz compressed kernel and the initrd.img files to the ...&lt;br /&gt;~/live/extract-cd/casper&lt;br /&gt;...folder.  You then need to delete the existing initrd.lz file, and rename the initrd.img file you just copied over to replace it.  Do the same with the vmlinuz files. This has NEVER worked for me so I do not upgrade the kernel package.&lt;br /&gt;&lt;br /&gt;If you want the clock in the LiveCD machine to show the proper time, take a moment and set your time zone and keyboard for UK use:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo setxkbmap gb&lt;br /&gt;sudo cp -v --remove-destination /usr/share/zoneinfo/Europe/London /etc/localtime&lt;/pre&gt;&lt;br /&gt;We now need to clean up some user account stuff incase any of the installed packages made changes:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;awk -F: '$3 &gt; 999' /etc/passwd&lt;br /&gt;usermod -u 500 $hit #where hit is any user ID greater than 999&lt;/pre&gt;&lt;br /&gt;Right, and we are good to do a general clean up:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;aptitude clean&lt;br /&gt;rm -rf /tmp/* ~/.bash_history&lt;br /&gt;rm /etc/resolv.conf&lt;br /&gt;rm /var/lib/dbus/machine-id&lt;br /&gt;rm /sbin/initctl&lt;br /&gt;dpkg-divert --rename --remove /sbin/initctl&lt;br /&gt;umount /proc&lt;br /&gt;umount /sys&lt;br /&gt;umount /dev/pts&lt;br /&gt;exit&lt;br /&gt;sudo umount edit/dev&lt;/pre&gt;&lt;br /&gt;The [rm] commands obviously [r]e[m]ove stuff, and the remaining commands undo the setup commands we used to get into the [chroot] environment.  Virtually every time I do this I get a fucking annoying error telling me that it can't umount these things because they are in use.  Well, you know what I say to that?  Hello Mr. Reboot.&lt;br /&gt;&lt;br /&gt;Once the system has come back on, fire up a terminal and:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd ~/live&lt;/pre&gt;&lt;br /&gt;Now, update the .manifest file which is a list of installed packages:&lt;br /&gt;&lt;pre class="postCode"&gt;chmod +w extract-cd/casper/filesystem.manifest&lt;br /&gt;sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' &gt; extract-cd/casper/filesystem.manifest&lt;br /&gt;sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop&lt;br /&gt;sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop&lt;br /&gt;sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop&lt;/pre&gt;&lt;br /&gt;Now delete the existing squashed archive and replace it.  Don't worry if it cannot find one, there shouldn't be one the first time you run through these instructions.&lt;br /&gt;&lt;pre class="postCode"&gt;sudo rm extract-cd/casper/filesystem.squashfs&lt;br /&gt;sudo mksquashfs edit extract-cd/casper/filesystem.squashfs&lt;/pre&gt;&lt;br /&gt;That last command will take most time of anything here, as it (re)compressess all the packages we want.  If you are feeling particularly narcisstic you can edit the disk details (change the image name) that pop up on boot:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo nano extract-cd/README.diskdefines&lt;/pre&gt;&lt;br /&gt;Now we need to rebuild the md5sum check file:&lt;br /&gt;&lt;pre class="postCode"&gt;cd extract-cd&lt;br /&gt;sudo rm md5sum.txt&lt;br /&gt;find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt&lt;/pre&gt;&lt;br /&gt;That will probably take two [sudo] password requests - one for the straight [sudo] and one for the [| sudo] piped version.  Do not know why.  Irritating as fuck.&lt;br /&gt;&lt;br /&gt;And finally we need to build a new iso image:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-10.04-desktop-i386-custom.iso .&lt;/pre&gt;&lt;br /&gt;Once you have that image you use the unetbootin software (which comes in both windows and linux flavours) to load the image onto the USB Key.  Job done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-7125927398671579951?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/7125927398671579951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/building-custom-livecd-for-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7125927398671579951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/7125927398671579951'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/building-custom-livecd-for-ubuntu.html' title='Building a Custom LiveCD for Ubuntu'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-5722568636683042864</id><published>2010-09-05T19:07:00.010+01:00</published><updated>2010-11-27T16:09:27.947Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LAP - All in One - Build Times</title><content type='html'>The actual process of compiling LFS the first time around is  lengthy and painful pain in the arse.  So it is pleasing to benchmark the time it takes to auto compile the whole lot.  These are the relevant times for my i5-750 and the replacement i7-870 using the ramdisk:&lt;br /&gt;&lt;br /&gt;Toolchain&lt;br /&gt;750&lt;br /&gt;real 27m30.622s&lt;br /&gt;user 34m23.369s&lt;br /&gt;sys 7m23.240s&lt;br /&gt;&lt;br /&gt;870&lt;br /&gt;real 26m41.127s&lt;br /&gt;user 39m37.777s&lt;br /&gt;sys 4m21.224s&lt;br /&gt;&lt;br /&gt;Actual Build&lt;br /&gt;750&lt;br /&gt;real 36m3.964s&lt;br /&gt;user 36m2.979s&lt;br /&gt;sys 6m54.990s&lt;br /&gt;&lt;br /&gt;870&lt;br /&gt;real 36m8.174s&lt;br /&gt;user 39m14.963s&lt;br /&gt;sys 4m4.027s&lt;br /&gt;&lt;br /&gt;Kernel&lt;br /&gt;750&lt;br /&gt;real 13m49.355s&lt;br /&gt;user 7m13.171s&lt;br /&gt;sys 0m33.742s&lt;br /&gt;&lt;br /&gt;870&lt;br /&gt;real 12m10.133s&lt;br /&gt;user 9m14.311s&lt;br /&gt;sys 0m35.246s&lt;br /&gt;&lt;br /&gt;Hardware &amp; Documentation&lt;br /&gt;real 10mX.XXXs&lt;br /&gt;&lt;br /&gt;I did not note down the exact time.&lt;br /&gt;&lt;br /&gt;Xorg&lt;br /&gt;real 41m25.104s&lt;br /&gt;&lt;br /&gt;Yes, that means that Xorg took longer to compile than the whole LFS system, but it was being built on the USB Key itself, not in RAM.  I expect this to drop by at least a third and potentially more if I can tweak the script to unpack and compile on the RAM disk.&lt;br /&gt;&lt;br /&gt;Desktop Stuff&lt;br /&gt;real    13m52.810s&lt;br /&gt;user    10m20.872s&lt;br /&gt;sys     1m32.297s&lt;br /&gt;&lt;br /&gt;I have also worked out how to install firefox (and will post the full instructions when they are tidied up in due course).  I also timed it and the results are:&lt;br /&gt;&lt;br /&gt;Firefox (paused a bit and I missed it during plugins).&lt;br /&gt;real    28m6.401s&lt;br /&gt;user    22m36.031s&lt;br /&gt;sys     1m11.702s&lt;br /&gt;&lt;br /&gt;That WAS compiled from the ramdisk, and it is worth commenting that a single web browser takes nearly the same amount of time to compile as the rest of the operating system.  Sheesh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-5722568636683042864?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/5722568636683042864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/lap-all-in-one-build-times.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5722568636683042864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/5722568636683042864'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/lap-all-in-one-build-times.html' title='LAP - All in One - Build Times'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2153749854670922303</id><published>2010-09-05T13:39:00.002+01:00</published><updated>2010-09-05T17:53:53.331+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LAP - All in One - Desktop</title><content type='html'>Now to install all the graphical odds and sods, run the following commands in a script:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/desktop/jpegsrc.v7.tar.gz&lt;br /&gt;cd jpeg-7&lt;br /&gt;./configure --prefix=/usr --enable-static --enable-shared&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rf jpeg-7&lt;br /&gt;ldconfig&lt;br /&gt;tar -xzvf /sources/desktop/slim-1.3.2.tar.gz&lt;br /&gt;cd slim-1.3.2&lt;br /&gt;sed -i -e "s:^MANDIR=.*:MANDIR=/usr/share/man:" -e "s:/usr/X11R6:/usr:" Makefile&lt;br /&gt;sed -i -e 's#X11R6/##g' -e 's#/usr/bin:##' -e 's/# daemon/daemon/' slim.conf&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cat &amp;gt;&amp;gt; /etc/inittab &amp;lt;&amp;lt; "EOF"&lt;br /&gt;x:5:respawn:/usr/bin/slim &amp;gt;&amp;amp; /dev/null&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rf slim-1.3.2&lt;br /&gt;tar -xzvf /sources/desktop/cairo-1.8.10.tar.gz&lt;br /&gt;cd cairo-1.8.10&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf cairo-1.8.10&lt;br /&gt;tar -xjvf /sources/desktop/pcre-8.00.tar.bz2&lt;br /&gt;cd pcre-8.00&lt;br /&gt;./configure --prefix=/usr --docdir=/usr/share/doc/pcre-8.00 --enable-utf8 --enable-unicode-properties --enable-pcregrep-libz --enable-pcregrep-libbz2&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;mv -v /usr/lib/libpcre.so.* /lib/&lt;br /&gt;ln -v -sf ../../lib/libpcre.so.0 /usr/lib/libpcre.so&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pcre-8.00&lt;br /&gt;tar -xjvf /sources/desktop/glib-2.22.4.tar.bz2&lt;br /&gt;cd glib-2.22.4&lt;br /&gt;./configure --prefix=/usr --with-pcre=system&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make $CORES_TO_USE install&lt;br /&gt;cat &amp;gt; /etc/profile.d/glib2-locale.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# Use the current locale charset for filenames&lt;br /&gt;# in applications using GLib&lt;br /&gt;export G_FILENAME_ENCODING=@locale&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf glib-2.22.4&lt;br /&gt;tar -xjvf /sources/desktop/pango-1.26.2.tar.bz2&lt;br /&gt;cd pango-1.26.2&lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pango-1.26.2&lt;br /&gt;tar -xjvf /sources/desktop/atk-1.28.0.tar.bz2&lt;br /&gt;cd atk-1.28.0&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf atk-1.28.0&lt;br /&gt;tar -xzvf /sources/desktop/tiff-3.9.2.tar.gz&lt;br /&gt;cd tiff-3.9.2&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf tiff-3.9.2&lt;br /&gt;tar -xjvf /sources/desktop/gtk+-2.18.7.tar.bz2&lt;br /&gt;cd gtk+-2.18.7&lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;install -v -m755 -d /usr/share/doc/gtk+-2.18.7/{faq,tutorial}&lt;br /&gt;cp -v -R docs/faq/html/* /usr/share/doc/gtk+-2.18.7/faq&lt;br /&gt;cp -v -R docs/tutorial/html/* /usr/share/doc/gtk+-2.18.7/tutorial&lt;br /&gt;install -v -m644 docs/*.txt /usr/share/doc/gtk+-2.18.7&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gtk+-2.18.7&lt;br /&gt;tar -xzvf /sources/desktop/libxml2-2.7.6.tar.gz&lt;br /&gt;cd libxml2-2.7.6&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libxml2-2.7.6&lt;br /&gt;tar -xzvf /sources/desktop/openbox-3.4.11.1.tar.gz&lt;br /&gt;cd openbox-3.4.11.1&lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc --disable-startup-notification --disable-session-management&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cat &amp;gt; /root/.xinitrc &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# Begin .xinitrc file&lt;br /&gt;#xterm  -g 80x20+0+0   &amp;amp;&lt;br /&gt;#xclock -g 100x100-0+0 &amp;amp;&lt;br /&gt;exec openbox-session&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf openbox-3.4.11.1&lt;br /&gt;mkdir -p /root/.config/openbox&lt;br /&gt;cp /etc/xdg/openbox/*.* /root/.config/openbox&lt;br /&gt;cat &amp;gt; ~/.config/openbox/menu.xml &amp;lt;&amp;lt; "EOF"&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;openbox_menu xmlns="http://openbox.org/3.4/menu"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="apps-editors-menu" label="Editors"&amp;gt;&lt;br /&gt;&amp;lt;item label="nano"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;command&amp;gt;xterm -e /usr/bin/nano&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;startupnotify&amp;gt;&lt;br /&gt;&amp;lt;enabled&amp;gt;yes&amp;lt;/enabled&amp;gt;&lt;br /&gt;&amp;lt;/startupnotify&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="apps-term-menu" label="Terminals"&amp;gt;&lt;br /&gt;&amp;lt;item label="Xterm"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&amp;lt;command&amp;gt;xterm&amp;lt;/command&amp;gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="apps-net-menu" label="Internet"&amp;gt;&lt;br /&gt;&amp;lt;item label="lynx"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;command&amp;gt;xterm -e /usr/bin/lynx&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;startupnotify&amp;gt;&lt;br /&gt;&amp;lt;enabled&amp;gt;yes&amp;lt;/enabled&amp;gt;&lt;br /&gt;&amp;lt;/startupnotify&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="apps-multimedia-menu" label="Multimedia"&amp;gt;&lt;br /&gt;&amp;lt;item label="alsamixer"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;command&amp;gt;xterm -e /usr/bin/alsamixer&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;startupnotify&amp;gt;&lt;br /&gt;&amp;lt;enabled&amp;gt;yes&amp;lt;/enabled&amp;gt;&lt;br /&gt;&amp;lt;/startupnotify&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="system-menu" label="System"&amp;gt;&lt;br /&gt;&amp;lt;item label="Openbox Configuration Manager"&amp;gt;&lt;br /&gt;&amp;lt;action name="Execute"&amp;gt;&lt;br /&gt;&amp;lt;command&amp;gt;obconf&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;startupnotify&amp;gt;&amp;lt;enabled&amp;gt;yes&amp;lt;/enabled&amp;gt;&amp;lt;/startupnotify&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;separator /&amp;gt;&lt;br /&gt;&amp;lt;item label="Reconfigure Openbox"&amp;gt;&lt;br /&gt;&amp;lt;action name="Reconfigure" /&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;menu id="root-menu" label="Openbox 3"&amp;gt;&lt;br /&gt;&amp;lt;separator label="Applications" /&amp;gt;&lt;br /&gt;&amp;lt;menu id="apps-editors-menu"/&amp;gt;&lt;br /&gt;&amp;lt;menu id="apps-net-menu"/&amp;gt;&lt;br /&gt;&amp;lt;menu id="apps-multimedia-menu"/&amp;gt;&lt;br /&gt;&amp;lt;menu id="apps-term-menu"/&amp;gt;&lt;br /&gt;&amp;lt;item label="E-UAE Emulator"&amp;gt;&lt;br /&gt;&amp;lt;action name="execute"&amp;gt;&amp;lt;execute&amp;gt;/usr/bin/uae&amp;lt;/execute&amp;gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;separator label="System" /&amp;gt;&lt;br /&gt;&amp;lt;menu id="system-menu"/&amp;gt;&lt;br /&gt;&amp;lt;separator /&amp;gt;&lt;br /&gt;&amp;lt;item label="Log Out"&amp;gt;&lt;br /&gt;&amp;lt;action name="Exit"&amp;gt;&lt;br /&gt;&amp;lt;prompt&amp;gt;yes&amp;lt;/prompt&amp;gt;&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/openbox_menu&amp;gt;&lt;br /&gt;EOF&lt;br /&gt;tar -xzvf /sources/extras/SDL-1.2.13.tar.gz&lt;br /&gt;cd SDL-1.2.13&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;install -v -m755 -d /usr/share/doc/SDL-1.2.13/html&lt;br /&gt;install -v -m644 docs/html/*.html /usr/share/doc/SDL-1.2.13/html&lt;br /&gt;ldconfig&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf SDL-1.2.13&lt;/pre&gt;&lt;br /&gt;Remember you need to nano [/etc/inittab] to change the default from '3' to '5'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2153749854670922303?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2153749854670922303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/lap-all-in-one-desktop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2153749854670922303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2153749854670922303'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/lap-all-in-one-desktop.html' title='LAP - All in One - Desktop'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-4839503821320902836</id><published>2010-09-05T13:18:00.006+01:00</published><updated>2010-11-30T11:28:58.772Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LAP - All in One - Xorg</title><content type='html'>This is the script to install Xorg in one go.  As with other scripts make sure you have the source files downloaded.  Then paste into gedit, and save as a script.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cat &amp;gt;&amp;gt; /etc/profile.d/X.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# Begin Xorg Variables&lt;br /&gt;export XORG_PREFIX="/usr"&lt;br /&gt;export XORG_CONFIG="--prefix=$XORG_PREFIX --sysconfdir=/etc --mandir=$XORG_PREFIX/share/man --localstatedir=/var"&lt;br /&gt;# End Xorg variables&lt;br /&gt;EOF&lt;br /&gt;source /etc/profile&lt;br /&gt;cd /sources/xorg/proto&lt;br /&gt;for package in $(grep -v '^#' ../proto-7.5-2.wget)&lt;br /&gt;do&lt;br /&gt;packagedir=${package%.tar.bz2}&lt;br /&gt;tar -xvf $package&lt;br /&gt;cd $packagedir&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf $packagedir&lt;br /&gt;done 2&amp;gt;&amp;amp;1 | tee -a ../proto-7.5-2-compile.log&lt;br /&gt;cd /sources/xorg/util&lt;br /&gt;for package in $(grep -v '^#' ../util-7.5-2.wget)&lt;br /&gt;do&lt;br /&gt;packagedir=${package%.tar.bz2}&lt;br /&gt;tar -xvf $package&lt;br /&gt;cd $packagedir&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf $packagedir&lt;br /&gt;done 2&amp;gt;&amp;amp;1 | tee -a ../util-7.5-2-compile.log&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -jxvf libXau-1.0.5.tar.bz2&lt;br /&gt;cd libXau-1.0.5&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libXau-1.0.5&lt;br /&gt;tar -jxvf libXdmcp-1.0.3.tar.bz2&lt;br /&gt;cd libXdmcp-1.0.3&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libXdmcp-1.0.3&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xvzf ed-1.4.tar.gz&lt;br /&gt;cd ed-1.4&lt;br /&gt;./configure --prefix=/usr --bindir=/bin&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf ed-1.4&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -jxvf freetype-2.3.12.tar.bz2&lt;br /&gt;cd freetype-2.3.12&lt;br /&gt;tar -xvf ../freetype-doc-2.3.12.tar.bz2 --strip-components=2 -C docs&lt;br /&gt;sed -i -r -e 's:.*(#.*BYTE.*) .*:\1:' -e 's:.*(#.*SUBPIX.*) .*:\1:' include/freetype/config/ftoption.h&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;install -v -m755 -d /usr/share/doc/freetype-2.3.12&lt;br /&gt;cp -v -R docs/*     /usr/share/doc/freetype-2.3.12&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf freetype-2.3.12&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xzvf expat-2.0.1.tar.gz&lt;br /&gt;cd expat-2.0.1&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;install -v -m755 -d /usr/share/doc/expat-2.0.1&lt;br /&gt;install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.0.1&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf expat-2.0.1&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xzvf fontconfig-2.8.0.tar.gz&lt;br /&gt;cd fontconfig-2.8.0&lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-docs --without-add-fonts --with-docdir=/usr/share/doc/fontconfig-2.8.0&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf fontconfig-2.8.0&lt;br /&gt;cd /sources/xorg/lib&lt;br /&gt;for package in $(grep -v '^#' ../lib-7.5-2.wget)&lt;br /&gt;do&lt;br /&gt;packagedir=${package%.tar.bz2}&lt;br /&gt;tar -xvf $package&lt;br /&gt;cd $packagedir&lt;br /&gt;case "$packagedir" in&lt;br /&gt;libX11-1.3.2 )&lt;br /&gt;CONFIGPARAMS="--without-xcb"&lt;br /&gt;esac&lt;br /&gt;./configure $XORG_CONFIG $CONFIGPARAMS&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;unset CONFIGPARAMS&lt;br /&gt;ldconfig&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf $packagedir&lt;br /&gt;done 2&amp;gt;&amp;amp;1 | tee -a ../lib-7.5-2-compile.log&lt;br /&gt;tar -xjvf xbitmaps-1.1.0.tar.bz2&lt;br /&gt;cd xbitmaps-1.1.0&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf xbitmaps-1.1.0&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xjvf libpng-1.2.42.tar.bz2&lt;br /&gt;cd libpng-1.2.42&lt;br /&gt;patch -Np1 -i ../libpng-1.2.42-apng-1.patch&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;install -v -m755 -d /usr/share/doc/libpng-1.2.42&lt;br /&gt;install -v -m644    README libpng-1.2.42.txt /usr/share/doc/libpng-1.2.42&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libpng-1.2.42&lt;br /&gt;tar -jxvf libpthread-stubs-0.1.tar.bz2&lt;br /&gt;cd libpthread-stubs-0.1&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libpthread-stubs-0.1&lt;br /&gt;tar -jxvf libdrm-2.4.14.tar.bz2&lt;br /&gt;cd libdrm-2.4.14&lt;br /&gt;./configure --prefix=$XORG_PREFIX&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf libdrm-2.4.14&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xjvf MesaLib-7.6.tar.bz2&lt;br /&gt;tar -xjvf MesaDemos-7.6.tar.bz2&lt;br /&gt;cd Mesa-7.6&lt;br /&gt;sed 's@FLAGS=\"-g@FLAGS=\"@' -i configure&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make -C progs/xdemos glxinfo glxgears&lt;br /&gt;make install&lt;br /&gt;install -v -m755 progs/xdemos/glx{info,gears} ${XORG_PREFIX}/bin&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf Mesa-7.6&lt;br /&gt;cd /sources/xorg/app&lt;br /&gt;for package in $(grep -v '^#' ../app-7.5-2.wget)&lt;br /&gt;do&lt;br /&gt;packagedir=${package%.tar.bz2}&lt;br /&gt;tar -xvf $package&lt;br /&gt;cd $packagedir&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf $packagedir&lt;br /&gt;done 2&amp;gt;&amp;amp;1 | tee -a ../app-7.5-2-compile.log&lt;br /&gt;tar -xjvf xcursor-themes-1.0.2.tar.bz2&lt;br /&gt;cd xcursor-themes-1.0.2&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf xcursor-themes-1.0.2&lt;br /&gt;cd /sources/xorg/font&lt;br /&gt;for package in $(grep -v '^#' ../font-7.5-2.wget)&lt;br /&gt;do&lt;br /&gt;packagedir=${package%.tar.bz2}&lt;br /&gt;tar -xvf $package&lt;br /&gt;cd $packagedir&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf $packagedir&lt;br /&gt;done 2&amp;gt;&amp;amp;1 | tee -a ../font-7.5-2-compile.log&lt;br /&gt;cd /sources/xorg &lt;br /&gt;tar -xzvf XML-Parser-2.36.tar.gz&lt;br /&gt;cd XML-Parser-2.36&lt;br /&gt;perl Makefile.PL&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf XML-Parser-2.36&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xjvf intltool-0.40.6.tar.bz2&lt;br /&gt;cd intltool-0.40.6&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;install -v -m644 -D doc/I18N-HOWTO /usr/share/doc/intltool-0.40.6/I18N-HOWTO&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf intltool-0.40.6&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xjvf xkeyboard-config-1.7.tar.bz2&lt;br /&gt;cd xkeyboard-config-1.7&lt;br /&gt;./configure $XORG_CONFIG --with-xkb-rules-symlink=xorg&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;install -dv -m755 $XORG_PREFIX/share/doc/xkeyboard-config-1.7&lt;br /&gt;install -v -m644 docs/{README,HOWTO}* $XORG_PREFIX/share/doc/xkeyboard-config-1.7&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf xkeyboard-config-1.7&lt;br /&gt;tar -xjvf luit-1.0.4.tar.bz2&lt;br /&gt;cd luit-1.0.4&lt;br /&gt;./configure $XORG_CONFIG&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf luit-1.0.4&lt;br /&gt;tar -xzvf pixman-0.15.20.tar.gz&lt;br /&gt;cd pixman-0.15.20&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pixman-0.15.20&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xjvf xorg-server-1.7.1.tar.bz2&lt;br /&gt;cd xorg-server-1.7.1&lt;br /&gt;./configure $XORG_CONFIG --with-module-dir=$XORG_PREFIX/lib/X11/modules --with-xkb-output=/var/lib/xkb --enable-install-setuid --disable-config-hal --disable-config-dbus&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf xorg-server-1.7.1&lt;br /&gt;cd /sources/xorg&lt;br /&gt;tar -xzvf xterm-253.tgz&lt;br /&gt;cd xterm-253&lt;br /&gt;sed -i '/v0/,+1s/new:/new:kb=^?:/' termcap&lt;br /&gt;echo -e '\tkbs=\\177,' &amp;gt;&amp;gt;terminfo&lt;br /&gt;TERMINFO=/usr/lib/terminfo ./configure $XORG_CONFIG --enable-luit --enable-wide-chars --with-app-defaults=$XORG_PREFIX/share/X11/app-defaults&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;make install-ti&lt;br /&gt;cat &amp;gt;&amp;gt; $XORG_PREFIX/share/X11/app-defaults/XTerm &amp;lt;&amp;lt; "EOF"&lt;br /&gt;*VT100*locale: true&lt;br /&gt;*VT100*faceName: Monospace&lt;br /&gt;*VT100*faceSize: 10&lt;br /&gt;*backarrowKeyIsErase: true&lt;br /&gt;*ptyInitialErase: true&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf xterm-253&lt;br /&gt;cd /sources/xorg/driver&lt;br /&gt;for package in $(grep -v '^#' ../driver-7.5-2.wget)&lt;br /&gt;do&lt;br /&gt;packagedir=${package%.tar.bz2}&lt;br /&gt;tar -xf $package&lt;br /&gt;cd $packagedir&lt;br /&gt;case $packagedir in&lt;br /&gt;xf86-input-evdev-[0-9]* | xf86-video-ati-[0-9]* | xf86-video-fbdev-[0-9]* | xf86-video-glint-[0-9]* | xf86-video-newport-[0-9]* )&lt;br /&gt;sed -i -e "s/\xc3\xb8/\\\\[\/o]/" -e "s/\xc3\xa4/\\\\[:a]/" -e "s/\xc3\x9c/\\\\[:U]/" man/*.man&lt;br /&gt;;;&lt;br /&gt;esac&lt;br /&gt;./configure $XORG_CONFIG --with-xorg-module-dir=$XORG_PREFIX/lib/X11/modules&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf $packagedir&lt;br /&gt;done 2&amp;gt;&amp;amp;1 | tee -a ../driver-7.5-2-compile.log&lt;br /&gt;ln -vsf $XORG_PREFIX /usr/X11R6&lt;br /&gt;mkdir -p /etc/X11 &amp;amp;&amp;amp;&lt;br /&gt;for file in $XORG_PREFIX/{lib/X11/xinit,share/X11/{app-defaults,twm}}&lt;br /&gt;do&lt;br /&gt;mv -v $file /etc/X11/ 2&amp;gt; /dev/null &amp;amp;&amp;amp;&lt;br /&gt;ln -v -s /etc/X11/$(basename $file) $file&lt;br /&gt;done&lt;br /&gt;cat &amp;gt; ~/.xinitrc &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# Begin .xinitrc file&lt;br /&gt;xterm  -g 80x20+0+0   &amp;amp;&lt;br /&gt;xclock -g 100x100-0+0 &amp;amp;&lt;br /&gt;twm&lt;br /&gt;EOF&lt;br /&gt;cat &amp;gt; ~/.bashrc &amp;lt;&amp;lt; "EOF"&lt;br /&gt;source /etc/profile&lt;br /&gt;EOF&lt;br /&gt;cat &amp;gt;&amp;gt; /etc/sysconfig/createfiles &amp;lt;&amp;lt; "EOF"&lt;br /&gt;/tmp/.ICE-unix dir 1777 root root&lt;br /&gt;EOF&lt;/pre&gt;After this has run, you will need to generate your xorg.conf file and edit away your your hearts content following these &lt;a href="http://justbloodywork.blogspot.com/2010/08/lap-x-part-8-drivers-and-configuration.html"&gt;instructions&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-4839503821320902836?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/4839503821320902836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/lap-all-in-one-xorg_05.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4839503821320902836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/4839503821320902836'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/lap-all-in-one-xorg_05.html' title='LAP - All in One - Xorg'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-2619059625903674365</id><published>2010-09-05T13:17:00.003+01:00</published><updated>2010-09-05T21:08:33.760+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LAP - All in One - Hardware</title><content type='html'>Once you have got the system booting, you can install all the compression and hardware stuff by the following script, again geditted into an executable file.&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;cd /dev/shm&lt;br /&gt;tar -xzvf /sources/network/wireless_tools.28.tar.gz &lt;br /&gt;cd wireless_tools.28 &lt;br /&gt;make &lt;br /&gt;make PREFIX=/usr install &lt;br /&gt;cd .. &lt;br /&gt;rm -rvf wireless_tools.28&lt;br /&gt;tar -xjvf /sources/network/net-tools-1.60.tar.bz2&lt;br /&gt;cd net-tools-1.60&lt;br /&gt;patch -Np1 -i /sources/network/net-tools-1.60-gcc34-3.patch&lt;br /&gt;patch -Np1 -i /sources/network/net-tools-1.60-kernel_headers-2.patch&lt;br /&gt;patch -Np1 -i /sources/network/net-tools-1.60-mii_ioctl-1.patch&lt;br /&gt;yes "" | make config&lt;br /&gt;sed -i -e 's|HAVE_IP_TOOLS 0|HAVE_IP_TOOLS 1|g' -e 's|HAVE_MII 0|HAVE_MII 1|g' config.h&lt;br /&gt;sed -i -e 's|# HAVE_IP_TOOLS=0|HAVE_IP_TOOLS=1|g' -e 's|# HAVE_MII=0|HAVE_MII=1|g' config.make&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make update&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf net-tools-1.60&lt;br /&gt;tar -xjvf /sources/network/dhcpcd-4.0.11.tar.bz2&lt;br /&gt;cd dhcpcd-4.0.11&lt;br /&gt;make PREFIX= LIBEXECDIR=/lib/dhcpcd DBDIR=/var/lib/dhcpcd SYSCONFDIR=/etc/dhcpcd &lt;br /&gt;make PREFIX= LIBEXECDIR=/lib/dhcpcd DBDIR=/var/lib/dhcpcd SYSCONFDIR=/etc/dhcpcd install &lt;br /&gt;sed -i "s;/var/lib/dhcpcd-;/var/lib/dhcpcd/dhcpcd-;g" dhcpcd-hooks/50-dhcpcd-compat &lt;br /&gt;install -v -m 644 dhcpcd-hooks/50-dhcpcd-compat /lib/dhcpcd/dhcpcd-hooks/ &lt;br /&gt;cd .. &lt;br /&gt;rm -rvf dhcpcd-4.0.11 &lt;br /&gt;tar -xjvf /sources/network/blfs-bootscripts-20090302.tar.bz2 &lt;br /&gt;cd blfs-bootscripts-20090302 &lt;br /&gt;make install-service-dhcpcd &lt;br /&gt;cd .. &lt;br /&gt;rm -rvf blfs-bootscripts-20090302 &lt;br /&gt;cat &amp;gt; ~/wifi_wl.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;rmmod b43 &lt;br /&gt;rmmod ssb &lt;br /&gt;rmmod wl&lt;br /&gt;rmmod lib80211&lt;br /&gt;modprobe lib80211&lt;br /&gt;modprobe wl&lt;br /&gt;dhcpcd -L -t 1 XXXX&lt;br /&gt;iwconfig XXXX essid "YYYY" key ZZZZ&lt;br /&gt;dhcpcd XXXX&lt;br /&gt;EOF&lt;br /&gt;chmod +x ~/wifi_wl.sh&lt;br /&gt;cat &amp;gt; ~/wifi_b43.sh &amp;lt;&amp;lt; "EOF"&lt;br /&gt;rmmod b43 &lt;br /&gt;rmmod ssb &lt;br /&gt;rmmod lib80211&lt;br /&gt;rmmod wl&lt;br /&gt;modprobe b43&lt;br /&gt;sleep 1&lt;br /&gt;iwconfig XXXX essid "YYYY" key ZZZZ&lt;br /&gt;dhcpcd XXXX&lt;br /&gt;EOF&lt;br /&gt;chmod +x ~/wifi_b43.sh&lt;br /&gt;tar -xjvf /sources/network/wget-1.12.tar.bz2 &lt;br /&gt;cd wget-1.12 &lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc &lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install &lt;br /&gt;install-info --info-dir=/usr/share/info /usr/share/info/wget.info &lt;br /&gt;cd .. &lt;br /&gt;rm -rvf wget-1.12&lt;br /&gt;tar -xzvf /sources/extras/lzma-4.32.7.tar.gz&lt;br /&gt;cd lzma-4.32.7&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make check&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf lzma-4.32.7&lt;br /&gt;tar -xzvf /sources/extras/unzip60.tar.gz&lt;br /&gt;cd unzip60&lt;br /&gt;make -f unix/Makefile linux&lt;br /&gt;make prefix=/usr install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf unzip60&lt;br /&gt;tar -xzvf /sources/extras/zip30.tar.gz&lt;br /&gt;cd zip30&lt;br /&gt;make -f unix/Makefile generic_gcc&lt;br /&gt;make prefix=/usr -f unix/Makefile install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf zip30&lt;br /&gt;tar -xzvf /sources/extras/bc-1.06.tar.gz &lt;br /&gt;cd bc-1.06 &lt;br /&gt;sed -i '/PROTO.*readline/d' bc/scan.l &lt;br /&gt;sed -i '/flex -I8/s/8//' configure &lt;br /&gt;sed -i '/stdlib/a #include ' lib/number.c &lt;br /&gt;sed -i 's/program.*save/static &amp;amp;/' bc/load.c &lt;br /&gt;./configure --prefix=/usr --with-readline &lt;br /&gt;make $CORES_TO_USE &lt;br /&gt;make install &lt;br /&gt;cd .. &lt;br /&gt;rm -rvf bc-1.06 &lt;br /&gt;tar -xzvf /sources/extras/openssl-0.9.8n.tar.gz &lt;br /&gt;cd openssl-0.9.8n &lt;br /&gt;patch -Np1 -i /sources/extras/openssl-0.9.8n-fix_manpages-1.patch &lt;br /&gt;tar -vxf /sources/extras/BLFS-ca-bundle-3.12.5.tar.bz2 &lt;br /&gt;./config --prefix=/usr --openssldir=/etc/ssl shared zlib-dynamic &lt;br /&gt;make $CORES_TO_USE &lt;br /&gt;make MANDIR=/usr/share/man install &lt;br /&gt;cp -v -r certs /etc/ssl &lt;br /&gt;install -v -d -m755 /usr/share/doc/openssl-0.9.8n &lt;br /&gt;cp -v -r       doc/{HOWTO,README,*.{txt,html,gif}} /usr/share/doc/openssl-0.9.8n &lt;br /&gt;for pem in /etc/ssl/certs/*.pem &lt;br /&gt;do &lt;br /&gt;cat $pem &lt;br /&gt;echo "" &lt;br /&gt;done &amp;gt; /etc/ssl/ca-bundle.crt &lt;br /&gt;cd .. &lt;br /&gt;rm -rvf openssl-0.9.8n &lt;br /&gt;tar -xjvf /sources/extras/lynx2.8.7rel.1.tar.bz2 &lt;br /&gt;cd lynx2-8-7 &lt;br /&gt;./configure --prefix=/usr --sysconfdir=/etc/lynx --datadir=/usr/share/doc/lynx-2.8.7rel.1 --with-zlib --with-bzlib --with-screen=ncursesw --enable-locale-charset --with-ssl &lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install-full &lt;br /&gt;chgrp -v -R root /usr/share/doc/lynx-2.8.7rel.1/lynx_doc &lt;br /&gt;sed -i 's/#\(LOCALE_CHARSET\):FALSE/\1:TRUE/' /etc/lynx/lynx.cfg &lt;br /&gt;sed -i 's/#\(DEFAULT_EDITOR\):/\1:nano/' /etc/lynx/lynx.cfg &lt;br /&gt;sed -i 's/#\(PERSISTENT_COOKIES\):FALSE/\1:TRUE/' /etc/lynx/lynx.cfg &lt;br /&gt;cd .. &lt;br /&gt;rm -rvf lynx2-8-7 &lt;br /&gt;tar -xzvf /sources/extras/doxygen-1.6.3.src.tar.gz &lt;br /&gt;cd doxygen-1.6.3 &lt;br /&gt;./configure --prefix /usr --docdir /usr/share/doc/doxygen-1.6.3 &lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install &lt;br /&gt;make install_docs &lt;br /&gt;cd .. &lt;br /&gt;rm -rvf doxygen-1.6.3 &lt;br /&gt;tar -jxvf /sources/audio/alsa-lib-1.0.21.tar.bz2&lt;br /&gt;cd alsa-lib-1.0.21&lt;br /&gt;./configure --enable-static &amp;amp;&amp;amp;&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install &amp;amp;&amp;amp;&lt;br /&gt;install -v -m644 -D doc/asoundrc.txt /usr/share/doc/alsa-lib-1.0.21/asoundrc.txt&lt;br /&gt;make doc&lt;br /&gt;install -v -d -m755 /usr/share/doc/alsa-1.0.21/html&lt;br /&gt;install -v -m644 doc/doxygen/html/* /usr/share/doc/alsa-1.0.21/html&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf alsa-lib-1.0.21&lt;br /&gt;tar -jxvf /sources/audio/alsa-plugins-1.0.21.tar.bz2&lt;br /&gt;cd alsa-plugins-1.0.21&lt;br /&gt;./configure&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;install -v -m755 -d /usr/share/doc/alsa-plugins-1.0.21&lt;br /&gt;install -v -m644 doc/{README*,*.txt} /usr/share/doc/alsa-plugins-1.0.21&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf alsa-plugins-1.0.21&lt;br /&gt;tar -jxvf /sources/audio/alsa-utils-1.0.21.tar.bz2&lt;br /&gt;cd alsa-utils-1.0.21&lt;br /&gt;patch -Np1 -i /sources/audio/alsa-utils-1.0.21-no_xmlto-1.patch&lt;br /&gt;./configure&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf alsa-utils-1.0.21&lt;br /&gt;tar -xjvf /sources/audio/blfs-bootscripts-20090302.tar.bz2&lt;br /&gt;cd blfs-bootscripts-20090302&lt;br /&gt;make install-alsa&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf blfs-bootscripts-20090302&lt;br /&gt;touch /etc/asound.state&lt;br /&gt;alsactl store&lt;br /&gt;cat &amp;gt; /etc/udev/rules.d/40-alsa.rules &amp;lt;&amp;lt; "EOF"&lt;br /&gt;# /etc/udev/rules.d/40-alsa.rules&lt;br /&gt;&lt;br /&gt;# When a sound device is detected, restore the volume settings&lt;br /&gt;KERNEL=="controlC[0-9]*", ACTION=="add", RUN+="/usr/sbin/alsactl restore %n"&lt;br /&gt;EOF&lt;br /&gt;chmod -v 644 /etc/udev/rules.d/40-alsa.rules&lt;/pre&gt;&lt;br /&gt;After you run this, remember you need to load on the b43 firmware, and you need to edit the wifi_*.sh scripts with your own settings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5718818273328171887-2619059625903674365?l=justbloodywork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justbloodywork.blogspot.com/feeds/2619059625903674365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/lap-all-in-one-hardware.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2619059625903674365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5718818273328171887/posts/default/2619059625903674365'/><link rel='alternate' type='text/html' href='http://justbloodywork.blogspot.com/2010/09/lap-all-in-one-hardware.html' title='LAP - All in One - Hardware'/><author><name>smoo bandit</name><uri>http://www.blogger.com/profile/15724333504028596665</uri><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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5718818273328171887.post-8757934414949097991</id><published>2010-09-04T18:05:00.010+01:00</published><updated>2010-09-05T21:09:24.509+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='linux from scratch'/><title type='text'>LAP - All in One - Actual Build</title><content type='html'>OK, now on with the actual build.  First you need to create the file system to work in.  This involves entering and exiting chroots, and restarting the shell, all of which break simple scripts like mine.  So do all of the starting stuff by pasting the first chunk of text into the terminal:&lt;br /&gt;&lt;br /&gt;&lt;pre class="postCode"&gt;sudo mkdir -v /media/lfs/{dev,proc,sys}&lt;br /&gt;sudo mknod -m 600 /media/lfs/dev/console c 5 1&lt;br /&gt;sudo mknod -m 666 /media/lfs/dev/null c 1 3&lt;br /&gt;sudo mount -v --bind /dev /media/lfs/dev&lt;br /&gt;sudo mount -vt devpts devpts /media/lfs/dev/pts&lt;br /&gt;sudo mount -vt tmpfs shm /media/lfs/dev/shm&lt;br /&gt;sudo mount -vt proc proc /media/lfs/proc&lt;br /&gt;sudo mount -vt sysfs sysfs /media/lfs/sys&lt;br /&gt;sudo chroot "/media/lfs" /tools/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin CORES_TO_USE=-j4 /tools/bin/bash --login +h&lt;br /&gt;mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt}&lt;br /&gt;mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}&lt;br /&gt;install -dv -m 0750 /root&lt;br /&gt;install -dv -m 1777 /tmp /var/tmp&lt;br /&gt;mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}&lt;br /&gt;mkdir -pv /usr/{,local/}share/{doc,info,locale,man}&lt;br /&gt;mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}&lt;br /&gt;mkdir -pv /usr/{,local/}share/man/man{1..8}&lt;br /&gt;for dir in /usr /usr/local; do&lt;br /&gt;  ln -sv share/{man,doc,info} $dir&lt;br /&gt;done&lt;br /&gt;case $(uname -m) in&lt;br /&gt; x86_64) ln -sv lib /lib64 &amp;&amp; ln -sv lib /usr/lib64 ;;&lt;br /&gt;esac&lt;br /&gt;mkdir -v /var/{lock,log,mail,run,spool}&lt;br /&gt;mkdir -pv /var/{opt,cache,lib/{misc,locate},local}&lt;br /&gt;ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin&lt;br /&gt;ln -sv /tools/bin/perl /usr/bin&lt;br /&gt;ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib&lt;br /&gt;ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib&lt;br /&gt;ln -sv bash /bin/sh&lt;br /&gt;touch /etc/mtab&lt;br /&gt;cat &gt; /etc/passwd &lt;&lt; "EOF"&lt;br /&gt;root:x:0:0:root:/root:/bin/bash&lt;br /&gt;bin:x:1:1:bin:/dev/null:/bin/false&lt;br /&gt;nobody:x:99:99:Unprivileged User:/dev/null:/bin/false&lt;br /&gt;EOF&lt;br /&gt;cat &gt; /etc/group &lt;&lt; "EOF"&lt;br /&gt;root:x:0:&lt;br /&gt;bin:x:1:&lt;br /&gt;sys:x:2:&lt;br /&gt;kmem:x:3:&lt;br /&gt;tty:x:4:&lt;br /&gt;tape:x:5:&lt;br /&gt;daemon:x:6:&lt;br /&gt;floppy:x:7:&lt;br /&gt;disk:x:8:&lt;br /&gt;lp:x:9:&lt;br /&gt;dialout:x:10:&lt;br /&gt;audio:x:11:&lt;br /&gt;video:x:12:&lt;br /&gt;utmp:x:13:&lt;br /&gt;usb:x:14:&lt;br /&gt;cdrom:x:15:&lt;br /&gt;mail:x:34:&lt;br /&gt;nogroup:x:99:&lt;br /&gt;EOF&lt;br /&gt;exec /tools/bin/bash --login +h&lt;br /&gt;touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}&lt;br /&gt;chgrp -v utmp /var/run/utmp /var/log/lastlog&lt;br /&gt;chmod -v 664 /var/run/utmp /var/log/lastlog&lt;br /&gt;exit&lt;br /&gt;sudo mount -v --bind /tmp /media/lfs/tmp&lt;br /&gt;sudo chroot "/media/lfs" /tools/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin CORES_TO_USE=-j4 /tools/bin/bash --login +h&lt;/pre&gt;Next, paste this text into gedit and save it as a script.  Make it executable and move it to the root of the Amiga Key to run it.&lt;pre class="postCode"&gt;cd /tmp&lt;br /&gt;tar -xjvf /sources/linux-2.6.32.8.tar.bz2&lt;br /&gt;cd linux-2.6.32.8&lt;br /&gt;make mrproper&lt;br /&gt;make headers_check&lt;br /&gt;make INSTALL_HDR_PATH=dest headers_install&lt;br /&gt;find dest/include \( -name .install -o -name ..install.cmd \) -delete&lt;br /&gt;cp -rv dest/include/* /usr/include&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf linux-2.6.32.8&lt;br /&gt;tar -xjvf /sources/man-pages-3.23.tar.bz2&lt;br /&gt;cd man-pages-3.23&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf man-pages-3.23&lt;br /&gt;tar -xjvf /sources/glibc-2.11.1.tar.bz2&lt;br /&gt;cd glibc-2.11.1&lt;br /&gt;DL=$(readelf -l /bin/sh | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p')&lt;br /&gt;sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$DL -o|" scripts/test-installation.pl&lt;br /&gt;unset DL&lt;br /&gt;sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in&lt;br /&gt;mkdir -v ../glibc-build&lt;br /&gt;cd ../glibc-build&lt;br /&gt;case `uname -m` in&lt;br /&gt;  i?86) echo "CFLAGS += -march=i486 -mtune=native -O3 -pipe" &gt; configparms ;;&lt;br /&gt;esac&lt;br /&gt;../glibc-2.11.1/configure --prefix=/usr --disable-profile --enable-add-ons --enable-kernel=2.6.18 --libexecdir=/usr/lib/glibc&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;cp -v ../glibc-2.11.1/iconvdata/gconv-modules iconvdata&lt;br /&gt;touch /etc/ld.so.conf&lt;br /&gt;make install&lt;br /&gt;mkdir -pv /usr/lib/locale&lt;br /&gt;localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8&lt;br /&gt;localedef -i de_DE -f ISO-8859-1 de_DE&lt;br /&gt;localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro&lt;br /&gt;localedef -i de_DE -f UTF-8 de_DE.UTF-8&lt;br /&gt;localedef -i en_HK -f ISO-8859-1 en_HK&lt;br /&gt;localedef -i en_PH -f ISO-8859-1 en_PH&lt;br /&gt;localedef -i en_US -f ISO-8859-1 en_US&lt;br /&gt;localedef -i en_US -f UTF-8 en_US.UTF-8&lt;br /&gt;localedef -i es_MX -f ISO-8859-1 es_MX&lt;br /&gt;localedef -i fa_IR -f UTF-8 fa_IR&lt;br /&gt;localedef -i fr_FR -f ISO-8859-1 fr_FR&lt;br /&gt;localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro&lt;br /&gt;localedef -i fr_FR -f UTF-8 fr_FR.UTF-8&lt;br /&gt;localedef -i it_IT -f ISO-8859-1 it_IT&lt;br /&gt;localedef -i ja_JP -f EUC-JP ja_JP&lt;br /&gt;localedef -i tr_TR -f UTF-8 tr_TR.UTF-8&lt;br /&gt;localedef -i zh_CN -f GB18030 zh_CN.GB18030&lt;br /&gt;localedef -i en_GB -f UTF-8 en_GB.utf8&lt;br /&gt;localedef -i en_GB -f ISO-8859-1 en_GB&lt;br /&gt;cat &gt; /etc/nsswitch.conf &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/nsswitch.conf&lt;br /&gt;&lt;br /&gt;passwd: files&lt;br /&gt;group: files&lt;br /&gt;shadow: files&lt;br /&gt;&lt;br /&gt;hosts: files dns&lt;br /&gt;networks: files&lt;br /&gt;&lt;br /&gt;protocols: files&lt;br /&gt;services: files&lt;br /&gt;ethers: files&lt;br /&gt;rpc: files&lt;br /&gt;&lt;br /&gt;# End /etc/nsswitch.conf&lt;br /&gt;EOF&lt;br /&gt;cp -v --remove-destination /usr/share/zoneinfo/Europe/London /etc/localtime&lt;br /&gt;cat &gt; /etc/ld.so.conf &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/ld.so.conf&lt;br /&gt;&lt;br /&gt;/usr/local/lib&lt;br /&gt;/opt/lib&lt;br /&gt;&lt;br /&gt;# End /etc/ld.so.conf&lt;br /&gt;EOF&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf glibc-2.11.1  glibc-build&lt;br /&gt;mv -v /tools/bin/{ld,ld-old}&lt;br /&gt;mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}&lt;br /&gt;mv -v /tools/bin/{ld-new,ld}&lt;br /&gt;ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld&lt;br /&gt;gcc -dumpspecs | sed -e 's@/tools@@g' -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' &gt; `dirname $(gcc --print-libgcc-file-name)`/specs&lt;br /&gt;tar -xjvf /sources/zlib-1.2.3.tar.bz2&lt;br /&gt;cd zlib-1.2.3&lt;br /&gt;./configure --prefix=/usr --shared --libdir=/lib&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;rm -v /lib/libz.so&lt;br /&gt;ln -sfv ../../lib/libz.so.1.2.3 /usr/lib/libz.so&lt;br /&gt;make clean&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;chmod -v 644 /usr/lib/libz.a&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf zlib-1.2.3&lt;br /&gt;tar -jxvf /sources/binutils-2.20.tar.bz2&lt;br /&gt;cd binutils-2.20&lt;br /&gt;expect -c "spawn ls"&lt;br /&gt;rm -fv etc/standards.info&lt;br /&gt;sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in&lt;br /&gt;mkdir -v ../binutils-build&lt;br /&gt;cd ../binutils-build&lt;br /&gt;../binutils-2.20/configure --prefix=/usr --enable-shared&lt;br /&gt;make $CORES_TO_USE tooldir=/usr&lt;br /&gt;make tooldir=/usr install&lt;br /&gt;cp -v ../binutils-2.20/include/libiberty.h /usr/include&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf binutils-2.20 binutils-build&lt;br /&gt;tar -xjvf /sources/gmp-5.0.0.tar.bz2&lt;br /&gt;cd gmp-5.0.0&lt;br /&gt;./configure --prefix=/usr --enable-cxx --enable-mpbsd&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;mkdir -v /usr/share/doc/gmp-5.0.0&lt;br /&gt;cp    -v doc/{isa_abi_headache,configuration} doc/*.html /usr/share/doc/gmp-5.0.0&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf  gmp-5.0.0&lt;br /&gt;tar -xjvf /sources/mpfr-2.4.2.tar.bz2&lt;br /&gt;cd mpfr-2.4.2&lt;br /&gt;./configure --prefix=/usr --enable-thread-safe&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;make html&lt;br /&gt;mkdir -pv /usr/share/doc/mpfr-2.4.2&lt;br /&gt;find . -name \*.html -type f -exec cp -v \{} /usr/share/doc/mpfr-2.4.2 \;&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf mpfr-2.4.2&lt;br /&gt;tar -xzvf /sources/file-5.04.tar.gz&lt;br /&gt;cd file-5.04&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf file-5.04&lt;br /&gt;tar -xjvf /sources/gcc-4.4.3.tar.bz2&lt;br /&gt;cd gcc-4.4.3&lt;br /&gt;sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in&lt;br /&gt;case `uname -m` in&lt;br /&gt;  i?86) sed -i 's/^T_CFLAGS =$/&amp; -fomit-frame-pointer/' gcc/Makefile.in ;;&lt;br /&gt;esac&lt;br /&gt;sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in&lt;br /&gt;sed -i 's/getline/get_line/' libiberty/testsuite/test-demangle.c&lt;br /&gt;mkdir -v ../gcc-build&lt;br /&gt;cd ../gcc-build&lt;br /&gt;../gcc-4.4.3/configure --prefix=/usr --libexecdir=/usr/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++ --disable-multilib --disable-bootstrap&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;ln -sv ../usr/bin/cpp /lib&lt;br /&gt;ln -sv gcc /usr/bin/cc&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf gcc-4.4.3 gcc-build&lt;br /&gt;tar -xjvf /sources/sed-4.2.1.tar.bz2 &lt;br /&gt;cd sed-4.2.1&lt;br /&gt;./configure --prefix=/usr --bindir=/bin --htmldir=/usr/share/doc/sed-4.2.1&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make html&lt;br /&gt;make install&lt;br /&gt;make -C doc install-html&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf sed-4.2.1&lt;br /&gt;tar -xzvf /sources/pkg-config-0.23.tar.gz&lt;br /&gt;cd pkg-config-0.23&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf pkg-config-0.23&lt;br /&gt;tar -xzvf /sources/ncurses-5.7.tar.gz &lt;br /&gt;cd ncurses-5.7&lt;br /&gt;./configure --prefix=/usr --with-shared --without-debug --enable-widec&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;mv -v /usr/lib/libncursesw.so.5* /lib&lt;br /&gt;ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so&lt;br /&gt;for lib in ncurses form panel menu ; do rm -vf /usr/lib/lib${lib}.so ; echo "INPUT(-l${lib}w)" &gt;/usr/lib/lib${lib}.so ; ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; done&lt;br /&gt;ln -sfv libncurses++w.a /usr/lib/libncurses++.a&lt;br /&gt;rm -vf /usr/lib/libcursesw.so&lt;br /&gt;echo "INPUT(-lncursesw)" &gt;/usr/lib/libcursesw.so&lt;br /&gt;ln -sfv libncurses.so /usr/lib/libcurses.so&lt;br /&gt;ln -sfv libncursesw.a /usr/lib/libcursesw.a&lt;br /&gt;ln -sfv libncurses.a /usr/lib/libcurses.a&lt;br /&gt;mkdir -v       /usr/share/doc/ncurses-5.7&lt;br /&gt;cp -v -R doc/* /usr/share/doc/ncurses-5.7&lt;br /&gt;make distclean&lt;br /&gt;./configure --prefix=/usr --with-shared --without-normal --without-debug --without-cxx-binding&lt;br /&gt;make $CORES_TO_USE sources libs&lt;br /&gt;cp -av lib/lib*.so.5* /usr/lib&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf ncurses-5.7&lt;br /&gt;tar -xjvf /sources/util-linux-ng-2.17.tar.bz2&lt;br /&gt;cd util-linux-ng-2.17&lt;br /&gt;sed -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' -i $(grep -rl '/etc/adjtime' .)&lt;br /&gt;mkdir -pv /var/lib/hwclock&lt;br /&gt;./configure --enable-arch --enable-partx --enable-write&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf util-linux-ng-2.17&lt;br /&gt;tar -xzvf /sources/e2fsprogs-1.41.10.tar.gz&lt;br /&gt;cd e2fsprogs-1.41.10&lt;br /&gt;mkdir -v build&lt;br /&gt;cd build&lt;br /&gt;../configure --prefix=/usr --with-root-prefix="" --enable-elf-shlibs --disable-libblkid --disable-libuuid --disable-uuidd --disable-fsck&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;make install-libs&lt;br /&gt;chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a&lt;br /&gt;gunzip -v /usr/share/info/libext2fs.info.gz&lt;br /&gt;install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info&lt;br /&gt;makeinfo -o      doc/com_err.info ../lib/et/com_err.texinfo&lt;br /&gt;install -v -m644 doc/com_err.info /usr/share/info&lt;br /&gt;install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info&lt;br /&gt;cd ../../&lt;br /&gt;rm -rvf e2fsprogs-1.41.10&lt;br /&gt;tar -xzvf /sources/coreutils-8.4.tar.gz&lt;br /&gt;cd coreutils-8.4&lt;br /&gt;case `uname -m` in&lt;br /&gt; i?86 | x86_64) patch -Np1 -i /sources/coreutils-8.4-uname-1.patch ;;&lt;br /&gt;esac&lt;br /&gt;patch -Np1 -i /sources/coreutils-8.4-i18n-1.patch&lt;br /&gt;./configure --prefix=/usr --enable-no-install-program=kill,uptime&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin&lt;br /&gt;mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin&lt;br /&gt;mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin&lt;br /&gt;mv -v /usr/bin/chroot /usr/sbin&lt;br /&gt;mv -v /usr/bin/{head,sleep,nice} /bin&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf coreutils-8.4&lt;br /&gt;tar -xjvf /sources/iana-etc-2.30.tar.bz2&lt;br /&gt;cd iana-etc-2.30&lt;br /&gt;make $CORES_TO_USE&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;rm -rvf iana-etc-2.30&lt;br /&gt;tar -xjvf /sources/m4-1.4.13.tar.bz2&lt;br /&gt;cd m4-1.4.13&lt;br /&gt;./configu
