24 Sep

Recover files from old system LUKS drive

So a few weeks ago – at my very first lecture for this semester – my precious laptop (Sony Vaio Pro 13) gave in. I was rather upset, I must admit. However I actually got myself another one – with twice as much RAM and disk space (pretending it’s the same, altough I love new tech).

Now, the Vaio Pro 13 uses M.2 SSD disks, so backing up the old drive, which I of course kept, needed a M.2 to SATA adapter. Also I already got a SATA to USB. And although I have rather sophisticated backup routine for my machines, there are still things that there, on the old system, that I want – like PPAs, config files and what not (I really need to start backing them up as well). Of course one could to a complete restoration of the system, but I do very much like to combine a backup restore with the feeling of a freshly installed system, hence I recover only what I want.

20160924_131529

I plugged everything in. I’m using LUKS on all machines for better security so the passphrase promt showed up much to my appreciation, but. Error. Of course my heart rate rised. Trying a few times more; trying the disk utilty; on other computers; again in the new one. No change. Pop up the terminal to run the commands manual (I knew that it was /dev/sdb5 from error and disk utility):

$ sudo cryptsetup luksOpen /dev/sdb5 encrypt_oldhome

$ mkdir oldhome

$ sudo mount /dev/mapper/encrypt_oldhome oldhome/

mount: unknown filesystem type ‘LVM2_member’

And I though: ”What is this?”. I have the lvm2 package installed. Searching and found that it is due to the LVM groups of the old and new system having the very same name, which created the issue.[1]

So, of course one has to change that, but how? Well, using vgrename.[2]

Once again, in terminal, you run:

$ sudo vgdisplay

Here you locate the old LVM – and do be very sure about this so that you accidentally don’t rename the volume of currently running system. I made sure of this by looking at the size of the drives; my old one was 128GB and new is 256GB. Once located, you copy the ”VG UUID” and run this command:

$ sudo vgrename YOUR-VG-UUID ubuntu-vg-old

(”ubuntu-vg-old” is the new name, which the suffix ”old” is added from prevous ”ubuntu-vg”, which is Ubuntu’s default)

Now you are once again able to mount the old system by re-running the mount command, now without error:

$ sudo mount /dev/mapper/encrypt_oldhome oldhome/

So, in conclusion, the issue was that the new and old system’s volume group (LVM) had the same name. Solution was to change the name of the old drive’s LVM.

 

1: https://askubuntu.com/a/766141

2: http://www.cyberciti.biz/faq/warning-duplicate-vg-name-server01-error/

22 Apr

Dagens kommando: apt-cacher

Igår släpptes Ubuntu 16.04 LTS Xenial Xerus[0][1] och givetvis vad det dags för uppgradering. Då jag har flera maskiner som ska uppdateras så tänkte jag spara lite på bandbredden – dels för att minska påverkan på officiella spegelservrar men dels för att det är kul och att jag kan. Min laptop, min flickväns, min mors laptop (som har hängt med utan ominstallation sedan 11.10, vilket bara det är imponerande), farmor och farfars, mfl. står inför uppgradering av Ubuntu eftersom 16.04 är en LTS och verkar vara en riktigt bra sådan. Uppgraderingen hat gått bra – bättre än någonsin, skulle jag säga, och min laptop fungerade precis likadant som innan (bortsett från ownCloud-klienten vars indikator inte syns ännu, men det kommer antaligen att fixas snart). Det är en go Ubuntu-utgåva helt enkelt. Men det är inte det som jag ska tala om, utan hänvisar istället vidare för goa saker att göra efter installation[2] samt vad som är nytt[3][4].

Nej, istället tänkte jag tipsa om hur du, ifall du har flera maskiner att uppdatera, kan sätta upp en egen spegel (eller cache) så att du endast behöver ladda ner paketen en gång (från officiell spegelserver, alltså). Det hela är väldigt enkelt och du är klar på en kvart.

Vad du behöver är en maskin (alltså dator med Ubuntu – helst, men andra Debian-derivat eller Linuxdistar fungerar givetvis också, men med andra instruktioner för installation) som ska agera paketcache och sedan en eller flera andra maskiner att uppgradera. Jag kommer nedan att benämna denna maskin som server för enkelhetens skull och ”klient” till de som ska uppgraderas.

