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

Kolko je zapravo WiFi brz

Juče sam merio dva brzinu mreže preko dva access pointa, i iskreno rečeno razočaran… Meni wirelessi uglavnom lepo služe svrsi, i lepo rade (ponekad i ponegde neki pravi problem, ali se to da rešeti), ali da su ovoliko spori, toga nisam bio svestan sve ove godine 🙂 Opet možda ja negde grešim…

Mereni su stari Linksys WRT54GL (stari poznati znalac svih linuxaša) i TpLink WR842ND (opet AP linux friendly, ovog puta sa OpenWrt firmwarelom u sebi). Merenje protoka radjeno sa mog Lenovo EDGE E330 laptopa, Intel Wireless-N 2230.

Linksys WRT54GL:

zsteva@edge:~$ nuttcp ROUTER
   17.0821 MB /  10.31 sec =   13.8982 Mbps 3 %TX 1 %RX 0 retrans 6.78 msRTT
zsteva@edge:~$ nuttcp -r ROUTER
   14.9637 MB /  10.28 sec =   12.2107 Mbps 0 %TX 7 %RX 0 retrans 30.18
msRTT
Testing from Serbia BroadBand-Srpske Kablovske mreze (.....35)...
Selecting best server based on ping...
Hosted by TARGO Telekom (Belgrade) [0.52 km]: 26.306 ms
Testing download speed........................................
Download: 12.71 Mbit/s
Testing upload speed..................................................
Upload: 3.46 Mbit/s

TpLink WR842ND

zsteva@edge:~$ nuttcp ROUTER
   39.4027 MB /  10.01 sec =   33.0125 Mbps 7 %TX 3 %RX 0 retrans 42.14
msRTT
zsteva@edge:~$ nuttcp -r ROUTER
   44.2157 MB /  10.19 sec =   36.3984 Mbps 1 %TX 12 %RX 0 retrans 32.84
msRTT
Testing from Serbia BroadBand-Srpske Kablovske mreze (......35)...
Selecting best server based on ping...
Hosted by TARGO Telekom (Belgrade) [0.52 km]: 30.041 ms
Testing download speed........................................
Download: 32.35 Mbit/s
Testing upload speed..................................................
Upload: 3.61 Mbit/s

Za poredjenje isto merenje sa 100MBps etherneta:

zsteva@edge:~$ nuttcp ROUTER
  113.4018 MB /  10.15 sec =   93.7484 Mbps 2 %TX 9 %RX 0 retrans 0.45 msRTT
zsteva@edge:~$ nuttcp -r ROUTER
  113.6553 MB /  10.17 sec =   93.7781 Mbps 2 %TX 8 %RX 0 retrans 0.47 msRTT
Testing from Serbia BroadBand-Srpske Kablovske mreze (.....35)...
Hosted by TARGO Telekom (Belgrade) [0.52 km]: 28.292 ms
Testing download speed........................................
Download: 38.72 Mbit/s
Testing upload speed..................................................
Upload: 3.84 Mbit/s
Posted in admin, linux, network | Tagged , , | Leave a comment

Migracija mysql servera

Migracija mysql servera sa jednog servera na drugi podrazumeva: kreiranja baza i podesavanje privilegija na novom, kao i import exporta sa starog. Priprema exporta bazi je jednostavna, ali ako ih ima dosta scripta moze pomoci. Ja obično imam urednu dokumentaciju sa SQL queriima za pravljenje baza i dodavanje korsnika/privilegija, ali ponekad je zgodnije uraditi export i toga. Dve scripte za pomoć oko exporta.

export_create_db_and_grants.sh – pravi create database i grant upite za pravljenje baza i dodeljivanja usera/privilegija na novom serveru:

#!/bin/bash
 
AUTH="-u root -ppassword"
 
echo "SELECT Concat('create database ', SCHEMA_NAME, ';') FROM INFORMATION_SCHEMA.SCHEMATA where SCHEMA_NAME NOT IN ('mysql', 'information_schema');" \
	| mysql $AUTH --silent --skip-column-names
 
echo 
 
echo "select concat('show grants for ', User, '@\\'', Host, '\\';') from user where User != 'debian-sys-maint';"  \
	| mysql $AUTH mysql --silent --skip-column-names \
	| mysql $AUTH --silent --skip-column-names \
	| sed -e 's/$/;/'

export_all_db.sh – export svih baza u ime_baze.sql fajl:

#!/bin/bash
 
AUTH="-u root -ppassword"
 
