Treći monitor ili tablet kao dodatni monitor

Sa jednim HDMI i jednim VGA portom na laptopu svakodnevno aktivno koristim 2 monitora. Ali ponekad zatreba i treći, koji tu negde pored već stoji ali je prikačen na drugi računar.

Kako proširiti desktop monitorom koji je na drugom račuanaru? Može da se upotrebi i tablet.

Prvo da napravimo još jedan virtualni ekran (nisam siguran da li ovo radi na svakom Xorgu ili možda ima neke veze sa intel drajverima):

xrandr --addmode VIRTUAL1 1920x1200
xrandr --output VIRTUAL1 --mode 1920x1200 --right-of HDMI1

Rezolucija monitora koji ću koristiti za proširenje je 1920×1200 pa sam te veličine ekran i napravio, i postavljen je desno od ekrana koji stoji ispred mene i koji je na HDMI1 priključku.

Sada da pripremimo podešavanja na monitoru koji ćemo koristiti, na njemu je potrebno pokrenuti vncviewer u listener modu, preko celog ekrana. Kod mene je to također linux mašina i pokrenuću preko startx Xorg sesiju koja ima samo vncviewer u fullscreen modu. Moj .xinitrc:

#!/bin/bash
 
xset s off; xset -dpms
exec vncviewer -listen 5500 --ViewOnly=1 --FullScreen=1

Isključićemo dpms i blank screen da ne bi svako malo jurili tastaturu drugog računara i pokrenuti vncviewer.

I na kraju je još samo potrebno na prvom računaru pokrenuti x11vnc koji će sliku virtualnog ekrana slati na drugu mašinu/monitor.

x11vnc -clip 1920x1200+3000+720 -xwarppointer -connect 192.168.222.222:5500  -nocursorshape -noxdamage -repeat -noxinerama

Vrednost parametra clip možemo pročitati iz xrandr komande, to veličina + pozicija ekrana koja piše pored VIRTUAL1 porta.

Posted in linux | Leave a comment

Paralelno procesiranje podataka u MySQLu

Kod paralelne obrade podataka koji se nalaze u MySQL tabeli kao mehanizam zaključavanja odavno koristim polje u koje upisujem ID od procesa koji obrađuje trenutno neki slog. Ali se kao problem postavi šta se desi ako neki od tih procesa umre, i određeni slog ostane zaključan od strane procesa koji je umro i nikad ga neće otkljčati.

Ranije sam za to koristio file lock i scriptu koja monitoriše da li je neki child umro i u tom slučaju jednostavno oslobađa sve što je taj proces imao zaključano. Ali, postoji mnogo jednostavnije i lakše rešenje bez file lockova i procesa za monitoring.

Primer tabele:

CREATE TABLE `dataobj` (
  `id` INT(11) NOT NULL,
  `connection_id` INT(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Process zaključavanja određenog broja slogova koje ćemo procesirati:

UPDATE dataobj
SET connection_id = CONNECTION_ID()
WHERE 1=1
AND (connection_id = 0 OR connection_id NOT IN (SELECT id FROM information_schema.processlist))
LIMIT 2;

U where imamo kriterijum koji selektuje samo nezaključane slogove ( connection_id = 0 ), kao i one koji su zaključane od strane scripte koje su umrle (otkačile se sa baze). 1=1 je dodatni kriterijum ako želimo samo određene slogove da obrađujemo. A limit nam kontroliše kolko slogova želimo da preuzmemo za obradu.

Potom je potrebno da pokupimo one koje smo uspešno zaključali:

SELECT * FROM dataobj WHERE connection_id = CONNECTION_ID()

Po zavšenom poslu za odključavanje možemo da uradimo jednostavno setovanje connection_id polja na nulu.

Posted in scripts | Tagged | Leave a comment

Minimalna implementacija CPPa

Za predprocesiranje ~/.ssh/config fajla koristim CPP (C Preprocessor). Ali na chromebooku nemam instaliran GCC (pa ni CPP), pa sam napisao minimalnu verziju CPPa u perlu.

#!/usr/bin/perl -w
 
use strict;
use Data::Dumper;
 
my $vars = {};
my $state = [];
 
while (<>) {
        if (/^#define\s*([A-Za-z0-9_]*)/) {
                $vars->{$1} = 1;
                next;
        }
        if (/^#ifdef\s*([A-Za-z0-9_]*)/) {
                push(@$state, $1);
                next;
        }
        if (/^#ifndef\s*([A-Za-z0-9_]*)/) {
                push(@$state, '!'.$1);
                next;
        }
        if (/^#else/) {
                my $last = pop(@$state);
                if ($last =~ /^!(.*)$/) { $last = $1; }
                else { $last = '!' . $last; }
                push(@$state, $last);
                next;
        }
        if (/^#endif/) {
                pop(@$state);
                next;
        }
 
        my $cond = 1;
        foreach my $c (@$state) {
                if ($c =~ /^!(.*)$/) {
                        if (defined($vars->{$1})) {
                                $cond = 0;
                                last;
                        }
                } elsif ($c =~ /^(.*)$/) {
                        if (!defined($vars->{$1})) {
                                $cond = 0;
                                last;
                        }
                }
        }
        if ($cond) {
                s,//.*$,,;
                print $_;
        }
}

download pcpp.pl

Posted in admin, chromebook, linux, scripts | Tagged , , , , | Leave a comment

U malo pomoći PHPa na windowsu

Pošto mi je probleme najlakše rešavati na linuxu sa (pa neki script jezik, izmedju ostalog PHP), problem nastane kad treba nešto uraditi što treba instalirati negde gde nema linuxa.

Jedno od rešenja, staviću na svoj server i dati korisnicima URL, i to radi odlično, osim u slučajevima kad scriptama treba pristup nečemu što je u lokalnoj mreži. A rešenja za to: custom browseri, java apleti, vpn,… verovatno još neko kojeg se nisam setio drastično komplikuje.

PHP se lepo i elegantno vrti na windowsu, ali ako nije neka statična scripta, potreban je web server, e tu opet ima više opcija, ali instalirti apache zbog 2 php scripte koje će nešto uraditi mi je malo previše, ali je jedno od lepih rešenja.

Jednostavnije i elegantnije rešenje: PHP ima u sebi embedded web server, koji se jednostavno pokrene tako što se pozicionirate u document root direktorijum i pokrenete php -S localhost:8080 i dobili ste web server koji se vrti na localhostu i može se pristupiti browserom, a sa druge strane scripte imaju kompletno pristup svim lokalnim resursima.

Prozor koji stoji otvoren, briga klienta da li je tamo nešto (što nema pojma šta je) pokrenuto i slični problemi su vrlo neozbiljni, i opterećujući. Pa hajmo da napravimo windows service od PHPa.

Program se zove nssm. I sve što je potrebno je jedna .cmd scripta koja će podesiti service.

inssvc.cmd

nssm install phpweb C:\php\php.exe
nssm set phpweb AppParameters -S localhost:8080
nssm set phpweb AppDirectory C:\php\htdocs
nssm set phpweb AppStdout C:\php\logs\stdout.log
nssm set phpweb AppStderr C:\php\logs\stderr.log
nssm set phpweb AppStopMethodSkip 6
nssm set phpweb AppStopMethodConsole 1000
nssm set phpweb AppThrottle 5000
nssm start phpweb

I to bi trebalo da bude to. Usput možemo napraviti još nekoli .cmd fajlova da bi ako zatreba mogli lako da pokrenomo, zaustavimo, restartujemo server.

delsvc.cmd – deinstalacija servica

nssm stop phpweb
nssm remove phpweb

start.cmd – startovanje servica

nssm start phpweb

stop.cmd – stopiranje servica

nssm stop phpweb

start-console.cmd – startovanje u konzoli, ako vam je potrebno da lako vidite stderr

cd htdocs
..\php -S localhost:8080

Ovo je tek malo testirano kod mene na računaru, videćemo kako će se pokazati u praksi. Ja se nadam da neće biti nekih problema.

Posted in admin, php, scripts, windows | Tagged | 1 Comment

lvm snapshot mysql data dir

#!/bin/bash
 
(
echo "FLUSH TABLES WITH READ LOCK;"
echo "\! lvcreate -L +10G -s -n snap_userdata /dev/vol01/userdata"
echo "UNLOCK TABLES;"
) | mysql -u root
 
if [ -e /dev/vol01/snap_userdata ]; then
        mount /dev/vol01/snap_userdata /mnt/snap_userdata/
fi
Posted in admin, scripts | Leave a comment

Zaboravljeni bitcoin novčanik

Ovih dana se spominje restoran u Beogradu (Appetite) u kojem se račun može platiti u Bitcoinima, pa se setih da ja imam negde bitcoin novčanik.

Pre par godina kad sam imao ideju da se malo zanimam kopanjem bitcoina, malo sam testirao kako to funkcionishe i tada, sakupio neku beznačajnu svotu coina. Od čeka sam deo prebacio u novčanik, a deo je nesta sa poolom preko koga sam testirao kopanje. Tada je to bila neka beznačajna suma, bez ideje da se cimam kako to da kornvertujem u prave pare ili da ih nekako iskoristim… A pošto sad postoji restoran, ponadah se da možda odem na neku kaficu, onako malo zbog geeky osećaja :)

Skinem novu verziju Bitcoin-Qt novčanika, i skontam da imam tačno 1.5BTC, što po današnjem kursu je oko 1200USD :) Nešto što je pre dve godine bilo sića koja je zaostala tamo negde se u medjuvremenu protvorilo u malo više od nečeg za platiti kafu :) ))