Server

  1. Installera paketet apt-cacher samt webservern apache2
    sudo apt-get install apt-cacher apache2
  2. Aktivera apt-cacher genom att redigera filen /etc/default/apt-cacher och ändra så att det står ”AUTOSTART=1” (utan citationstecken)
  3. Starta om Apache:
    sudo service apache2 restart
  4. Redigera nu filen /etc/apt-cacher/apt-cacher.conf och se till att du har aktiverat:
    allowed_hosts = * (om du nu vill att alla ska kunna använda servern som cache)
    distinct_namespaces = 1 (för att cacha paket för alla Ubuntu-utgåvor)

    Och, kanske viktigast, för att tillåta uppgradering av senare Ubuntu-utgåvor behöver du lägga till denna rad (en modifiering av orginal regexp) [5]:

    installer_files_regexp = ^(?:vmlinuz|linux|initrd\.gz|changelog|NEWS.Debian|[a-z]+\.tar\.gz(?:\.gpg)?|UBUNTU_RELEASE_NAMES\.tar\.gz(?:\.gpg)?|(?:Devel|EOL)?ReleaseAnnouncement(?:\.html)?|meta-release(?:-lts)?(?:-(?:development|proposed))?)$
  5. Starta nu om apt-cacher:
    sudo service apt-cacher restart
  6. Öppna nu en webbläsare och gå till http://server:3142 (med ”server” menas serverns IP eller hostname). Obs! Är serverns paket av äldre modell så kanske inte denna adress fungerar och du får istället använda dig av: http://server:3142/apt-cacher eller http://server/apt-cacher
  7. Högst upp på sidan står nu hur du kan gå tillväga gör att lägga till denna cache på din dator, så vi går vidare till detta.

Klienten

  1. Skapa och redigera filen /etc/apt/apt.conf.d/01proxy
    sudo nano /etc/apt/apt.conf.d/01proxy
    eller
    sudo gedit /etc/apt/apt.conf.d/01proxy
  2. Lägg till denna raden för att sedan spara och stänga: (”server” är återigen serverns IP eller hostname)
    Acquire::http::Proxy "http://server:3142";
  3. Kör sedan en uppdatering av paketlistor – förhoppningsvis fungerar allt som det ska:
    sudo apt-get update
  4. Klart! Ifall det nu är uppgradera Ubuntu du vill göra så kör du:
    sudo do-release-upgrade -d (för uppgradering i terminal, till exempel för servrar)
    eller
    sudo upgrade-manager -d (för grafisk uppgradering)

Vill du sedan inte använda servern som cache längre så tar du helt enkelt bort filen /etc/apt/apt.conf.d/01proxy

 

Referenser

0: Ubuntu 16.04 LTS Xenial Xerus is released!

1: Release Notes

2: 16 Things To Do After Installing Ubuntu 16.04 LTS

3: Ubuntu 16.04 LTS New Features

