Linux: convertire risoluzione di un video mp4

sudo apt-get install libav-tools
avconv -i input.mp4 -s xga output.mp4

Con il parametro -s si indica la risoluzione in cui convertire

sqcif
128×96

qcif
176×144

cif 352×288

4cif
704×576

16cif
1408×1152

qqvga
160×120

qvga
320×240

vga 640×480

svga
800×600

xga 1024×768

uxga
1600×1200

qxga
2048×1536

sxga
1280×1024

qsxga
2560×2048

sqcif
128×96

qcif
176×144

cif 352×288

4cif
704×576

16cif
1408×1152

qqvga
160×120

qvga
320×240

vga 640×480

svga
800×600

xga 1024×768

uxga
1600×1200

qxga
2048×1536

sxga
1280×1024

qsxga
2560×2048

 

sudo apt-get install mencoder
mencoder input.mp4 -vf scale=1280:720 -oac lavc -ovc x264 -o output.mp4

Con i parametri -oac e -ovc si sceglie il codec audio e video.

Per sapere quali sono i codec disponibili utilizzare i comandi

mencoder -oac help
mencoder -ovc help

Fonte: http://askubuntu.com/questions/160869/need-to-downsample-video-to-a-lower-resolution

Raspberry PI: freeze durante il download dati

Uso il Raspberry Pi durante la notte per eseguire il backup dati di alcuni siti sparsi su internet facendone il download dei dati.

Mi è capitati diverse volte che il Rasp-Pi vada in freeze e non risponda via rete. I log che trovo in /var/log/kern.log sono questi:

Apr 28 16:29:39 raspberrypi kernel: [85223.191749] net_ratelimit: 3722 callbacks suppressed
Apr 28 16:29:39 raspberrypi kernel: [85223.191790] smsc95xx 1-1.1:1.0: eth0: kevent 2 may have been dropped
Apr 28 16:29:39 raspberrypi kernel: [85223.191882] smsc95xx 1-1.1:1.0: eth0: kevent 2 may have been dropped
Apr 28 16:29:39 raspberrypi kernel: [85223.191961] smsc95xx 1-1.1:1.0: eth0: kevent 2 may have been dropped
Apr 28 16:29:39 raspberrypi kernel: [85223.192025] smsc95xx 1-1.1:1.0: eth0: kevent 2 may have been dropped

Googolando ho trovato questa possibile soluzione su http://www.raspberrypi.org/phpBB3/viewtopic.php?p=134136:

I performed the following suggested modifications mentioned in this thread.

  • Updated the firmware according to this blog post: http://www.stuffaboutcode.com/2012/07/raspberry-pi-kernal-panic-solved-by.html i.e. (add “sudo” before each command if you’re not logged in as root) 

    apt-get install git-core
    wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && chmod +x /usr/bin/rpi-update
    apt-get install ca-certificates
    rpi-update
  • Increased “vm.min_free_kbytes” to 16384 in /etc/sysctl.conf:

    nano /etc/sysctl.conf

    Replace the number 8192 after “vm.min_free_kbytes =” with 16384, i.e. double it.

  • Added “smsc95xx.turbo_mode=N” to /boot/cmdline.txt:

    nano /boot/cmdline.txt

    Paste “smsc95xx.turbo_mode=N” after all other entries in the file.

  • After that I pulled the plug, let the RPi rest for a few seconds before plugging it in again. Done!

Installazione e configurazione Subversion su Linux Debian

Di seguito riporto alcuni appunti per eseguire un’installazione e configurazione di base di Subversion su Debian:

Da super user installare il pacchetto:

apt-get install subversion

Creare il repository svn dall’utente su cui verranno ospitati i dati, nel mio caso l’ho creato nella mia home:

mkdir /home/david/svn
svnadmin create /home/david/svn/repos

Nel file /home/david/svn/repos/conf/passwd andranno indicati gli utenti e le relative password che potranno accedere al server svn:

user1 = password1
user2 = password2
...

Va anche modificato il file /home/david/svn/repos/conf/svnserve.conf come indicato di seguito:

#
# Sample /srv/svn/conf/svnserve.conf
#
[general]
 
# Path to the file containing svn users and passwords.
password-db = /srv/svn/conf/passwd
 
# Authentication realm of the repository. Two repositories using the
# same password-db should have the same realm.
realm = My-test-repository
 
# Deny all anonymous access (none=non permette di accedere senza password alla repository)
anon-access = none 
 
# Grant authenticated users read and write privileges
auth-access = write

Adesso è possibile lanciare il server svn in modo che sia accessibile via rete. Andrà indicato l’indirizzo ip dell’interfaccia di rete che deve rispondere alle richieste dei client e percorso del repository:

svnserve -d --listen-host 192.168.50.2 -r /home/david/svn/repos

Per fare in modo che il server svn venga avviato sempre all’accensione del pc, ho creato lo script /usr/local/bin/svn-daemon.sh contenente il comando sopra indicato e l’ho inserito nel crontab (crontab -e) dell’utente david come segue:

@reboot /usr/local/bin/svn-daemon.sh

A questo punto da Eclipse (io uso questo ambiente di sviluppo con installato il plugin Subversive che funziona da client svn) ho creato il repository svn andando su File/New/Other/SVN/Repository Location. Da qui ho specificato la url del server svn nella seguente forma (cube.home è il nome del pc che fa da server svn nella mia rete locale):

svn://cube.home

In più ho inserito l’utente e password specificate precedentemente nel file di configurazione.

Una volta creato il repository ho creato la cartella che ospiterà il primo progetto. L’ho fatto andando nella perspective SVN Repository Exploring (Window/Open Perspective/Other/SVN Repository Exploring).

Creata la cartella ho creato il primo progetto andando in File/New/Other/Project From SVN e da qui ho sfogliato il repository e ho selezionato la cartella precedentemente creata.

 

Sostituzione Hard Disk guasto su Debian Squeeze e ripristino sistema (e tre!!!)

Di seguito alcuni appunti ulteriori riguardo la sostituzione di un’Hard Disk guasto sul mio mini sistema Debian Squeeze trattato qui Sostituzione Hard Disk guasto su Debian Squeeze e ripristino sistema (secondo turno).

Può capitare che l’UUID della partizione di root e di swap sul nuovo disco siano diversi rispetto a quello vecchio e per questo una volta ripristinato grub il sistema non riesca a partire.

Per risolvere il problema bisogna, una volta che grub propone il profilo con cui avviare, premere il tasto e per entrare in edit mode e qui sostituire l’UUID del disco di root con il nome del device (es: /dev/sda2), fatto questo si avvia premendo ctrl-x.

Il sistema parte e una volta avviato andrà modificato il file /etc/fstab in modo da sostituire i vecchi UUID delle partizione di root e di swap.

E’ possibile recuperare il nuovo uuid per la partizione di root (nel mio caso /dev/sda2) con il seguente comando

tune2fs -l /dev/sda2 | grep UUID

Mentre per la partizione di swap viene visualizzato in seguito alla sua inizializzazione (nel mio caso /dev/sda1), attenzione il comando è distruttivo non sbagliate partizione:

mkfswap /dev/sda1

Adesso non ci resta che rigenerare la configurazione di grub con il seguente comando:

update-grub2

Adesso dovrebbe essere possibile riavviare il sistema in modo corretto.

 

Sostituzione Hard Disk guasto su Debian Squeeze e ripristino sistema (secondo turno)

Recentemente mi sono trovato ancora una volta ad avere problemi di hard disk sul mio mini server casalingo.

Quindi dopo avere recuperato un hard disk con cui potere sostituire quello guasto, ho ritirato fuori gli appunti che avevo annotato mesi addietro (Sostituzione Hard Disk guasto su Debian Lenny e ripristino sistema) per eseguire il ripristino del sistema sul nuovo disco.