Naravno ostaje pitanje, šta uraditi sa time, ostaviti da čekaju neka nova vremena ili možda konvertovati i potrošiti na nešto?

Posted in drustvo | Tagged | 4 Comments

Upload velikih fajlova preko PHPa

Upload fajlove u PHP je generlno uradjen na potpuno pogrešan nacin. Pretpostavka da ceo POST mora da stane u memoriju je sumanut zahtev.

Potencijalna reshenja zahtevaju promenu nacina na koji se fajl uploaduje, ili zamenu PHPa sa PERLom (npr) na server strani samo za procesiranje uploada.

Pre jedno godinu dana sam video zanimljiv nacin za komunikaciju embeded uredjaja sa web serverom. Ukratko: celo telo zahteva zavrshi u PHPu putem php://stdin handlera. I sad ostaje samo dilema kako to iskoristiti da browser misli da radi klasican upload (ecntype=”multipart/form-data”), a da PHP php ne iskoristi svoj interni mehanizam za pakovanje celog zahteva u memoriju i parserovanje. I reshenje postoji, upotrebom dva standardna Apache modula modifikujemo content-type requesta tako da ne bude multipart/form-data shto ujedno znaci da PHP nece parserovati. I to se moze raditi:

SetEnvIf content-type (multipart/form-data)(.*) NEW_CONTENT_TYPE=multipart/form-data-alternate$2 OLD_CONTENT_TYPE=$1$2
RequestHeader set content-type %{NEW_CONTENT_TYPE}e env=NEW_CONTENT_TYPE

Potom sve shto je potrebno, je PHP kod koji parserije multipart/form-data interno i bez smeshtanja u memoriju.

Provereno sa nekoliko browsera, potrebno je još testiranja, ali rešenje je vishe nego lako primenjivo i ne zahteva nikakvo modifikovanje ni browser koda, ni PHP scripte za upload. A to je omogućeno preloadom .php fajla.

php_value auto_prepend_file php-uploader.inc.php

Jedina modifikacija PHP parametra je potreba da vreme izvrsavanja scripte bude dovoljno veliko da bi klient sa sporom konekcijom mogao da uradi kompletan upload.

Source kod kompletnog reshenja: https://github.com/zsteva/php-uploader.

I kod mene na serveru test lokacija http://zsteva.info/upload

Posted in admin, linux, php | Leave a comment

Podešavanje privilegija nad LVM particijama

Zbog izolovanja pristupa, potrebno nam je promeniti default privilegije (root:disk 0660) nad odredjenim particijama, zapravo logičkim volumenima odredjene volumen grupe.

Potrebno je da korisnici grupe grp01 dobiju read/write nad /dev/vg01/part2.

Prvo da vidimo šta je zapravo /dev/vg01/part2:

zsteva@debian:~$ ls -la /dev/vg01/part2 
lrwxrwxrwx 1 root root 7 Sep 16 21:06 /dev/vg01/part2 -> ../dm-4

Kao što se vidi, to je simbolički link na /dev/dm-4.

zsteva@debian:~$ ls -la /dev/dm-4             
brw-rw---- 1 root disk 253, 4 Sep 16 21:06 /dev/dm-4

A /dev/dm-4 predstavlja block device sa minor, major brojevima 253, 4.

Debuging udev sistema, koji pravi simboličke linkove i podešava privilegije:

zsteva@debian:~$ sudo udevadm test /sys/dev/block/253\:4
run_command: calling: test
udevadm_test: version 164
This program is for debugging only, it does not run any program,
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

parse_file: reading '/lib/udev/rules.d/50-udev-default.rules' as rules file
parse_file: reading '/lib/udev/rules.d/55-dm.rules' as rules file
add_rule: NAME="" is ignored, because udev will not delete any device nodes, please remove it from /lib/udev/rules.d/55-dm.rules:57
parse_file: reading '/lib/udev/rules.d/56-lvm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-gnupg.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-kpartx.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-alsa.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-input.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-serial.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage-dm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage-lvm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage-tape.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-v4l.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-qemu-system.rules' as rules file
parse_file: reading '/dev/.udev/rules.d/61-dev-root-link.rules' as rules file
parse_file: reading '/lib/udev/rules.d/61-mobile-action.rules' as rules file
parse_file: reading '/lib/udev/rules.d/64-md-raid.rules' as rules file
parse_file: reading '/lib/udev/rules.d/70-acl.rules' as rules file
parse_file: reading '/lib/udev/rules.d/70-hid2hci.rules' as rules file
parse_file: reading '/etc/udev/rules.d/70-persistent-net.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-cd-aliases-generator.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-net-description.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-persistent-net-generator.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-probe_mtd.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-tty-description.rules' as rules file
parse_file: reading '/lib/udev/rules.d/78-sound-card.rules' as rules file
parse_file: reading '/lib/udev/rules.d/79-fstab_import.rules' as rules file
parse_file: reading '/lib/udev/rules.d/80-drivers.rules' as rules file
parse_file: reading '/lib/udev/rules.d/85-hwclock.rules' as rules file
parse_file: reading '/lib/udev/rules.d/91-permissions.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-keyboard-force-release.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-keymap.rules' as rules file
parse_file: reading '/etc/udev/rules.d/95-my-lvm-perm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/xen-backend.rules' as rules file
parse_file: reading '/lib/udev/rules.d/xend.rules' as rules file
udev_rules_new: rules use 27684 bytes tokens (2307 * 12 bytes), 17161 bytes buffer
udev_rules_new: temporary index used 18400 bytes (920 * 20 bytes)
udev_device_new_from_syspath: device 0x7fafd268dcc0 has devpath '/devices/virtual/block/dm-4'
udev_device_new_from_syspath: device 0x7fafd26761b0 has devpath '/devices/virtual/block/dm-4'
udev_device_read_db: device 0x7fafd26761b0 filled with db file data
udev_rules_apply_to_event: LINK 'block/253:4' /lib/udev/rules.d/50-udev-default.rules:1
udev_rules_apply_to_event: IMPORT 'dmsetup_env 253 4' /lib/udev/rules.d/60-kpartx.rules:12
util_run_program: 'dmsetup_env 253 4' started
util_run_program: '/lib/udev/dmsetup_env' (stdout) 'DM_UUID=LVM-lbhVtg7GsJChHSDJHYfbyX2XFwCtQTWei8AKiKZkjn1eHleETADez0k9ff1Kp9oV'
util_run_program: '/lib/udev/dmsetup_env' (stdout) 'DM_TABLE_STATE=LIVE'
util_run_program: '/lib/udev/dmsetup_env' (stdout) 'DM_STATE=ACTIVE'
util_run_program: '/lib/udev/dmsetup_env' (stdout) 'DM_NAME=vg01-part2'
util_run_program: 'dmsetup_env 253 4' returned with exitcode 0
udev_rules_apply_to_event: IMPORT 'kpartx_id 253 4 LVM-lbhVtg7GsJChHSDJHYfbyX2XFwCtQTWei8AKiKZkjn1eHleETADez0k9ff1Kp9oV' /lib/udev/rules.d/60-kpartx.rules:16
util_run_program: 'kpartx_id 253 4 LVM-lbhVtg7GsJChHSDJHYfbyX2XFwCtQTWei8AKiKZkjn1eHleETADez0k9ff1Kp9oV' started
util_run_program: '/lib/udev/kpartx_id' (stdout) 'DM_TYPE=raid'
util_run_program: 'kpartx_id 253 4 LVM-lbhVtg7GsJChHSDJHYfbyX2XFwCtQTWei8AKiKZkjn1eHleETADez0k9ff1Kp9oV' returned with exitcode 0
udev_rules_apply_to_event: GROUP 6 /lib/udev/rules.d/91-permissions.rules:4
udev_event_execute_rules: no node name set, will use kernel supplied name 'dm-4'
udev_device_update_db: created db file for '/devices/virtual/block/dm-4' in '/dev/.udev/db/block:dm-4'
udev_node_update_old_links: update old name, '/dev/mapper/vg01-part2' no longer belonging to '/devices/virtual/block/dm-4'
link_update: no reference left, remove '/dev/mapper/vg01-part2'
udev_node_update_old_links: update old name, '/dev/disk/by-id/dm-name-vg01-part2' no longer belonging to '/devices/virtual/block/dm-4'
link_update: no reference left, remove '/dev/disk/by-id/dm-name-vg01-part2'
udev_node_update_old_links: update old name, '/dev/disk/by-id/dm-uuid-LVM-lbhVtg7GsJChHSDJHYfbyX2XFwCtQTWei8AKiKZkjn1eHleETADez0k9ff1Kp9oV' no longer belonging to '/devices/virtual/block/dm-4'
link_update: no reference left, remove '/dev/disk/by-id/dm-uuid-LVM-lbhVtg7GsJChHSDJHYfbyX2XFwCtQTWei8AKiKZkjn1eHleETADez0k9ff1Kp9oV'
udev_node_update_old_links: update old name, '/dev/vg01/part2' no longer belonging to '/devices/virtual/block/dm-4'
link_update: no reference left, remove '/dev/vg01/part2'
udev_node_add: creating device node '/dev/dm-4', devnum=253:4, mode=0660, uid=0, gid=6
udev_node_mknod: preserve file '/dev/dm-4', because it has correct dev_t
udev_node_mknod: preserve permissions /dev/dm-4, 060660, uid=0, gid=6
node_symlink: preserve already existing symlink '/dev/block/253:4' to '../dm-4'
udevadm_test: UDEV_LOG=6
udevadm_test: DEVPATH=/devices/virtual/block/dm-4
udevadm_test: MAJOR=253
udevadm_test: MINOR=4
udevadm_test: DEVNAME=/dev/dm-4
udevadm_test: DEVTYPE=disk
udevadm_test: ACTION=add
udevadm_test: SUBSYSTEM=block
udevadm_test: DEVLINKS=/dev/block/253:4
udevadm_test: DM_UUID=LVM-lbhVtg7GsJChHSDJHYfbyX2XFwCtQTWei8AKiKZkjn1eHleETADez0k9ff1Kp9oV
udevadm_test: DM_TABLE_STATE=LIVE
udevadm_test: DM_STATE=ACTIVE
udevadm_test: DM_NAME=vg01-part2
udevadm_test: DM_TYPE=raid

