GNU/Linux altında Usenet’ten faydalanmak

Malum sınav zamanı olduğu için pek fazla bilgisayar kullanmak istemiyorum, lakin ufak tefek işlerim için bilgisayarımın açık kalması gerektiğini göz önünde bulundurarak, açık kaldığı sürede boş durmaması için sürekli download yapıyorum sınavlardan sonra izlemek için.

Günümüzde p2p yöntemleri oldukça çeşitli olduğu için her nimetten yararlanmak için de elimden geleni yapıyorum. Telekom’un bana vermiş olduğu kısıtlı upload hızı nedeniyle de p2p’den leecher olarak faydalanan çoğu insandan biriyim de Wink. Rapidshare’dan nefret ettiğim kadar, Bittorrent ve Usenet’i seven bir insanım. Torrent hakkında pek fazla yazılıp çizildiği için torrent konusuna değinmek istemiyorum. Doğrudan Usenet’ten bahsedeyim. Ha tabii ki bu yazı illegal bir bilgi paylaşmıyor, bu yazı sonunda yapacağınız işin illegal olduğunu benim gibi siz de biliyorsunuz. Nitekim, indirdiğiniz filmler, albümler telif haklarını ihlal etmekte.

Neyse, söze evvela usenetin ne olduğunu ne amaçla kullanıldığını, amacından nasıl saptırılabildiğini söylemekle başlayalım. Bu adreste arkadaşımızın yanlış anladığı gibi bir şey değildir usenet.
En temel anlamıyla
“Usenet internetin en eski paylaşım şeklidir. Aynen bir newsgroup gibi çalışır. Binlerce oda vardır ve insanlar dilerse karşılıklı sohbet şeklinde dilerse de dosya yollama şeklinde paylaşılır. Bu paylaşım sansürlenemez ve engellenemez.” [1]

Yani Usenet’i hem tartışmaları okumak, hem de dosya çekmek için kullanabilirsiniz. Herhangi bir news okuyucu (ki e-posta programlarınızın çoğu news protokolünü kullanabilir) ile usenet’teki tartışmaları okumak mümkündür. Lakin, dosya çekmek konusunda biraz paraya kıyıp dosyaları barındıran bir Usenet hizmet sağlayıcıdan hesap edinmeniz gerekiyor. Bu konuda retention değeri yüksek sunucuları tavsiye ederim. (200 gün ve üstü sağlayanları tercih edin).

Hesap edindikten sonra ise, gerek Usenet servis sağlayıcıdan gerekse bu indeksleme yapan bir siteden (site adı vermiyorum) indirmek istediğiniz materyale has NZB dosyalarını indirin. Bu NZB dosyalarını bir .torrent dosyası gibi düşünebilirsiniz. Nitelik olarak pek farkı yok, NZB dosyası istemcinize (birazdan değineceğim) hangi dosyaların çekileceğini gösteren bir dosya niteliğindedir. Dolayısıyla Usenet’ten film, müzik vs. indirmek için, bu NZB dosyalarına ihtiyacınız olacak.

Gelelim istemcilere, ki başlıkla asıl alakalı olan konu bu idi. Bir Windows kullanıcısının 2-3 farklı programla yapabildiği bir Usenet download işini, Linux’da denediğim bütün istemciler tek uygulama ile yapmakta.

Denediğim ve başarılı bulduğum 3 istemciyi paylaşmak istiyorum. Başarı sırasına göre, hellanzb > nntpgrab > lottanzb şeklinde bir sıralama yaptım.

Şimdi sırası ile başlayalım, her inceleme sonunda neden sıralamayı bu şekilde yaptığımı anlatayım. İlk sırada hellanzb geliyor.
Hellanzb, python kullanılarak yazılmış, sunucu ve istemci kipinde çalışabilen ve hayatı oldukça kolaylaştıran bir uygulama olarak ortaya çıkıyor. Sanırım ek$i sözlükte yazıyordu, ineği koyup, sosis olarak alabileceğiniz programlardan yani.
Gayet anlamlı bir yapılandırma dosyasına sahip olmakla birlikte, size tek bıraktığı işlem, NZB dosyalarınızı hellanzb’nin queue yani kuyruk dizinine koymanız. Bundan sonrasını hellanzb hallediyor. Örnek bir yapılandırma üzerinden anlatmak gerekirse:

#
# hellanzb.conf - sample hellanzb configuration file
#
# To quickly get started, change the default defineServer() call and the
# Hellanzb.PREFIX_DIR directory
#
# This is actually interpreted python code: strings must be surrounded by
# quotes, numbers and the 'None' keyword should not
#
# $Id: hellanzb.conf.sample 1057 2007-03-27 04:13:53Z pjenvey $

