ToH openwrt na google spreadsheets wraz (szacunkowymi) cenami

Październik 14th, 2013 Brak komentarzy

Ze względu na to, że znalezienie rutera pod nasze potrzeby potrafi być kłopotliwe napisałem w wolnym czasie scrapper pobierający dane z serwisu aukcyjnego oraz http://wiki.openwrt.org/toh/ w celu skompletowania listy ruterów dostępnych w Polsce (wraz z ich parametrami). Obecnie lista znajduje się tutaj .

Od razu chciałbym zwrócić uwagę na błędy i niedoróbki:

  • ceny są podane jako średnia i mediana jedynie pierwszych 10 aukcji lub mniejszej ilości
  •  jako słowa kluczowe w wyszukiwarce serwisu aukcyjnego użyty został jest jedynie model i producent urządzenia bez dodatkowego filtrowania (czyli bardzo często mamy w wynikach inne urządzenia, szczególnie wersje tych samych modeli)
  •  w ToH nazwy atrybutów nie są ujednolicone i scrapper tego stanu rzeczy nie poprawia

Pomimo wad uważam, że i tak ułatwia to przeglądania dostępnych opcji. By skorzystać z filtrów i sortowania google spreadsheets należy niestety skopiować arkusz (operacje te są traktowane jako edycja).

Co do źródeł samego scrapper (napisanego przy pomocy scrapy ) – udostępnię je w najbliższych dwóch tygodniach.

Kategorie:openwrt Tagi:, ,

OpenWrt secure ad-hoc (RSN/WPA2)

Lipiec 20th, 2013 4 comments

Following guide was tested with tp-link 1043nd (atheros-based) router.

