Finding big log files on Centos

You can find big log files with following shell script, especial for logdir in $(find /var/www/vhosts/*/statistics/logs -type f); do \ echo $logdir; done | tr “\n” ” ” | xargs du -cl | sort -n This script can be developed for deleting files also, but should be careful for deleting files with scripts. The result […]

23 Kasım 2012

Posted In: linux, Log Files, Plesk Panel, Plesk Panel Logs

Tomcat Sunucuda JNDI ile Hibernate konfigürasyonu

Tomcat uygulama sunucusunda context.xml conf. dosyasından DataSource bilgilerini JNDI pattern bilgisi ile alıp EntityManager nasıl oluştururuz?

Şöyle ki;

Tomcat altındaki context.xml içerisine resource tanımlamamız gerekiyor.

<Context>
   <Resource auth="Container"      driverClassName="oracle.jdbc.driver.OracleDriver"
      initialSize="20" maxActive="100" maxIdle="30" maxWait="10000"
      name="jdbc/jndiName" validationQuery="select 1 from dual"
      password="password" type="javax.sql.DataSource"
      factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
      url="your DB connection url" username="username"/>
</Context>

Bu resource bilgileri içerisinde bağlantı bilgilerinin (url, kul. adı, şifre vs.) haricinde hangi kütüphanenin DataSource sınıfından yararlanacağımızıda belirtmemiz gerekiyor. “name” özelliği ise bizim JNDI patern bilgisini yazdığımız kısım.

Projemizin web.xml dosyası içerisine;

<resource-ref>
   <description>Oracle DB Connection</description>
   <res-ref-name>jdbc/jndiName</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

eklememiz gerekiyor. Bu ayarları yaptıktan sonra javax.naming kütüphanesini kullanarak bilgileri çekeceğiz:

InitialContext initialContext = new InitialContext();
BasicDataSource  envCtx = (BasicDataSource) initialContext.lookup("java:comp/env/jdbc/jndiName");

envCtx.getDriverClassName();
envCtx.getUrl();
envCtx.getUsername();

..

şeklinde gereken bilgileri aldıktan sonra bir map yardımıyla EntityManagerFactory oluşturuyoruz. Buradaki BasicDataSource sınıfı org.apache.tomcat.dbcp.dbcp kütüphanesini ait.

HashMap<String, String> map = new HashMap<String, String>();
map.put(Environment.DRIVER, driver);
map.put(Environment.URL, url);
map.put(Environment.USER, user);
EntitiyManagerFactory factory = Persistence.createEntityManagerFactory(yourPersistanceUnitName, map);

EntityManager em = factory.createEntityManager();

Environment sınıfı  org.hibernate.cfg kütüphanesine ait.


21 Kasım 2012

Posted In: apache tomcat, db connection, Gezegen, java, oracle db, oracle jdbc driver

Hudson/Jenkins sistem tarihi problemi

Hudson veya Jenkins gibi düzenli derleme (sürekli entegrasyon) aracı kullanıyorsanız ve bu araçların kurulu olduğu sunucunuzun sistem tarihi svn veya git sunucularınızın tarihi ile uyuşmuyorsa, hudson kendi sistem tarihine kadar olan değişiklikleri alır ve uygulamanızı deploy eder. Saat farkının farkında değilseniz svndeki değişikliklerinizin neden uygulamaya deploy edilmediğine anlam veremeyebilirsiniz. Benim başıma geldi. O yüzden Sunucularınızın tarihlerinin bulunduğunuz ülkenin tarihiyle ve svn/git sunucularınızın tarihiyle aynı olmasına özen gösterin.


20 Kasım 2012

Posted In: Gezegen, java, linux

QTcpServer sınıfına SSL desteği eklemek (Qt)

Qt ile yazdığımız bir sunucu uygulaması için SSL desteği eklememiz gerekiyordu. Bunun için araştırma yaptığımda yine her zamanki gibi karışık ve herşeyi baştan anlatan bir yazı bulamayınca, şu an okuduğunuz blog yazısı ortaya çıktı.

Sunucumuz QTcpServer sınıfından üretilmiştir. Genelikle herkes bu temel sunucu üzerinden kendi sunucularını yazarlar. Burada tek sorun QTcpServer, QTcpSocket sınıfını kullanıyor. Bu sınıfın da SSL desteği mevcut değil. Qt API belgelerine baktığımda bununla ilgili QSslSocket diye SSL protokolu kullanan bir sınıf olduğunu gördüm. Bunun için QTcpServer’in kullandığı üç tane virtual fonksiyonu tekrar yazmamız gerekiyor. Bu fonksiyonlar sırayla şunlar:

İlk başta incomingConnection() desteğini değiştirelim. QTcpServer bu fonksiyonu her yeni bağlantıda çağırıyor. Sonra bir tane QTcpSocket oluşturuyor, soket tanımlıyor ve bunu da dahili bir listeye ekliyor. Bu dahili liste de nextPendingConnection() veya hasPendingConnections() gibi fonksiyonlar ile uyum halinde çalışıyor. Bunların hiç birini siz yapmıyorsunuz. Hepsi otomatik olarak QTcpServer tarafından yapılıyor. SSl desteği için aşağıdaki gibi bunu yeniden yazmamız gerekiyor(reimplementation):

void Server::incomingConnection(int socketDescriptor)
{
	QSslSocket *socket = new QSslSocket(this); 
	socket->setProtocol(QSsl::SslV3);  // TODO: Or other protocols, like tls, sslv2? Research...

	// For now these files should be reside in the same folder as the application
	socket->setPrivateKey("server.key"); // $ openssl genrsa -out server.key 2048
	socket->setLocalCertificate("server.crt"); // $ openssl req -new -x509 -key server.key -out server.crt -days 1095

	if (socket->setSocketDescriptor(socketDescriptor)) {
		pendingConnections->enqueue(socket); // Will be used in nextPendingConnection()

		// newConnection() is emmited within QTcpServerPrivate. No need to emit it manually.
		// However encrypted() is emitted if QSslSocket enters encrypted mode.
		// Useful for debugging or other stuff.
		// TODO: we might need sslErrors() signal implementation
		connect(socket, SIGNAL(encrypted()), this, SLOT(ready())); 

		socket->startServerEncryption(); //  Initiate the SSL handshake
	} 
	else { 
		delete socket; 
	}
}

Koda yorumlar eklediğimden detaya girmeyeceğim, sadece pendingConnections kısmını anlatayım. QTcpServer bildiğiniz gibi kendi listesini tutuyor. Fakat bizim nextPendingConnection() ve diğer fonksiyonları ile çalışması için oluşturduğumuz QSslSocketi bu listeye dahil etmemiz gerekiyor. Fakat böyle bir liste olmadığından kendimiz bir QQueue<QSslSocket*> veri tipi oluşturup ona ekliyoruz. FIFO veri tipinde olduğundan gelen bağlantıların düzgün bir şekilde gitmesi açısından da önemli. Sırada nextPendingConnection() sınıfı var, onu da şu şekilde değiştiriyoruz:

QTcpSocket* Server::nextPendingConnection()
{
	// Return the next connection in the queue. If there is none,
	// return 0.
	if (pendingConnections->isEmpty()) {
		return 0;
	} else {
		return pendingConnections->dequeue();
	}
}

Burada gördüğünüz gibi daha önce oluşturduğumuz QQueue listesindeki socketleri geri dönderiyoruz. Geri dönüş veri tipi QTcpSocket* olması da bir sorun değil, çünkü QSslSocket de QTcpSocketin bir altsınıfı olduğundan aynı sayılır o anlamda. Tabi son olarak hasPendingConnections() de bu QQueue listesinden dönüş yapması gerektiğinden onu da şu şekilde değiştiriyoruz:

bool Server::hasPendingConnections() const
{
    return !pendingConnections->isEmpty();
}

Header dosyalarına gerekli olan QSslSocket, QQueue, vs.. gibi kitaplıkları eklemeyi unutmayın. Ayrıca pendingConnectionsi de tanımlamaya unutmayın. Bir de ready() diye bir slot var. incomingConnection() sınıfında SSL şifrelemesi gerçekleştiğinde encrypted() diye bir sinyal gönderiliyor. Bende bu slot içinde sadece bir qDebug() çıktısı var ve adı üzerinde debug için kullanıyorum. Siz kendiniz için kullanabilirsiniz.

Son olarak da sonradan gördüğüm bir yardımcı kitaplıktan bahsedeyim. Bizim yazdığımız sunucu modifiye edildiğinden bize pek uymuyordu ama libqxt diye Qt eklenti kütüphaneleri var. Gerçekten güzel bilgiler mevcut. Örneğin network altında doğrudan SSL kullanan bir tane sunucu sınıfı qxtsslserver mevcut. Eğer size uygunsa yukarıda yaptığım modifikasyonları yapmadan doğrudan bunu kullanabilirsiniz.

17 Kasım 2012

Avidemux ile görüntülerimizi düzenleyelim

HD kayıt yapan kameraların hayatımıza girmesiyle birlikte çektiğimiz videolar hatırı sayılır disk alanı kaplamaya başladı. Bu verilerimizi yedeklerken ve arşivlerken sıkıntılı saatler geçirenlerimiz yalnız değildirler.

Bu sorunla mücadele etmenin en gerçekçi yolu; kameradan görüntülerin alınır alınmaz gereksiz kısımlarının silinerek arşivlenmesi.

Özgür ve çok platformlu görüntü düzenleme yazılımı AVIDEMUX, pratik ve güçlü bir araç. Yaygın kullanımda olan pek çok dosya ve görüntü/ses biçimini yerleşik olarak destekliyor. Bu biçimler arasında dönüştürme ve düzenleme işlemleri oldukça pratik.

Uzman seviyedeki pek çok yazılımda bulunmayan ve AVIDEMUX’un bizlere sunduğu özellik; yeniden biçimlendirmeye gerek duymadan düzenleyebilme yeteneği (without re-encoding). Bu sayede görüntü kalitesinden kayıp vermeden düzenleme gerçekleştirilebiliyor.

Yeniden biçimlendirmeye  gerek duymadan bir görüntü dosyası nasıl kırpılır inceleyelim;

Yeniden biçimlendirmeye gerek duymadan kırma yapabilmek için görüntünün anahtar karelerinden (keyframe, I-Frame) bölünmesi gerekiyor. I-Frame kareleri bulmak için üst/alt yön tuşlarını kullanabilirsiniz.

Görüntünüzden çıkartmak istediğiniz bölümleri A/B işaretçileri ile başını sonu işaretledikten sonra Edit>Delete seçenekleriyle görüntüden çıkartabilirsiniz. Eğer A/B işaretçileri I-Frame ler üzerinde ise, Video output: Copy – Audio Output: Copy seçenekleri seçilerek dosyanız yeniden biçimlendirmeye girmeden kaydedilebilir.

İki görüntü dosyasını birleştirmek için File>Append seçeneğini kullanabilirsiniz.

Kullanımlarımda Avidemux pek çok kez hata mesajı vererek kapandı. Birlikte bir süre geçirdikten sonra huyunu suyunu öğreniyorsunuz ve sizin için güçlü bir araç haline geliyor.

http://fixounet.free.fr/avidemux/

12 Kasım 2012

Posted In: lkd, nl, teknik, tr

Avidemux ile görüntülerimizi düzenleyelim

HD kayıt yapan kameraların hayatımıza girmesiyle birlikte çektiğimiz videolar hatırı sayılır disk alanı kaplamaya başladı. Bu verilerimizi yedeklerken ve arşivlerken sıkıntılı saatler geçirenlerimiz yalnız değildirler.

Bu sorunla mücadele etmenin en gerçekçi yolu; kameradan görüntülerin alınır alınmaz gereksiz kısımlarının silinerek arşivlenmesi.

Özgür ve çok platformlu görüntü düzenleme yazılımı AVIDEMUX, pratik ve güçlü bir araç. Yaygın kullanımda olan pek çok dosya ve görüntü/ses biçimini yerleşik olarak destekliyor. Bu biçimler arasında dönüştürme ve düzenleme işlemleri oldukça pratik.

Uzman seviyedeki pek çok yazılımda bulunmayan ve AVIDEMUX’un bizlere sunduğu özellik; yeniden biçimlendirmeye gerek duymadan düzenleyebilme yeteneği (without re-encoding). Bu sayede görüntü kalitesinden kayıp vermeden düzenleme gerçekleştirilebiliyor.

Yeniden biçimlendirmeye  gerek duymadan bir görüntü dosyası nasıl kırpılır inceleyelim;

Yeniden biçimlendirmeye gerek duymadan kırma yapabilmek için görüntünün anahtar karelerinden (keyframe, I-Frame) bölünmesi gerekiyor. I-Frame kareleri bulmak için üst/alt yön tuşlarını kullanabilirsiniz.

Görüntünüzden çıkartmak istediğiniz bölümleri A/B işaretçileri ile başını sonu işaretledikten sonra Edit>Delete seçenekleriyle görüntüden çıkartabilirsiniz. Eğer A/B işaretçileri I-Frame ler üzerinde ise, Video output: Copy – Audio Output: Copy seçenekleri seçilerek dosyanız yeniden biçimlendirmeye girmeden kaydedilebilir.

İki görüntü dosyasını birleştirmek için File>Append seçeneğini kullanabilirsiniz.

Kullanımlarımda Avidemux pek çok kez hata mesajı vererek kapandı. Birlikte bir süre geçirdikten sonra huyunu suyunu öğreniyorsunuz ve sizin için güçlü bir araç haline geliyor.

http://fixounet.free.fr/avidemux/

12 Kasım 2012

Posted In: lkd, nl, teknik, tr

Scientific Linux için OpenKM ve JBoss Paketi

OpenKM nedir?

JBoss nedir?

Bize gerekli paketi buradan indiriyoruz. Daha sonra Scientific Linux’ta rpm paketlerinin yapılabilmesi için öncelikle;

# sudo yum install rpm-build rpmdevtools

# mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

# echo ‘%_topdir %(echo $HOME)/rpmbuild’ > ~/.rpmmacros

# cp ~/OpenKM-5.1.10_JBoss-4.2.3.GA.zip ~/rpmbuild/SOURCES/

# nano -w ~/rpmbuild/SPECS/openkm-jboss.spec

İçine de aşağıdakini yapıştırıyoruz;

Name:           jboss
Version:        4.2.3.GA
Release:        1%{?dist}
Summary:        OpenKM ve Jboss

License:        GPL
URL:            http://openkm.com
Source0:        http://sourceforge.net/projects/openkm/files/5.1/OpenKM-5.1.10_JBoss-4.2.3.GA.zip
BuildRoot:    %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

%description
OpenKM  ve JBoss kurulum paketi.

%prep
%setup -q
%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/opt/jboss-4.2.3.GA
cp -R * $RPM_BUILD_ROOT/opt/jboss-4.2.3.GA

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
/opt/jboss-4.2.3.GA
%doc

%changelog

Son olarak paketi rpm yapabilmek için;

# rpmbuild -ba openkm-jboss.spec

Her şey yolunda gittiyse herhangi bir hata çıktısı almadan paketimiz ~/rpmbuild/RPMS dizini altında olacaktır. Kurulumu test amaçlı yapabilirsiniz, jboss-4.2.3.GA dizini /opt altında yer alacaktır.


5 Kasım 2012

Posted In: gnu, jboss, linux, management, manager, openkm, package, rpm, scientific linux, tech

Infinality

Font rendering’e yapılacak en büyük lütuf mevcut dağıtımınıza Infinality‘nin freetype yamalarını kurmak olacaktır. Dağıtımınız için hazır bir paket büyük bir ihtimalle olmayacaktır, indirmek için;

  1. x86_64
  2. i386

Dosyayı /etc/fonts dizini içine açıyoruz ve dikkat etmemiz gereken en öneli husus fontconfig-infinality adında bir alt dizin olmaması. Ardından  /etc/fonts/conf.d/ dizini içinde 52-infinality.conf symlink’i olup olmadığına bakıyoruz, varsa tüm işimiz bitmiştir.

Ayarlar için /etc/fonts/infinality/infinality.conf dosyası içindeki yönlendirmelere göre istediğmiz sonucu alana kadar kurcarlıyoruz. Ayar dosyası ile uğraşmak istemiyorsanız infinality klasörü içindeki infctl.sh dosyasını ;

# sudo sh infctl.sh setstyle

şeklinde çalıştırarak öntanımlı ayarlardan birini seçebilirsiniz.


2 Kasım 2012

Posted In: font rendering, freetype, gnu, infinality, linux, tech

Samsung Unified Driver

Samsung’un itina ederek fakat sürücüleri ve kurulumu için bir o kadar da özensiz sunucular hazırladığı yazıcılarını, GNU/Linux ortamında kurmak kimi vakit kolay gibi gözüken kimi vakit de insanı feveran ettiren bir hal alması, Samsung’a teşekkürname belgesi hazırlamama neden oluyordu.

Gelelim bu mihnetten kurtulmanın kısa ve bir o kadar da kolay aşamasına;

  1. Samsung Unified Driver 4.00.36
  2. Dağıtımınızdan libstdc++, libjpeg6 ve sane paketlerini kuruyorsunuz.

Sürücüyü indirerek muvafık gördüğümüz bir dizine açıyoruz. Ardından bize -eğer elimizde tarayıcı yoksa- kopyalamamız gereken dosyaları şu şekilde;

# sudo cp cdroot/Linux/(mimari)/at_root/usr/lib64/cups/backend/mfp /usr/lib(ya da lib64)/cups/backend/

# sudo cp cdroot/Linux/(mimari)/at_root/usr/lib64/cups/filter/* /usr/lib64/cups/filter/

# cat cdroot/Linux/noarch/at_opt/share/ppd/(yazıcı modeliniz).ppd | gzip -9 > (yazıcı modeliniz).ppd.gz

# sudo mkdir /usr/share/cups/model/samsung

# sudo cp (yazıcı modeliniz).ppd.gz /usr/share/cups/model/samsung/

http://localhost:631 adresine girerek yazıcınızı ekliyor ve en güzelinden bir test sayfası yazdırıyorsunuz. Eğer bu yazıcıyı paylaşmak istiyorsanız yapmanız gereken ayarlar da;

LogLevel warn

SystemGroup wheel

Port 631
Listen /var/run/cups/cups.sock
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseLocalProtocols CUPS
BrowseAddress @LOCAL
BrowseLocalProtocols CUPS
DefaultAuthType None
DefaultAuthType Basic
DefaultEncryption IfRequested

<Location />
Order allow,deny
Allow all
</Location>
<Location /admin>
Order allow,deny
Allow all
Allow 192.168.1.*
</Location>
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow all
Allow 192.168.1.*
</Location>

Geriye kalan ayarlara ise dokunmuyorsunuz ve işiniz bitiyor. Son olarak elinizde hem tarayıcı hem yazıcı olan işlevsel bir ekipmanınız mevcut ve bunun tarayıcı kısmını da kullanmayı düşünüyorsunuz;

sudo cp cdroot/Linux/noarch/at_root/etc/sane.d/smfp.conf /etc/sane.d/

sudo cp cdroot/Linux/(mimariniz)/at_root/usr/lib64/sane/libsane-smfp.so.1.0.1 /usr/lib64/sane/
sudo ln -s /usr/lib(mimari)/sane/libsane-smfp.so.1.0.1 /usr/lib64/sane/libsane-smfp.so.1
sudo ln -s /usr/lib(mimari)/sane/libsane-smfp.so.1.0.1 /usr/lib64/sane/libsane-smfp.so

sudo cp cdroot/Linux/(mimariniz)/at_root/usr/lib64/libmfp.so.1.0.1 /usr/lib64/
sudo ln -s /usr/lib(mimari)/libmfp.so.1.0.1 /usr/lib64/libmfp.so.1
sudo ln -s /usr/lib(mimari)/libmfp.so.1.0.1 /usr/lib64/libmfp.so

Son olarak  /etc/sane.d/dll.conf içine smfp yazarak sürücüyü aktif hale getiriyoruz ve işlemimiz, bize verilen zahmet bitiyor.


1 Kasım 2012

Posted In: driver, gnu, linux, printer, samsung, scanner, sürücü, tarayıcı, tech, unified, yazıcı

Twitter Auto Publish Powered By : XYZScripts.com