Iz svega ovoga može svašta da se vidi, ali nas zanima ovo DM_NAME=vg01-part2. Pravljenjem fajla /etc/udev/rules.d/95-my-lvm-perm.rules sa sadržajem ćemo odabranom deviceu dodeliti drugu grupu:

ENV{DM_NAME}=="vg01-part2", GROUP="grp01"

Efekat može biti vidljiv odmah pokretanjem: sudo udevadm trigger komande.

Posted in admin, linux | Tagged , , , , | Leave a comment

Reverzni SSH tunel

Na svom računaru imate serversku aplikaciju koja zahteva da se konekcija napravi na njoj, a nemate javnu IP adresu, ili mogućnost da uradite port forward. Jedan od načina da obezbedite pristup “od spolja” do aplikacije je putem reverznog SSH tunela.

Potrebno nam je da imamo server koji ima javnu IP i slobodne portove koji su vidljivi (nisu zatvoreni firewallom), sa instaliranim OpenSSHom (linux serveri po defaultu ga imaju) i naravno admin account na njemu. U slučaju da nemate postojeći server, možete iskoristi neki jeftin VPS za te potrebe (već od 10-15 dolara godišnje).

Po defaultu remote port forward na serveru binduje localhost adresu, čime smo uskraćeni za pristup od spolja. Da bi smo to izbegli potrebno je na serveru modifikovati /etc/ssh/sshd_config.