# Log output to this file, set to None (no single quotes) for no logging
Hellanzb.LOG_FILE = '/tmp/hellanzb.log'

# Uncomment this line to log DEBUG messages to the specified file
#Hellanzb.DEBUG_MODE = '/var/tmp/hellanzb-debug.log'

# Automatically roll over both log files when they reach LOG_FILE_MAX_BYTES
# size
Hellanzb.LOG_FILE_MAX_BYTES = 0

# Save LOG_FILE_BACKUP_COUNT of those rolled over log files
Hellanzb.LOG_FILE_BACKUP_COUNT = 0

# Define server connections. Servers can have multiple hosts, hellanzb will
# persist the number of connections to each specified server. There may be
# multiple defineServer lines.

# Set both the username and password to 'None' (without the quotes) if your
# usenet server does not require authorization
defineServer(id = 'ngroups',
             hosts = [ 'sunucu.adresi:119', 'alternatif.sunucu.adresi:119' ],

             username = 'kullanici_adi',
             password = 'şifre',
             #username = None,           # no auth
             #password = None,

             connections = 4,
             antiIdle = 4.5 * 60,        # 4 minutes, 30 seconds, 0 to disable
             #bindTo = '204.31.33.7',    # connect FROM this ip address
             #enabled = False,           # disable this server
             #skipGroupCmd = False,      # skip sending nntp GROUP commands
             #fillserver = 0,            # defaults to 0 (a main server).
                                         # fillservers must have values > 0
                                         # (priority)
             ssl = False
             )

# Uncomment this line to limit all server connections to the specified KB/s
# bandwidth
#Hellanzb.MAX_RATE = 150 # limit to 150kB/s

# Important locations
Hellanzb.PREFIX_DIR = '/home/ras0ir/MyDownloads/'

# Where to put queued .nzb files
Hellanzb.QUEUE_DIR = Hellanzb.PREFIX_DIR + 'nzb/daemon.queue/'

# Where the fully processed archives go
Hellanzb.DEST_DIR = Hellanzb.PREFIX_DIR + 'usenet/'

# The .nzb currently being downloaded is stored here
Hellanzb.CURRENT_DIR = Hellanzb.PREFIX_DIR + 'nzb/daemon.current/'

# The archive currently being downloaded is stored here
Hellanzb.WORKING_DIR = Hellanzb.PREFIX_DIR + 'nzb/daemon.working/'

# Archives interrupted in the middle of downloading are stored here temporarily
Hellanzb.POSTPONED_DIR = Hellanzb.PREFIX_DIR + 'nzb/daemon.postponed/'

# Archives currently being processed. May contains archive directories, or
# symbolic links to archive directories
Hellanzb.PROCESSING_DIR = Hellanzb.PREFIX_DIR + 'nzb/daemon.processing/'

# Temp storage
Hellanzb.TEMP_DIR = Hellanzb.PREFIX_DIR + 'nzb/daemon.temp/'

# Filename to store hellanzb state in between CTRL-Cs. The state (includes the
# order of the queue, and smart par recovery information) is intermittently
# written out as XML to this file
Hellanzb.STATE_XML_FILE = Hellanzb.PREFIX_DIR + 'nzb/hellanzbState.xml'

# _Sub directory within the nzb archive dir_ to move processed files to
Hellanzb.PROCESSED_SUBDIR = 'processed'

# Remove the PROCESSED_SUBDIR if the archive was successfully post processed.
# Warning: The normal Hellanzb.LOG_FILE should be enabled with this option --
# for a record of what hellanzb deletes
Hellanzb.DELETE_PROCESSED = True

# Maximum amount of memory used to cache encoded Article data segments.
# hellanzb will write article data to disk when this cache is exceeded
# Available settings:
# -1: Unlimited size
#  0: Disable cache (only cache to disk)
# >0: Limit cache to this size, in bytes, KB, MB, e.g.:
#     1024 '1024KB' '100MB' '1GB'
#Hellanzb.CACHE_LIMIT = 0

# Save archives into a sub directory of DEST_DIR named after their newzbin.com
# category (when queued using the enqueuenewzbin XMLRPC call); e.g. Apps,
# Movies, Music
Hellanzb.CATEGORIZE_DEST = True

# Disable SMART_PAR (download all PAR files)
#Hellanzb.SMART_PAR = False

# Supply a path to the (un)rar command
#Hellanzb.UNRAR_CMD = None

# Supply a path to the par2 command
#Hellanzb.PAR2_CMD = None

# Skip unraring during post processing
#Hellanzb.SKIP_UNRAR = False

# Supply a path to the optional macbinconv command (for converting MacBinary
# files)
#Hellanzb.MACBINCONV_CMD = None