4: Ubuntu 16.04 LTS (Xenial Xerus) Available For Download, See What`s New

5: https://help.ubuntu.com/community/Apt-Cacher-Server

För mer om apt-cacher: https://help.ubuntu.com/community/Apt-Cacher-Server

10 Sep

Beta-testa nyare Spotify-klienter i GNU/Linux.

Upptäckte häromdagen att Spotify har ett testing-förråd som innehåller en uppdaterat Linux-klient. Den löser dels problemed med ett beroende av en äldre libgcrypt (11, medan tex. Ubuntu 15.04 har 20, eller 22, eller något), nytt utseende och buggfixar i UI. Dock saknar jag support för Ubuntus ljudkontroll-indicator, då det inte går att byta låt därifrån längre. Som jag förstod det så beror det på en ändring i DBus i denna beta-klient, och är påväg. Mest uppskattar jag en betydligt mindre buggig hantering av att spela upp musiken på andra enheter.

Hur som helst, såhär gör du: (detta är för Debian/Ubuntu)

Har du sedan tidigare Spotifys förråd på ditt system så rekomenderar jag dig att redigera filen: /etc/apt/sources.list.d/spotify.list
I den så ändrar du antingen ”stable” till ”testing” eller så kommenterar du ut den raden med ”stable” och lägger till en ny rad för ”testing”. När du gjort det så är det bara att läsa om paketlisten och uppgradera paketen:

sudo apt-get update; sudo apt-get upgrade

Har du däremot INTE Spotifys förråd på ditt system sedan tidigare så gör du såhär:

  1. Lägg till deras förrådsnyckel:
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys D2C19886
  2. Lägg till förrådet:
    echo deb http://repository.spotify.com testing non-free | sudo tee /etc/apt/sources.list.d/spotify.list
  3. Uppdatera paketlista och installera Spotify:
    sudo apt-get update; sudo apt-get install spotify-client

Du kan läsa mer om Spotify 1.x här: https://community.spotify.com/t5/Spotify-Announcements/Spotify-Client-1-x-beta-for-Linux-has-been-released/td-p/1147084

Och mer om senaste version, som i skrivande stund är 1.0.13 här: https://community.spotify.com/t5/Spotify-Announcements/Spotify-beta-1-0-13-for-Linux-released/td-p/1197675

10 Feb

Howto: Connect Bluetooth devices to Raspberry Pi

Here’s how to connect your Bluetooth devices to your Raspberry Pi. You need a Pi, a Bluetooth dongle and a way to connect to your Pi.

Connect dongle and check if it is recognized:
$ lsusb

Refresh DBus and reboot.
$ update-rc.d -f dbus defaults
$ sudo reboot

Then install all the needed packages.
$ sudo apt-get install bluetooth bluez-utils blueman

Turn on the device you wish to connect and set it to pairing, then start the scanning process to get the MAC address of the device:
$ hctitool dev

Now, you need to have your user account added to the ”bluetooth” group. For this example I use the default ”pi” user:
$ sudo usermod -a -G bluetooth pi

Now it is time to connect (while device still in pairing):
$ bluez-simple-agent hci0 60:C5:47:14:F0:A3

Make sure to set it as trusted:
$ bluez-test-device trusted 60:C5:47:14:F0:A3 yes

Finally connect:
$ bluez-test-input connect 60:C5:47:14:F0:A3

I had difficulties connecting to my Apple Bluetooth Keyboard since it’s on the actually device one has to enter the PIN code, so instead I used Blueman over SSH, which you can get help with here: Howto: X over SSH

After that I ran blueman-manager and paired a device by setup, using a random PIN, and entering it on my keyboard, and pressing Enter. Done.

9 Jul

How to create a simple web app for Ubuntu Touch.

DEPRECATED – It is now far easier to create a web app using the Ubuntu SDK.

So I’ve started to create some really simple applications for Ubuntu Touch by using already existing web pages that are optimized for touch devices and smart phones, and then open them in the default web browser, but as separate windows.

This guide will go through creating a simple launcher and package it for your device.

What you need before we start is a working development and package environment, so read this:

  • Some knowledge of the terminal.

  • If you later want to upload to Launchpad for a PPA, read and follow this:

    • http://developer.ubuntu.com/packaging/html/getting-set-up.html

  • You then also need a PPA, of course. I’m using ppa:danielholm/touch-apps for this.

We are going to use a simple desktop file that launches and points a URL that Ubuntu Touch’s

browser opens as it’s own application. You get one of your favorite web sites as an app and you get HUD support for free.

Then we add the package stuff, and download an icon to use; build and then done!

And if you also upload your app to a PPA, others will enjoy it as well.

Later, I will stop using Debian packages for these kind of apps, since I figure that the new Click packages is being developed just to be used for applications like these.

Alright, so let’s get going. I’m going to use Wikipedia as an example for this.

If you already know the URL of the mobile adapted web site, use that.

For example, Wikipedia has: http://m.wikipedia.com

1. Download the archive, which contains a template and packaging files: http://ubuntuone.com/4cP0vdGTMd8LsWjru4cTya
If you already know that you don’t want to create a package and upload to an PPA, use the .desktop template: http://ubuntuone.com/2EeECluBvimv1KkcDCDoQv

2. Edit wikipedia.desktop and change the values of ”Name”, ”Icon”, and the URL in ”Command”.
Name: The one that will show in Unity. I’ll use “Wikipedia”
Icon: Path of the icon you want to use.
Command: Replace only the URL. The browser handles the rest.

3. Save it, and change the filename to your new app’s name. I’ll use wikipedia.desktop
(be sure that this file is executable! (chmod +x))

4. Open the Debian directory and open postinst. This file will be run after initial install of the package files, and will here be used to download the icon that will be used. I’m using it this way so that I can redistribute the launcher without any copyright infringement. You simple take the URL of an icon/image you want to use, and replace the one in the file. Then change the filename that the downloaded file is saved as, as well as the app directory. I’ll use the Wikipedia icon from Play Store: https://lh6.ggpht.com/-Eq7SGa8CVtZCQPXmnux59sebPPU04j1gak4ppkMVboUMQ_ucceGCHrC1wtqfqyByg=w78-h78

5. Each of these files has to be edited (in debian/). Replace all Wikipedia stuff with your own app name and info.

  • changelog

  • control

  • copyright

  • install

6. When all the files [that needs to] has been edited, it’s time to imitate some version control in your working dir, using bzr:

$ bzr init

7. Then add the files in the dir:

$ bzr add

8. Lastly create a commit with a appropriate message:

$ bzr commit -m ”Initial commit.”

9. Time to get building! In your working dir, run:

$ bzr builddeb -S

This creates the needed files to upload and create packages in the PPA, which we’ll upload:
(this is to my PPA. You have to use your own)

dput ppa:danielholm/touch-apps wikipedia_0.1_source.changes

10. After a while you package will be ready to apt-get (after you’ve added your PPA, of course).

Enjoy your app, and to please share it.

I set up a recipe to build my packages automagically (yes, magic) every night – if there is a change – in launchpad. If you use this, you don’t have to upload your own packages, and you just need to upload your code to Launchpad.

Since my apps aren’t from anywhere else, I removed the upstream version in my recipe, and replaced it with my own version number, in this case “0.1”. There’s probably a better way of doing that, but I leave that for others to resolve.

14 Mar

Clean out unwanted comments.

I had some kind of issue with my spam filter, and my database was filled with like 6000 pages of spam (30 per page, so round 180 000 spam comments). And the thing is, that they take up a LOT of data space. I started to sort them out using the Drupal UI, but later found that the database still was rather large (~150 MB compressed). I took a look in the database and found that the data values where still there, altough I’ve removed the linkage of the comment from the nodes. So i still had these ~ 200 000 spam comments.

Well, I have plenty of backups, and altough 150 MB isn’t that much it becomes quite a lot in time – so I wanted to remove the data values in the database too, and here’s how you do it:

 

The table ”comment” contains the ”visible” comments. It also contains a comment id (cid). The two tables ”field_data_comment_body” and ”field_revision_comment_body” contains the full comments. These are the rows we want to remove. the table ”comment” shows only the comment which I’ve already ”deleted”, but the other two still has the comments and use a lot of space. So by a simple MySQL Query, they will be gone, by using the cid’s from ”comment”.

I use phpMyAdmin, and chose the database of this site, and clicked the mysql button, then pasted this and ran it:

Delete from field_data_comment_body:
DELETE FROM field_data_comment_body
WHERE entity_id NOT IN
       (SELECT cid
        FROM comment
        WHERE cid is NOT NULL
      )

 

And then from field_revision_comment_body:
DELETE FROM field_revision_comment_body
WHERE entity_id NOT IN
       (SELECT cid
        FROM comment
        WHERE cid is NOT NULL
      )

 

What is does? Well, it removes all the rows from the field_*_comment_body tables that does not have a entity_id that corresponds with the cid from the comment table.

As easy as that! Now you only have the comments which you agreed to using the Drupal UI. And my compressed database backup as shrunk to 15MB(!).

21 Jan

How To: Deluge som tunn klient.

Har du som jag en Deluge daemon igång på en separat dator och är trött på att behöva gå in på en WebUI för Deluge för att göra det du ska?

Då har du kommit rätt. Jag fann idag att det fanns ett integrerat sätt i Deluge för att använda det Deluge du har installerat på din lokala dator som en framände mot det Deluge som körs på en separat dator/server.

Starta först Deluged, om det inte redan är igång.

Sedan Deluges WebUI på den dator du vill kunna koppla upp dig till och fyll i inställningarna att du ville kunna fjärrstyra det.

Kör sedan;
$ deluge -u console
$ config -s allow_remote True
$ exit
$ echo -e ”\n<username>:<password>” >> ~/.config/deluge/auth

Gå sedan över till den dator som du vill koppla upp dig med, alltså framänden. Starta Deluge, gå in i inställningarna > Gränssnitt och klicka ur ”Klassiskt läge”.

Starta om Deluge och det ska komma upp en uppkopplingsruta. Klicka på lägg till och fyll i IP till den separata datorn och tryck på Ok. Koppla sedan upp dig och du ska se de torrents på den andra datorn som om de låg på din.