Tutto è andato bene fino a che non sono arrivato a dovere ripristinare grub. Infatti adesso mi ritrovo grub2 installato sul sistema in seguito all’aggiornamento a Debian Squeeze, che per il quale non sono più valide le vecchie istruzioni.

Allora ho fatto un giro in rete e ho trovato la soluzione.

Ho ripristinato grub2 collegando il nuovo disco con il sistema già trasferito, sul mio notebook con Ubuntu 11.04, grazie ad un’adattatore ata-usb. Il disco viene riconosciuto come device /dev/sdb e la partizione con il sistema ripristinato è la /dev/sdb2. Ho impartito i seguenti comandi:

sudo mount /dev/sdb2 /mnt
sudo mount --bind /dev /mnt/dev
sudo chroot /mnt
grub-install /dev/sdb
sudo umount /mnt/dev
sudo umount /mnt

Adesso scollegato l’hd dal notebook e ricollegato sul mini-server questo è ripartito senza problemi 🙂

Android: abilitare a2sd+ da adb

E’ mia abitudine aggiornare la MIUI del mio Desire ogni settimana con l’uscita della nuova versione unstable.

In seguito all’aggiornamento ogni volta devo ripetere la procedura di riattivazione di a2sd+ come descrivevo qui HTC Desire: abilitare A2SD+ su MIUI.

Purtroppo però ultimamente dopo avere eseguito l’aggiornamento della MIUI mi era impossibile eseguire la procedura di riattivazione di a2sd+ perché si verificavano continui crash delle apps, compreso Android Terminal Emulator che usavo per impartire i comandi necessari. I crash continui presumo dipendano dal poco spazio rimasto nella partizione /data.

Per risolvere il problema ho provato a riabilitare a2sd+ da adb. Di seguito riporto i passi necessari:

  1. Riavviare in recovery mode con Clockworkmod
  2. dalla voce di menu mounts and storage montare le seguenti partizioni:
    • /system
    • /data
    • /cache (dovrebbe essere già montata)
    • /sdcard
    • /sd-ext
  3. Entrare in modalita shell da adb lanciando il seguente comando da terminale (è necessario l’Android SDK):
    • adb shell
  4. Ridefinire il path in questo modo:
    • PATH=’/sbin:/system/bin’
  5. Impartire i seguenti comandi per riattivare a2sd+:
    • system/bin/a2sd check
    • system/bin/a2sd reinstall (il telefono viene riavviato)
  6. Ripetere i passi 1, 2, 3, 4 e continuare con il seguente comando per terminare la riattivazione di a2sd+:
    • system/bin/a2sd cachesd (il telefono viene riavviato)

A questo punto, dopo il riavvio, a2sd+ dovrebbe essere attivo.

Io per precauzione, dopo avere riattivato a2sd+ da adb o ripetuto l’operazione in modo classico come spiegato qui HTC Desire: abilitare A2SD+ su MIUI.

Naturalmente nel caso decidiate di provare ad eseguire la procedura sopra indicata e il vostro amato telefono diventasse un costosissimo fermacarte, non mi assumo nessuna responsabilità 🙂

Android: installare suonerie, allarmi e notifiche della Sense dell’HTC Desire

Alcuni giorni fa ho scardinato il mio HTC Desire con Unrevoked3 e successivamente vi ho installato l’ultima MIUI unstable 1.8.5 (aggiornato poi alla 1.8.12).

Quello che subito mi è mancato sono state le suonerie e le notifiche che avevo sulla Sense della rom originale. Ho così cercato informazioni per creare un pacchetto update.zip che le contenesse per flasharle direttamente sulla rom Miui.

Il risultato è stato questo:

update_audio_sense_htc_desire.zip

Questo file l’ho flashato sul mio HTC Desire con Miui 1.8.12 partendo da recovery ClockworkMod ed è andato tutto bene.