AFAIK `luci’ doesn’t allow to configure adhoc (IBSS) interface with anything better than WEP. This is of course an issue as its much widely know to be too weak and easily hackable. WPA2-PSK seems to be much more sensible if pre-shared-key is not easily crackable with dictionary attacks.

Actuall configuration is quite straight forward. The only thing that must be watched for is config options used during wpa_supplicant compilation – you need „CONFIG_IBSS_RSN=y” to be defined. Judging from sources of current openwrt stable („Attitude Adjustement”) it seems wpad-mini package is missing that functionality, where wpad should be good to go.
Following commands will remove wpad-mini from the system and replace it with wpad.

opkg remove wpad-mini
opkg install wpad

Now the actual config file for your wireless (/etc/config/wireless) network should look like:

#this section can be different for your specific card / preferences - keep what you have already
config wifi-device 'radio0'
	option type 'mac80211'
	option macaddr '00:00:00:00:11:22'
	list ht_capab 'SHORT-GI-40'
	list ht_capab 'DSSS_CCK-40'
	option channel '1'
	option country 'PL'
	option txpower '20'
	option hwmode '11ng'
	option htmode 'HT40+'

#this section is only needed if you also want to have AP functionality preserved
config wifi-iface
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option ssid 'APname'
	option encryption 'psk2'
	option key 'yourAPpskSecret'

#your secure adhoc config is here
config wifi-iface
	option device 'radio0'
	option encryption 'psk2'
	option mode 'adhoc'
	option network 'lan2' #you need this network to be defined earlier
	option ssid 'yourAdhocNetwork'
	option key 'yourSecretPSK'

Similar post for raspberry pi (raspbian distro)

Automatically configure Alix to boot with PxE

Lipiec 15th, 2013 Brak komentarzy

As every engineer I hate repetitive tasks and configuration of >10 devices is exactly that, so here is small script which will automagically configure PoE on ALIX ( http://pcengines.ch/alix.htm ). Tested with alix2d2, but should work with every other alix with the same BIOS.

This little script is coded with python3 (+pyserial). Of course I could use minicom-runscript, but I don’t think learning new language for every little thing is the best way to do things ™. Script is very simple as the task itself.

How to use:
1. Run script (python3 alix_poe_script.py)
2. plug serial port to the alix board (still powered off)
3. power on alix
4. wait for the script to notify you it is done with testing (should take around 5 seconds)
and repeat from step 2

#!/usr/bin/python

import serial
import time
import sys

class alix_serial:
    state_dict = {
            "PC Engines" : "booted",
            "Base Memory" : "memoryReset",
            "BIOS setup" : "bios",
            "(E) PXE boot enable" : "PXEdisabled",
            "*E* PXE boot enable" : "PXEenabled",
            "Intel UNDI, PXE-" : "PXEworking",
            }

    def __init__(self, port):
        self.serial =  serial.Serial(port=port, baudrate=38400, timeout = 1)

    def read_state(self):
        timeout = time.clock() + 10.0
        self.state = None
        while self.state == None and time.clock()<timeout:
            line = self.readline()
            for pattern in self.state_dict.keys():
                if pattern in str(line):
                    self.state = self.state_dict[pattern]

    def readline(self):
        return self.serial.readline()


    def input(self, k):
        self.serial.write(k.encode("UTF-8"))

    def enable_pxe(self):
        testing = False
        while True:
            self.read_state()
            if self.state == None:
                print("Unkown state, probably power-cycle is needed!")
                return False
            elif self.state == "booted":
                print("Booting")
            elif self.state == "memoryReset":
                print("memory reset")
                if testing == False:
                    print("trying to enter bios")
                    self.input("s")
            elif self.state == "bios":
                print("BIOS entered")
            elif self.state == "PXEdisabled":
                print("PXE disabled, trying to enable")
                self.input("e")
            elif self.state == "PXEenabled":
                print("PXE enabled!, saving and rebooting to test")
                testing = True
                self.input("q")
                time.sleep(0.1)
                self.input("y")
            elif self.state == "PXEworking":
                print("PXE is configured and tested!")
                return True


    def close(self):
        self.serial.close()


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("you need to provide serial dev name (e.g. /dev/ttyUSB0)")
        sys.exit(-1)
    alix = alix_serial(sys.argv[1])
    while True:
        alix.enable_pxe()

Kategorie:skrypty Tagi:, ,

compat-drivers for Raspberry pi (raspbian with kernel 3.6.11+ )

Lipiec 14th, 2013 Brak komentarzy

This guide was made for 2013-05-25-wheezy-raspbian.img, and current git sources (2013-07-13). The main problem is that for module-only compilation you require original kernel sources and Module.symvers file, which is not provided in raspbian image. As I use here git sources directly at some point (when raspberry moves one to newer kernel version in stable) it will stop working, unless you keep updating your kernel accordingly and/or change below links a bit.

wget https://github.com/raspberrypi/linux/archive/rpi-3.6.y.tar.gz
tar xvf rpi-*.tar.gz

cd linux-rpi-3.6.y
sed -i 's/EXTRAVERSION =.*/EXTRAVERSION = +/' Makefile
wget http://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers

zcat /proc/config.gz > .config
make oldconfig
make modules_prepare

KSRC=`pwd`
pushd /lib/modules/`uname -r`
sudo ln -s ${KSRC} source
sudo ln -s ${KSRC} build
popd

pushd /usr/src
sudo ln -s ${KSRC} linux-`uname -r`
sudo ln -s ${KSRC} linux
popd

Remember that you just linked (ln) files you downloaded and unpacked, so after doing above you can no longer move them.

Now lets download compat-drivers. Lookup other versions on https://www.kernel.org/pub/linux/kernel/projects/backports/stable/ .
Running „driver-select” script is optional, but you can run into some problems if you try to compile every driver. Also it would take that much longer.

wget https://www.kernel.org/pub/linux/kernel/projects/backports/stable/v3.8.2/compat-drivers-3.8.2-2-su.tar.gz
tar xvf compat-drivers-*.tar.gz
cd compat-drivers-*

./scripts/driver-select ath9k_htc
make
sudo make install #copies files into /lib/modules/
sudo make unload

Just to be sure restart whole raspberry (sudo reboot). You can check if it did work by running lsmod and searching for module named „compat”, which basically just marks kernel with backported drivers.

Kategorie:raspberrypi Tagi:,

Changing cyanogen on samsung galaxy tab 10.1 from wifi (p4-wifi) to gsm (p4)

Listopad 17th, 2012 Brak komentarzy

After first try I realised that I choose wrong firmware for my device, which worked fine, but were missing gsm functionality. When I tried applying the proper one in recovery mode assert script checking current version wouldn’t let me – and function „toggle assert scripts” wasn’t any help either.


Installing update...
assert failed: getprop("ro.product.device") == "p4" || getprop("ro.build.product") == "p4"
E:Error in /sdcard/cm-10-20121116-NIGHTLY-p4.zip
(Status 7) Installation aborted.

Simplest solution that I came up was removing assert script all together:


unzip cm-10-20121116-NIGHTLY-p4.zip
vim META-INF/com/google/android/updater-script #remove first line (that with assert)
zip -r cm-10-p4-wo-assert.zip META-INF/ system boot.img

Which worked like a charm, but I recommend checking that we got right version of firmware twice to avoid destroying the device.

Kategorie:android Tagi:, ,

Vmware, LVM, resize (grow) logical volume on-the-fly

Październik 6th, 2012 Brak komentarzy

For „real” machine (not virtualised with vmware) you can just add another harddrive, or reuse other partition/freespace on old hdd. As for VirtualBox AFAIK it doesn’t allow to resize disk on-the-fly nor attach new disk, but I can be wrong.

  1. change size under vmware software
  2. rescan disc geometry (detect change in size, should be visible with fstab -l)
    for dev_rescan in `ls /sys/class/scsi_device/*/device/rescan` ; do echo 1 > $dev_rescan; done
    
  3. create new partition with fdisk (covering new found free space on disk)
    You may force detection of new partion by running
    partx -a /dev/sda

    or rebooting
    4. add new pv

  4. pvcreate /dev/sda3 #(change it to the name of new partition)
    
  5. extend vg

    vgextend yourvgname /dev/sda3 #(change it to the name of new partition)
    
  6. extend lv

    #(you can see how much space you acquired with vgdisplay)
    lvextend -L+20G /dev/yourvgname/yourlvname
    
  7. resize filesystem – in this case ext3

    resize2fs /dev/yourvgname/yourlvname
    
  8. check if you succeed

    df -h
    
Kategorie:linux server Tagi:, ,

Dynamiczne wykresy z Matplotlib i PyQT4 (przeróbka przykładu pod wxwidgets)

Maj 24th, 2012 Brak komentarzy

Sam przykład został zabrany z http://keithlscott.wikispaces.com/Matplotlib . Starałem się nie modyfikować nic po za przejściem z wx na qt. Można by trochę z layoutem pogrzebać, ale sam przykład działa poprawnie. Gdy postawi się oba kody obok siebie ładnie widać różnice między Qt, a wxwidgets.
Czytaj więcej…

Kategorie:Bez kategorii Tagi:

Rotacja plików

Kwiecień 4th, 2012 Brak komentarzy

Przy okazji zabawy z motion napotkałem problem przepełniania się dysku po dłuższym czasie działania. Rozwiązanie sprowadza się do usuwania (lub wysyłania na inny serwer) plików najstarszych – i tutaj możemy ograniczenie wprowadzić co do ich liczby, wieku lub też rozmiaru co nas częściej interesuje.

Czytaj więcej…

Kategorie:skrypty Tagi:

Testowanie webcam pod linuksem

Marzec 30th, 2012 Brak komentarzy

Bardzo krótki post – za każdym razem, gdy tego potrzebuję muszę od początku tego szukać – jak sprawdzić czy kamerka na usb dobrze działa, zanim jeszcze zaczniemy zabawę ze Skypem/Motion czy innym cudem. Potrzebny jest jedynie pakiet mplayer (który na desktopie i tak pewnie już każdy ma).

 mplayer -tv driver=v4l2:width=640:height=480 -vo xv tv://

Czytaj więcej…

Kategorie:linux desktop Tagi:,

Click Modular Router – syntax highlight w vim

Marzec 21st, 2010 Brak komentarzy

Ostatnio miałem przyjemność zapoznać się z Click‚iem. Dla osób które jeszcze go nie znają, a chcą poznać polecam stronę projektu oraz parę lekcji i omówienie.
Niestety jedyne narzędzie które zna jego składnie to clicky – także pisząc w terminalu jesteśmy pozbawieni udogodnienia podświetlania składni.

Także mając chwilę wolnego czasu napisałem prosty syntax highlight dla vim‚a, oto efekt:

skrypt Click

skrypt Click

Tutaj można znaleźć sam plik z podświetlaniem:

A to przykładowa konfiguracja vim (~/.vimrc): clicksyntax.vim

map :!click-check %
map :!click-install %
map :!click-uninstall

au BufRead,BufNewFile *.click set filetype=click
au! Syntax click source ~/.vim/clicksyntax.vim