GatewayPorts yes

I potom restartovati sshd:

/etc/init.d/sshd restart

Za potrebe tunela možemo koristiti neki od postojećih accounta na serveru ili napraviti novi sa:

adduser tunel

Sa client strane nam je potreban ssh client. I ako naprimer želimo da lokalni 5555 port forwardujemo na port 5555 na serveru. Sa Linuxa (u jednoj liniji):

ssh -g -R 5555:127.0.0.1:5555 -N -o ServerAliveInterval=10 
-o ServerAliveCountMax=2 tunel@server.domen.com

Argumenat -R 5555:127.0.0.1:5555 definiše šta forwardujemo. Prvi 5555 je port na serveru na kojem če čekati konekcije, 127.0.0.1 je adresa na koju će biti forwardovana konekcija ali sa lokalne strane (sa strane klienta) i drugi broj 5555 je port sa lokalne strane na koji će biti forwardovana.

Ako koristite windows, možete korititi plink.exe (u jednoj liniji):

plink.exe -N -keepalive 10 -R 0.0.0.0:5555:127.0.0.1:5555
tunel@server.domain.com

Argument -R 0.0.0.0:5555:127.0.0.1:5555 označava šta će biti forwardovano, 0.0.0.0 je bind adresa sa serverske strane, prva 5555 je port sa serverske strane na kojoj će se čekati konekcije. 127.0.0.1 adesa na koju ce se preusmeravati konekcija ali sa klientske strane, i drugi broj 5555 na koji port se preusmerava sa lokalne strane.

Krajnji rezultat, server.domen.com:5555 je vidljivo sa bilo kojeg računara na internetu, klienti koji treba da se nakače se kače na tu adresu, a SSH tunelom to preusmerava do našeg računara i pravi konekciju ka 127.0.0.1:5555. Dokle god je tunel otvoren to će funkcionisati tako. Imajte obzira na ograničenje brzine konekcije.

U slučaju da je port 5555 zauzet na serveru, nećete dobiti nikakvo upozorenje, a tunel neće raditi. Tako da ako nešto ne funkcioniše, probajte sa drugim portom.

Posted in admin, linux, network | Tagged , , , , | Leave a comment

GnuPG + vim enkripcija fajlova

Kratak guide kako da jednostavno koristite GnuPG i vim za transparentnu encripciju fajlova na disku.

Radite na linuxu, imate instaliran vim i gnupg, a mozda imate i gnupg-agent ako ne instalirajte i njega. Ako neshto od toga nemate a na ubuntu/debianu ste (apt-get install gnupg vim gnupg-agent ce vam pomoci).

Plugin za vim sa github vim-gnupg ubaciti u ~/.vim/plugins/.

Pravljenje gnupg kljuca: gpg –gen-key

I potom vim file.asc otvara vim sa dva prozora, gornji u koji upisemo primaoca, u našem slucaju to smo mi, tako da je potrebno navesti sopstvenu email adresu, kad snimimo buffer (ZZ) ostane nam samo donji prozor da u njemu upisemo sadrzaj fajla.

Na dalje otvaranjem tog fajla vim ce decryptovati sadrzaj, menjamo ga i na disk se snima enkriptovan. Passphase unosimo preko gnupg-agenta.

Da svaki put kod pravljenja ne bi unosili svoju email adresu možemo u ~/.vimrc dodati sledeće:

let g:GPGDefaultRecipients = ["user@domen.com"]
Posted in linux | Tagged , , , | Leave a comment