Még ugyan semmi nincs belőle, de elgondolkodtam hogy kéne írnom egy kis scriptet miszerint pld. hetente megnézné van-e új kiadás az Opera-developerből, majd azt letöltené, és fel is telepítené.
Amin biztos elcsúsznék az a lekérdezés.
A feltelepített program verzió számát gondoltam összevetni hogy van-e frissebb a szerveren.
ftp://ftp.opera.com/pub/opera-developer/
Bár van dátum is. Viszont mindenhogy kérdés hogy miként szedjem le pont azt, ami kell?
Félreértés ne essék, nem komplett megoldást keresek, csak hogy hogyan hasonlítsam össze és jelöljem ki a legfrissebbet?
Amihez nem értek az a sed. Pedig ide biztos az kell.
Talán az utolsó telepítés, és az aktuális időhöz legközelebbi időpontot kell figyelembe vennem. Nem is tudom melyik lenne az egyszerűbb?
- 4925 megtekintés
Hozzászólások
Ehhez nagyon hasonlót csináltam magamnak. :) Én Fedorához a Koji build szerverről szedek le néha csomagokat, amelyek még nincsenek az update repóban. File listából awk-val szedd ki a verziószámokat. Van a sort parancsnak -V opciója, ez verziószám szerint rendez sorba. Lehet fordított sorrendbe rendezni:
sort -rV
Ekkor a lista első eleme lesz a legfrissebb. Ha ezen egy sor után teszed az aktuális verziódat, ezt egy változóban eltárolod, utána csinálsz egy
sort -urV
rendezést, akkor épp visszakapod az előbbi stringedet, ha frissíteni kell, hiszen még mindig az első sor marad a frissebb, a második az aktuális, régi. Ha viszont változik a tárolthoz képest a string, akkor vagy a gépeden lévő változat a frissebb, vagy azonos a verziószám, de a -u unique miatt egy sor lesz ebben az esetben belőle, tehát változik a string. Ekkor nem kell frissíteni.
A wget, curl, aria2c parancsok valamelyikével megoldod a letöltést, csomagkezelővel, vagy ki tudja, mivel a telepítést, su -c paranccsal pedig a root joggal futtatást, jelszó kérést.
Kihagytam valamit? :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
De akár abból is ke lehet indulni, hogy időben rendezve van, így az info
könyvtárat figyelembe nem véve, az utolsó sor kell (grep -v
és tail
).
Just for fun:
curl -s ftp://ftp.opera.com/pub/opera-developer/ | grep -v info | sed -rn '$ s,.*([0-9]{2}\.[0-9]\.[0-9]{4}\.[0-9]*),ftp://ftp.opera.com/pub/opera-developer/\1/linux/opera-developer_\1_amd64.deb,p'
- A hozzászóláshoz be kell jelentkezni
Hello!
Valami gáz van.
down_url="${server}${new_version}/${os}"
ha visszanézem a -x paraméterrel:
+ down_url=$'ftp://ftp.opera.com/pub/opera-developer/32.0.1899.0\r/linux'
A verziószám után betesz nekem két karaktert: \ r
Ha tovább viszem a dolgot, és szétbontom hogy legyen architektúrára is változó. akkor a változóba beteszem az "amd64"-et a down_url-be meg odabiggyeszteném eléje az alsóvonást: _${arch} és az alsóvonás elé is
32.0.1899.0\r_amd64
odakerül a két karakter.
Mert gondoltam összegyűjtöm az útvonalat a változókból, mivel nem akartam direktben megadni a wgetnek, hátha nem eszi meg.
down_url="${server}${new_version}/${os}/${name}_${new_version}_${arch}.${ext}"
Ez lesz belőle:
+ down_url=$'ftp://ftp.opera.com/pub/opera-developer/32.0.1899.0\r/linux/opera-developer_32.0.1899.0\r_amd64.deb'
Valahol a new_version-nál akad el.
Azt meg így kérdeztem le:
wget --no-remove-listing ${server} >/dev/null 2>&1
new_version=$(cat .listing | awk '{print $9}' | grep -v info | sort -rV | head -n1)
- A hozzászóláshoz be kell jelentkezni
Azt hiszem hogy a wget amikor leszedte úgy is hagyta dos kódolásban. A sorvége jel zavart meg most. Kérdés hogyan tudnám a legegyszerűbben módosítani, illetve eleve linux sorvéggel leszedni?
- A hozzászóláshoz be kell jelentkezni
man dos2unix
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Igaz, már tegnap megoldottam, sőt az egész flottul működik. Bár biztos lehetne egyszerűsíteni. Érdekes módon a
su $USER -c parancs
nem oldotta meg a dolgot. Nem volt engedélyem.
Tehát maradt a sima su -c parancs; parancs
Tehát mindenképpen beavatkozásra van szükség a script lefutása során. Nevezetesen a jelszó beírása miatt.
Ha cronba teszem hogy jelenik meg egy terminál, hogy kiírja az üzeneteket, meg hogy bekérje a jelszót?
- A hozzászóláshoz be kell jelentkezni
A
su $USER -c parancs
Éppen $USER nevében fut amúgy is a parancs, így ennek semmi értelme.
su - -c parancs
jó, de nyilván kell a root jelszó. De ez miért is baj? Amúgy a visudo a barátod, ha jelszó nélkül akarod, de én nem tenném.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Ebből indultam ki:
#!/bin/bash
whoami
su -c whoami
whoami
Kéri a jelszót. Ha a sajátodat adod meg, akkor hitelesítési hiba. Ha a root-ét akkor elméletileg meg is kaptad a jogokat, de az újabb whoamira már nincs meg.
De ha tudnál inkább arra mondani valamit amit az utolsó sorban írtam. Jelenleg az izgat.
- A hozzászóláshoz be kell jelentkezni
A második whoami már sima user joggal fut, hiszen visszatért a su. Egyébként tud standard inputról jelszót fogadni:
su - -c 'echo; whoami; echo $EUID' <<<'ez_a_jelszo'
Viszont ekkor a script root:root 0700-as jogú legyen, különben bárki elolvashatja a root jelszót. Bár még ezzel a joggal is elég meredeknek gondolom a root jelszó plain textben tárolását.
Hülyeséget írtam. Ha root:root 0700, akkor futtatni sem lehet sima felhasználóként. Ellenben, ha olvasható felhasználóként, akkor a jelszó is, ami meg nem jó. Marad az, hogy a sudoers-ben javítasz.
Másik trükkös megoldás, hogy írsz egy root joggal futó shell daemon-t, ez egy named pipe-ot (fifo) olvasgat néha - tehát pollingolja -, parse-olja, sima user joggal írják a fifo-t, s ha arra kap utasítást, root joggal elvégzi a daemon, amit kell. Nem bármilyen parancsot, csak előre definiáltakat. Ha bármit elvégezhetne, akkor a user bármire root jogot kapna közvetve. Tapasztalatból írom, ilyet csináltam a live linuxomban. :)
Cronból szerintem ne indíts terminált, mert be lehet jelentkezve több felhasználó, lehet :0, :1, stb. display is, de lehet, hogy nem is fut az X, szóval nem triviális ez.
Linuxon is lehet - én használom is -, hogy belépsz egy felhasználóval a grafikus felületen, elindítasz egy programot, az fut, zárolod a képernyőt, utána new session, ez indítja a display managert, belépsz másik - pl. vendég - felhasználóval, ő használja a gépet ugyanazon screen-en, de másik display-en.
Ekkor felmerül, hova tedd a terminált. Meg mi van, ha nem lépett be senki, csak a display manager van a képernyőn. Vagy az sem, mert konzolon léptek be. Vagy ott sem, mert várja a konzol logint. Vagy be vannak lépve X-en, aztán konzolon is, de másik konzolra kapcsolva loginra vár. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Ha a /etc/crontab
-ba rakod, akkor root
-ként fog futni, és nem kell sz.rakodni mindenféle su
-val.
- A hozzászóláshoz be kell jelentkezni
Tényleg, az elkerülte a figyelmem, minek is jelszó kérés, ha például a /etc/cron.daily alkönyvtárba téve root joggal naponta egyszer fut majd.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
ÓÓÓÓ hát ez az. Hol kell forgatni a kereket?
- A hozzászóláshoz be kell jelentkezni
tr -d '\r'
- A hozzászóláshoz be kell jelentkezni
Szerintem sokszor a bash dolgai túl kevesek. Lassú és olvashatatlan a kód. Én már nem nyúlnék shell-hez ha nem nagyon minimális a megoldandó feladat. Inkább magasabb szintű script nyelv.
- A hozzászóláshoz be kell jelentkezni
Látnád az interaktív "videómagnómat." :-) Nincs videómagnóm de van (volt) tvkártyám, S ahhoz írtam egy (több) scriptet, mely kérdéseket tesz fel, ezért interaktív. Miszerint mit, honnan, mikor, milyen kodeccel, mekkora felbontással, időzítve, vagy anélkül vegyen fel.
S ez akkor is működött ha be sem volt kapcsolva a gép. Mivel bekapcsolta magát, felvette a műsort, és leállt.
Nekem később már csak annyi volt a dolgom hogy avidemuxszal kivágjam belőle a reklámokat illetve a film elején és végén hagyott + perceket.
Én nem tanultam soha semmilyen programozást, a sok netezéssel, fórumozással tarkított idő volt az amely összehozta ezt.
S igen láttam már perl-t, de az még meredek számomra. Elég csak belenéznem az xmltv perl fájljába mely a tévékártyának készített epg -t.
Pld. ez itt a magyar tévéé.
- A hozzászóláshoz be kell jelentkezni
Nincs túl nagy kedvem ebbe belemenni, de maradjunk annyiban egy jól megírt shell-scripthez a legtöbb embernél hiányzk a tudás: azaz hogy mit is lehet megcsinálni a shell eszközeivel, illetve milyen dolgokra mit érdemes használni. És valóban lehet olvashatatlan kódot írni, de perlben pl. sokkal könnyebb. Szerintem a perl/python/ruby/php/js/... pont ugyanezekkel a hátrányokkal rendelkezik: lehet benne olvashatatlan kódot írni, tud lassú lenni, és meg kell tanulni a rendszert/nyelvet, és csak akkor lehet hatékonyan használni.
- A hozzászóláshoz be kell jelentkezni
Ez az a bonyolultság, amit én már tuti perlben akarnék megcsinálni. sed-del html-t parse-olni szopás.
- A hozzászóláshoz be kell jelentkezni
Gondoltam beszúrom ide, mivel nem nagy. Hátha valakit érdekel. Az /etc/cron.weekly-be téve hetente leellenőrzi hogy van-e újabb Opera fejlesztői változat, és feltelepíti ha nincs.
Ha jelenleg sincs akkor is felteszi. Mind a 32 mind a 64 bites rendszeren működik. A stabil Operának nincs 32 bites változata.
S úgy vettem észre hogy a fejlesztői változat sem omlik azért össze olyan sűrűn.
Figyelem!
Ez csak az rpm alapú disztrókhoz jó. S mivel nincs is rpm csomag, így csak ez a megoldás működik.
Ha valaki ismer gyorsabb szervert mint az Opera sajátja, az szóljon. Majd 5 perc kell neki hogy leszedje a 40-43M csomagot.
#!/bin/bash
clear
name="opera-developer"
server="ftp://ftp.opera.com/pub/opera-developer/"
version=$(opera-developer --version)
os="linux"
arch=$(uname -i)
ext="deb"
if [ "${arch}" = "x86_64" ]; then
arch="amd64"
libpath="lib64"
else
arch="i386"
libpath="lib"
fi
# make temp folder
workdir=/tmp/$(awk 'BEGIN { srand (); print rand() }')
mkdir -m 700 "${workdir}"
cd ${workdir}
wget --no-remove-listing ${server} >/dev/null 2>&1
new_version=$(cat .listing | awk '{print $9}' | grep -v info | sort -rV | head -n1 | tr -d '\r')
if [[ ${version} < ${new_version} ]]; then
# echo "Available the new version - ${new_version}"
# download
wget ${server}${new_version}/${os}/${name}_${new_version}_${arch}.${ext}
new_version="${name}_${new_version}_${arch}.${ext}"
# extract
ar -x ${new_version}
tar xJf data.tar.xz
# delete old opera-developer
rm -fr /usr/${libpath}/${name}
# copy the new opera-developer
cp -r ${workdir}/usr/${libpath}/${arch}-linux-gnu/${name} /usr/${libpath}/
chmod 4755 /usr/${libpath}/${name}/opera_sandbox
# del temp folder (workdir)
rm -rf ${workdir}
fi
exit
- A hozzászóláshoz be kell jelentkezni