Chi vuole può scaricarlo ed usarlo assumendosi tutti i rischi e pericoli. Quindi rendete inutilizzabile il vostro bel telefono non mi venite a chiamare 🙂

 

 

Android: creare un file update.zip

Mi appunto qui di seguito i passi per creare un file update.zip da utilizzare per flashare un aggiornamento/modifiche su una rom Android:

  • Creare una directory di lavoro e posizionarcisi dentro
  • Creare la struttura di directory/files da copiare/applicare alla rom
  • Creare la direcrotry META-INF/com/google/android e copiarci dentro il file update-binary
  • Sempre in META-INF/com/google/android creare il file updater-script contenente le istruzioni per applicare le modifiche alla rom
  • Creare un file zip con il nome update.zip inserendovi tutto il contenuto della directory di lavoro creata
  • Eseguire il sign del file update.zip nel seguente modo:
    • Scaricare il seguente il file Auto-Sign v0.65 e decomprimerlo
    • Copiare il file update.zip nella cartella di Auto-Sign
    • Eseguire il seguente comando (si suppone che sia installato Java sul proprio sistema):
      • java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update_signed.zip
A questo punto abbiamo ottenuto il file update_signed.zip che dovrà essere rinominato in update.zip, copiato sulla sdcard e flashato da recovery clockworkMod.
Queste note sono state scritte prendendo spunto da qui.

Android: sintassi e comandi per il file updater-script di un file update.zip

Di seguito riporto la sintassi dei comandi da inserire nel file updater-script di un file update.zip utilizzato per flashare gli aggiornamenti su una rom Andorid. Il tutto è stato ripreso da XDA, da qui e qui.

Mounting Partition

MTD
mount("MTD", "system", "/system");
mount("MTD", "userdata", "/data");
mount("MTD", "cache", "/cache");
mount("MTD", "sdcard", "/sdcard");
EMMC
mount("ext4", "EMMC", "/dev/block/mountpoint", "/system");
mount("ext4", "EMMC", "/dev/block/mountpoint", "/data");
mount("ext4", "EMMC", "/dev/block/mountpoint", "/cache");
 
mount("ext3", "EMMC", "/dev/block/mountpoint", "/system");
mount("ext3", "EMMC", "/dev/block/mountpoint", "/data");
mount("ext3", "EMMC", "/dev/block/mountpoint", "/cache");
 
mount("ext4", "EMMC", "/dev/block/mmcblk0p23", "/system");
mount("ext4", "EMMC", "/dev/block/mmcblk0p24", "/data");
mount("ext4", "EMMC", "/dev/block/mmcblk0p25", "/cache");

Unmounting Partitions

unmount("/system");
unmount("/data"); OR unmount("/userdata");
unmount("/cache");
unmount("/sdcard");

Format Partitions

format("MTD", "system");
format("MTD", "cache");
format("MTD", "data");
format("MTD", "boot");
 
format("ext4", "EMMC", "/dev/block/mountpoint");
 
format("ext3", "EMMC", "/dev/block/mountpoint");
 
format("ext4", "EMMC", "/dev/block/mmcblk0p23");
format("ext4", "EMMC", "/dev/block/mmcblk0p24");
format("ext4", "EMMC", "/dev/block/mmcblk0p25");
format("ext4", "EMMC", "/dev/block/mmcblk0p22", "/boot");

Copy files from .zip file to phone partition or sd card:

package_extract_dir("Source", "Destination");

Example:

package_extract_dir("system", "/system");
package_extract_dir("data", "/data");
package_extract_dir("sdcard", "/sdcard");

Output a line of text:

ui_print("Text Here");

Delete a file:

delete_recursive("file/path");
delete("/path/to/file");

Run Program

run_program("command", "parameter_1", "parameter_2" [, "parameter_2"[, ... ] ] );

Example:

run_program("/sbin/busybox", "umount", "/sd-ext");

Symbolic Link

symlink("source", "destination")

Example:

symlink("/data/etc/hosts", "/system/etc/hosts")