# hellanzb inherits the umask from the current user's environment (unless it's
# running in daemon mode). The umask can be forced with this option
#Hellanzb.UMASK = 0022

# Supported music types (case insensitive) and optionally their decompression
# executables
# and the file type that executable will decompress to (case insensitive). The
# exes must be in the PATH.
#
#  will be replaced with the name of music file
# optional  is  with the specified extension
#
# None means these files don't need to be decompressed
defineMusicType('wav', None, None)
defineMusicType('mp3', None, None)
#defineMusicType('ape', 'mac   -d', 'wav')
#defineMusicType('flac', 'flac -d -- ', 'wav')
#defineMusicType('shn', 'shorten -x <  > ', 'wav')

# Max files we should decompress at the same time
Hellanzb.MAX_DECOMPRESSION_THREADS = 2

# Enable Mac OS X Growl notifications
Hellanzb.GROWL_NOTIFY = False

# The growl notification server, in the format 'hostname'
Hellanzb.GROWL_SERVER = 'IP'

# The growl password
Hellanzb.GROWL_PASSWORD = 'password'

# Enable libNotify Daemon notifications
Hellanzb.LIBNOTIFY_NOTIFY = False

# Disable ANSI color codes in the main screen (preserves the in place scroller)
#Hellanzb.DISABLE_COLORS = False

# Disable ALL ANSI color codes in the main screen (for terminals that don't
# support ANY ANSI codes
#Hellanzb.DISABLE_ANSI = False

# Hostname for the XMLRPC client to connect to. By default, localhost
Hellanzb.XMLRPC_SERVER = 'localhost'

# Port number the XML RPC server will listen on, and the client will connect to.
# Set to 'None' (without the quotes!) for no XML RPC server
Hellanzb.XMLRPC_PORT = 8760

# Password for the XML RPC server. You might probably never use this, but the
# command line XML RPC calls do -- it should definitely be changed from its
# default value. The XML RPC username is hardcoded as 'hellanzb' -- E.g. URL:
# http://hellanzb:changeme@localhost:8760
Hellanzb.XMLRPC_PASSWORD = 'degistirbenihirpalabeni'

# Username/Password to http://www.newzbin.com for automatic NZB downloading
Hellanzb.NEWZBIN_USERNAME = None
Hellanzb.NEWZBIN_PASSWORD = None

# If any of the following file types are missing from the archive and cannot be
# repaired, continue processing because they're unimportant (case insensitive)
Hellanzb.NOT_REQUIRED_FILE_TYPES = [ 'log', 'm3u', 'nfo', 'nzb', 'sfv', 'txt' ]

# Don't get rid of (move into the PROCESSED dir) the following file types when
# finished post processing (case insensitive)
#Hellanzb.KEEP_FILE_TYPES = [ 'log', 'm3u', 'nfo', 'nzb', 'sfv', 'txt' ]
Hellanzb.KEEP_FILE_TYPES = [ 'nfo', 'txt' ]

# List of alternative file extensions matched as NZB files in the QUEUE_DIR.
# The 'nzb' file extension is always matched
#Hellanzb.OTHER_NZB_FILE_TYPES = [ 'xml' ]

# Support extracting NZBs from ZIP files with this suffix (case insensitive) in
# QUEUE_DIR. Defaults to '.nzb.zip'. Set to False to disable.
#Hellanzb.NZB_ZIPS = '.nzb.zip'

# Support extracting NZBs from GZIP files with this suffix (case insensitive)
# in QUEUE_DIR. Defaults to '.nzb.gz'. Set to False to disable.
#Hellanzb.NZB_GZIPS = '.nzb.gz'

# Delay enqueueing new, recently modified NZB files added to the QUEUE_DIR until
# this many seconds have passed since the NZB's last modification time (defaults
# to 10 seconds)
#Hellanzb.NZBQUEUE_MDELAY = 10

# Optional external handler script. hellanzb will run this script after post
# processing an archive, with the following arguments:
#
# handler_script type archiveName destDir elapsedTime parMessage
#
# type: post processing result, either 'SUCCESS' or 'ERROR'
# archiveName: name of the archive, e.g. 'Usenet_Post5'
# destDir: where the archive ended up, e.g. '/ext2/usenet/Usenet_Post5'
# elapsedTime: a pretty string showing how long post processing took, e.g.
#              '10m 37s'
# parMessage: optional post processing message. e.g. '(No Pars)'
#Hellanzb.EXTERNAL_HANDLER_SCRIPT = '~/bin/post_hellanzb.sh'

Bu yapılandırma dosyasında:

Hellanzb.PREFIX_DIR = '/home/ras0ir/MyDownloads/'
hosts = [ 'sunucu.adresi:119', 'alternatif.sunucu.adresi:119' ],
username = 'kullanici_adi',
password = 'şifre',