echo "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA where SCHEMA_NAME NOT IN ('mysql', 'information_schema');" \
	| mysql $AUTH --silent --skip-column-names \
	| while read DB; do
		echo "Exporting ${DB} to ${DB}.sql"
		mysqldump $AUTH $DB > ${DB}.sql
	done

Downaload: export_create_db_and_grants.sh export_all_db.sh

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

XEN network performance

XEN na squeezy debianu. Guest je debian u PV modu.

dom0 -> domU

external 100Mbs na dom0 (host)

external na domU

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

Provera NS rekorda u nadredjenom domenu

Promena DNS servera može da dovede do nedostupnosti domena. Informacija o podešenim DNS serverima može da se dobije iz whois-a ali je nepotpuna (uglavnom FQDN ali ne i IP adrese). Sa druge strane jednostavna komanda host -t NS domen.com će vratiti podešavanje NS rekorda iz samog domena, a ne ono što je podešeno u tabelama kod registratora, a što se propagira na DNS servere nadređenog domena.

Rešenje:

$ host -t NS com.

com name server a.gtld-servers.net.
com name server g.gtld-servers.net.
com name server d.gtld-servers.net.
com name server h.gtld-servers.net.
com name server e.gtld-servers.net.
com name server k.gtld-servers.net.
com name server l.gtld-servers.net.
com name server i.gtld-servers.net.
com name server c.gtld-servers.net.
com name server m.gtld-servers.net.
com name server f.gtld-servers.net.
com name server b.gtld-servers.net.
com name server j.gtld-servers.net.

Pa potom na jednom od navedenih servera NS lookup:
host -v -t NS domen.com j.gtld-servers.net.

Ili preko male scripte proveriti sve, mada se tu retko dešavaju odstupanja.

#!/bin/bash
 
DOMAIN="$1"
UPDOMAIN=$(echo ${DOMAIN} | sed -e 's/^[^\.]*\.//')
 
for UPDNSSRV in $(host -t NS $UPDOMAIN | sed -e 's/^.* name server //')
do
	echo "DNS ENTRY ON $UPDNSSRV"
	host -v -t NS ${DOMAIN} ${UPDNSSRV}
done
Posted in admin, linux | Tagged , , , | Leave a comment

Screen config file

Screen mi je jedan od najkoršćenijih programa svakodnevno, pošto dosta stvari radim na virtualnim mašinama i na serverima, onda mi je uvek najzgodnije da sve otvorim u screen sessiji kako bih kasnije mogao kad se vratim poslu da sve bude već otvoreno.

Nekoliko sitnica koje razlikuju od default podešavanja:

  • Escape key je CTRL-X – nekako najbliži je pod ruku, a ne kosi se sa i jednim često korišćenim.
  • Dole je dodata status linija sa satom, i sjevrsni tabovi
  • Dodati key bindovi da se tabovi mogu šetati sa SHIFT- Left/Right

Još bi moglo ovo da se sredi i optimizuje, ali meni skoro ne promenjen ovakav služi već godinama 🙂


startup_message off
chdir
vbell on
vbell_msg "bell on %t (%n)"

caption always "%{= bb}%{+b w}%n %h %=%t %c"
hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"

activity "Activity in %t(%n)"

defscrollback 5000
shelltitle "zshell"

defescape ^Xx
escape ^Xx

autodetach on
deflogin on
login on

#shell -/bin/zsh

# shift-left / shift-right
# gnome-terminal
bindkey "\033[1;2D" prev
bindkey "\033[1;2C" next
# urxvt
bindkey "\033[[d" prev
bindkey "\033[[c" next
# back scroll shift-up shift-down
bindkey "\033[1;2A" copy
bindkey "\033[1;2B" copy

#markkeys "h=^B:l=^F:$=^E"
#markkeys "\033[1;2A=^B:\033[1;2B=^F"

Fajl za download dot-screenrc

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

Dodavanje LAN štampača iz scripte na Windowsu

cscript prnport.vbs -a -r IP-OFFICE-GORE -h prn-office-gore.domen.com -n 9100
cscript prndrvr.vbs -a -m "HP Universal Printing PCL 6" -v 3 -e "Windows x64" -i pcl6\hpcu150u.inf -h pcl6\
cscript prnmngr.vbs -a -p "Office Gore" -m "HP Universal Printing PCL 6" -r IP-OFFICE-GORE

Potrebne scripte su na Windowsu 7 u %SystemRoot%\System32\Printing_Admin_Scripts\en-US

Još samo u praksi da se pokaže da ovo radi kako treba, na test računaru prošlo testiranje.

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