Değerlerini, kendinize göre düzenlediğinizde hellanzb’yi kullanabilirsiniz. Çoğu dağıtım hellanzb’yi sistem servisi olarak çalıştırmak üzere ayarlar. Mesela Arch Linux’da /etc/rc.d dizininde hellanzb servisi bulunur. Ayrıca, yapılandırma dosyası ve diğer spesifik ayarları barındıran /etc/conf.d/hellanzb dosyasını da barındırır. Nitelik olarak, hellanzb -parametre1 -parametre2 şeklindeki bir kullanım yerine, herşeyi sistem servisine bıraktığı için kolaylık sağlamaktadır.

Hellanzb’yi çalıştırdığınızı varsayıyorum, bundan sonra yapmanız gereken tek şey, PREFIX_DIR altında oluşan nzb klasörü altında bulunan daemon.queue klasörüne nzb dosyalarınızı koymak. Daha sonrasında her şeyi hellanzb hallediyor. Daha sonrası diyorum, çünkü usenet’te dosyalar bir bütün halinde atılmaz, genelde scene dediğimiz release grupları, rar’lı biçimde gönderirler dosyayı. Dolayısıyla, sisteminizde rar kurulu ise, hellanzb size hiçbir şey bırakmaksızın, rarları da açabilme yetisine sahip. Yukarıda anlattığım gibi, ineği ver sosis al durumu Wink.

Ayrıca, hellahella gibi bir web arayüzü ile de webden takibini yapmayı mümkün kılıyor.
Hiç karmaşaya gerek bırakmadan ve olması gerektiği gibi bir program olması bakımından, hellanzb favorim olarak bir numaralı tercihim oluyor. Bu arada unutmadan söyleyim, çok favori bir nzb indeks sitesine de doğrudan desteği var, Lost izlemek istiyorsunuz diyelim. İndeks sitesine nzb dosyası düştüğü anda onu çekip indirmeye başlayabilecek şekilde ayarlayabiliyorsunuz. Bu da bence mükemmel bir özellik.

Tabii bu kadar övdüğüm uygulamanın kötü bir yanı yok mu? Maalesef var.. Türkçe yerelini kullanınca patlıyor ne yazık ki. Bizim alfabedeki meşhur ıI <-> iİ sorunu burada patlak veriyor. Bu yüzden hellanzb’yi LANG=C hellanzb.py komutu kullanarak çalıştırıyorum.

Gelelim ikinci tercihime diyecektim ki, bu yazıyı daha fazla uzatmamak açısından onu da ayrı bir yazı olarak ele almak sanırım daha iyi olacak. Çok uzun oldu ve okuyucuyu boğmak istemiyorum. Serinin ikinci yazısında görüşmek dileğiyle!

Leave a comment

Your comment

Click to Insert Smiley

SmileBig SmileGrinLaughFrownBig FrownCryNeutralWinkKissRazzChicCoolAngryReally AngryConfusedQuestionThinkingPainShockYesNoLOLSillyBeautyLashesCuteShyBlushKissedIn LoveDroolGiggleSnickerHeh!SmirkWiltWeepIDKStruggleSide FrownDazedHypnotizedSweatEek!Roll EyesSarcasmDisdainSmugMoney MouthFoot in MouthShut MouthQuietShameBeat UpMeanEvil GrinGrit TeethShoutPissed OffReally PissedMad RazzDrunken RazzSickYawnSleepyDanceClapJumpHandshakeHigh FiveHug LeftHug RightKiss BlowKissingByeGo AwayCall MeOn the PhoneSecretMeetingWavingStopTime OutTalk to the HandLoserLyingDOH!Fingers CrossedWaitingSuspenseTremblePrayWorshipStarvingEatVictoryCurseAlienAngelClownCowboyCyclopsDevilDoctorFemale FighterMale FighterMohawkMusicNerdPartyPirateSkywalkerSnowmanSoldierVampireZombie KillerGhostSkeletonBunnyCatCat 2ChickChickenChicken 2CowCow 2DogDog 2DuckGoatHippoKoalaLionMonkeyMonkey 2MousePandaPigPig 2SheepSheep 2ReindeerSnailTigerTurtleBeerDrinkLiquorCoffeeCakePizzaWatermelonBowlPlateCanFemaleMaleHeartBroken HeartRoseDead RosePeaceYin YangUS FlagMoonStarSunCloudyRainThunderUmbrellaRainbowMusic NoteAirplaneCarIslandAnnouncebrbMailCellPhoneCameraFilmTVClockLampSearchCoinsComputerConsolePresentSoccerCloverPumpkinBombHammerKnifeHandcuffsPillPoopCigarette