Linux root şifremi unuttum / bilmiyorum nasıl değiştiririm?

Standard

Linux’a yeni başlayanlar için zaman zaman çile haline gelebiliyor bu durum hatta özellikle de cloud üzerinden bir vps sunucuda işlem yapıyorsanız otomatik olarka oluşturulan kullanıcı root yetkilerine sahip olmadığı için zaman zaman servisleri ayağa kaldırma aşamasında dona kalabiliyor insan. Linux’a ilk başladığım zamanlar en azından benim başıma geldi diyebilirim.

Bu durumda yapacağınız en güzel şey ssh üzerinden sunucuya bağlandıktan sonra aşağıdaki komutları çalıştırmak olacaktır.

1. Aşağıdaki komut ile doğrudan root kullanıcısına geçiş yapıyorsunuz.

sudo -i

2. Ardından şifresini değiştirmek istediğiniz kullanıcı adını da belirterek aşağıdaki komutu çalıştırın.

passwd kullanici_adi

Mevcut şifre sizden istenmeyecektir ve aşağıdaki şekilde ekrana gelen satırda kullanici_adi adındaki kullanıcı için yeni bir şifre girmenizi isteyecek.

Enter new UNIX password:

Şifrenizi girdikten sonra doğrulama istenecek sizden. Aynı şifreyi tekrar girip <enter> tuşuna bastıktan sonra passwd: password updated successfully mesajı ile şifreniz başarılı bir şekilde değiştirilmiş olacaktır.

 

Umarım işinizi görür.

Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared

Standard

Merhaba Arkadaşlar,

Eğer projenizde PDO kullanıyorsanız lokalde herşey yolunda iken yayına verdiğinizde veri tabanında oluşturduğunuz view leri kullanırken aşağıdaki hatayı almış olabilirsiniz.

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared...

Bu hata bazen MySQL sürüm uyumsuzluğundan da kaynaklanıyor olsa bile PDO kullananlar için kesin çözüm ATTR_EMULATE_PREPARES true değeri ile birlikte attribute şeklinde eklemelisiniz. Kullanım şekilleriniz farklı olabilir. Eğer ayarlarınızı bir array ile tutuyorsanız 1. seçenek size geliyor. 


'options' => [
\PDO::ATTR_EMULATE_PREPARES => true
]

Eğer doğrudan attribute ekleme yapıyorsanız aşağıdaki şekilde satırı contstruct’a PDO tanımları bloğuna ekleyebilirsinz.

$this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

XAMPP yeni güvenlik konsepti (new security consept) Erişim Yasak Hatası

Standard

Merhaba Arkadaşlar;

Xampp 7.2.6 sürümünde local phpmyadmin ekranına erişim esnasında karşılaştığım bu sorunu aşağıdaki şekilde çözümledim. Diğer sürümlerinde benzer bir durumu yaşamamıştım. Dolayısı ile aynı sorun diğer sürümlerde de var mı yok mu bilemiyorum.

1 – /lamp/etc/extra/httpd-xampp.conf dosyasını bir editörde açarak aşağıdaki bloğu bulun.

<Directory "/opt/lampp/phpmyadmin">
AllowOverride AuthConfig Limit
Require local
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

2 – Bu bloğu aşağıdaki şekilde değiştirin.

<Directory "/opt/lampp/phpmyadmin">
AllowOverride AuthConfig Limit
Order allow,deny
Allow from all
Require all granted

</Directory>


3 – Apahce servisini restart ettiğinizde sorun giderilmiş olacaktır.

MySQL Stored Procedure Select statement içerisinde like kullanımı

Standard

Merhaba Arkadaşlar;

MySQL yeni başlayanlar ya da stored procedure kullanımında sorun yaşanlar özellikle bu yazı işinize yarayacaktır düşüncesindeyim.

Bir procedure yaptınız ve select içerisinde like ifadesini kullanacaksınız; ama nasıl? Yanıtı aşağıdaki gibi  olacaktır.


BEGIN
SET @kriter := CONCAT('%',TRIM(degisken),'%');
SELECT
*
from tabo
WHERE
field = @kriter;
END

İyi çalışmalar…

Local makinanızda MariaDB için “Can’t init tc log” çözümü

Standard

Merhaba Arkadaşlar;

Yaşadığım bir sorunu internette araştırırken bulduğum çözümü sizinle paylaşmak istedim. Lokalimde Mac üzerinde xampp kullanıyorum. MySQL server Can’t init tc log çıkıtısını vererek çalışmadı. Bu durumda aşağıda yolunu verdiğim tc.log dosyasını silerek yeniden başlatmayı denediğinizde mysql sunucunuz başarılı bir şekilde başlatılmış olacaktır.

/Applications/XAMPP/xamppfiles/var/mysql/tc.log

İyi çalışmalar…

PHP ile Content Bot yaparken preg_match_all içerisinde birden fazla pattern kullanımı

Standard

Merhaba Arkadaşlar;

Bir site üzerinden curl kullanarak bot yapmak herkesin malumu kolay bir işlem; ama ya birden fazla pattern ihtiyacı duyarsanız?


<ul><li><span>ürün 1</span></li><li><span>ürün 2</span></li><li><span>ürün 3</span></li></ul>

Yukarıdaki içerik için aşağıdaki pattern doğru olacaktır;

#<li><span>(.*?)</span></li>#

ancak

<ul><li><span>ürün 1</span></li><li><div>indirimde</div><span>ürün 2</span></li><li><span>ürün 3</span></li></ul>

gibi bir eleman ile karşılaştığında preg_match_all çalışmayı durduracak bu satıra gelene kadar aldıklarını döndürecektir. Peki bu durumda ne yapacağız?

Şu anda elimizde iki adet pattern var. Ya ilki ya da ikincisi ile eşleşenleri listelemek istiyoruz. Bunu şöyle düşünün; veri 1 ya da 2 ye eşit ise işlemi gerçekleştir şeklinde bir if bloğumuz var. Kısaca OR operatörü kullanacağız. preg_match_all içerisinde OR operatörü kullanımı için patternlar arasında | (düz çizgi) kullanacağız.

Aşağıdaki örnek kod satırı sorunu çözmüş olacaktır.


preg_match_all('#<li><span>(.*?)</span>|<div>indirimde</div><span>(.*?)</span></li>#',$pattern,$arrRet);
print_r($arrRet);

Çıktı aşağıdaki gibi olacaktır.

Array
(
[0] => Array
(
[0] =>
ürün 1
[1] =>
indirimde
ürün 2

[2] =>
ürün 3
)

[1] => Array
(
[0] => ürün 1
[1] =>
[2] => ürün 3
)

[2] => Array
(
[0] =>
[1] => ürün 2
[2] =>
)

)

Burada çıktı dizisinin birinci ve ikinci indislerinde ki puzzle vari çıktı yapısını farketmişsinizdir. Birinci patterna uyan verileri 1 numaralı indiste, “|” ile ifade ettiğimiz or operatörü ile belirttiğimiz ikinci patterna uyan veriler 2 numaralı indiste listelenmiş durumda.

Umarım işinize yarar, iyi çalışmalar…

 

 

 

 

Jenkins Kurulumu – 1. Parça

Standard

Merhaba arkadaşlar,

Bu yazıda bir kaç farklı şekilde kurulabilen Jenkins kurulum işleminin lokal bilgisayara doğrudan kurulumunu ele alacağız.

Herşeyden önce bilgisayarınızda Java’nın kurulu olduğundan emin olmalısınız. Çünkü Jenkins; java ile yazılımış açık kaynak kodlu bir otomasyon sunucudur.

Kurulum Aşamaları

  1. Öncelikle https://jenkins.io/download/ adresinden Jenkins’i indirelim.

 İlgili sayfayı açtıktan sonra ekranın sol alt tarafında görünen indirme seçeneklerinden işletim sisteminizi seçin. Lokal bilgisayara doğrudan kurulumu ele alacağımız için sadece işletim sistemini seçin. Başka bir makalede docker üzerinde yer alan işletim sistemi üzerinden kurulumu ele alacağız.

 

 

 

 

2.İnen kurulum dosyasını çalıştırdıktan sonra aşağıdaki görüntü ekrana gelecektir. Standart program kurulumu aşamalarını takip edin.

3. Bu aşamada Jenkins kurulum dosyalarının bilgisayarınıza kopyalanması tamamlanmıştır. Kontrol paneline giriş için yapılandırma işlemlerimizi yapacağız bu aşamadan sonra.

Kurulum tamamlandığında yapılandırma işlemleri için tarayıcı programınızda otomatik olarak yandaki ekran açılacaktır. Varsayılan olarak Jenknis 8080 portunuzu kullanır. http://localhost:8080 adresini açtığınızda eğer yapılandırma aşamalarını tamamlamadıysanız bu ekran görüntüye gelecektir. Burada yapılması gereken kırmızı renk ile verilen Jenkins ilk giriş parolasının kayıt edildiği dizini kopyalayın ve terminalde “less” komutu ile birlikte çalıştırın.

4. Bu işlem sizden admin yetkisi isteyecektir.

Permission denied hatası alırsanız eğer sudo komutu ile birlikte çalıştırın.

 

 

 

5. Ekrandaki gibi bir şifre elde edeceksiniz. İlk satırda yer alan görüntüde “2ca…” şeklinde başlayan parolayı seçerek kopyalayın.

 

 

 

 

 

 

 

 

6. Aşağıdaki ekranda gördüğünü alana yapıştırın ve ardından Continue butonuna basın.

7. Burada Jenkins için plugin yapılandırması yapıp yapmayacağınızı soracaktır size, pluginleri farklı bir yazıda ele alacağımız için biz şimdilik soru modalını kapatarak devam ediyoruz. 

8. İşte bu kadar. Bu aşamadan sonra panele erişebilir ve işlemlerinizi gerçekleştirebilirsiniz. Bu ekranda Start Using Jenkins butonuna basmanız yeterli.

9. Buradan sonra yapmamız gereken tek şey parolamızı unutmayacağımız bir şifre ile değiştirmek. Ekranın sağ üst köşesinde bulunan admin linkine tıklıyoruz ve menüden konfigürasyonu değiştir linkini seçiyoruz. Ardından ekranın en altında bulunan parola alanını değiştirip Kaydet butonuna basmamız yeterli.

Yeni başlayanlar için kolay kurulum aşamaları böyle idi. Umarım faydalı olmuştur. Konteyner yapıları ile birlikte kurulum aşamaları için müsait olduğum ilk anda bir makale yazacağım.

Error: Error code 65 hatası ve çözümleri

Standard

Merhaba arkadaşlar.

Bu yazımda Error: Error code 65 for command: hatası ve çözümüne bakacağız elimden geldiğince.

Bu hatanın tek bir sebebi yok maalesef ve dolayısı ile de tek bir çözümü bulunmuyor. Genellikle Xcode signing profile sorunları nedeni ile yaşanıyor; ancak hata metnini doğru analiz etmek gerekir. Biz bu yazıda iki farklı sebebini ele alarak işleyeceğiz. Umarım faydalı olur birilerine.

Editörünüzden (genellikle Visual Studio Code kullanılır) ionic projenizi ios platform için build ettiğinizde Xcode içerisinde Provisioning Profile içerisinde takım seçilmemiş ya da doğru takım seçilmemesi nedeni ile oluşuyor. Hatta bazı durumlarda Xcode tarafında linker command failed with exit code 1 (use -v to see invocation) şeklinde hata ile birleştiğinde insanı canından bezdirecek hale gelebiliyor. İnternette araştırdığım ve denediğim çözümleri aşağıdaki şekilde sıralayabilirim.

Eğer editörünüzde build sonrası aldığınız hata içerisinde

You may not have the required environment or OS to run this project

şeklinde bir ibare var ise çözüm önerilerim aşağıdaki şekilde olacaktır.

Çözüm 1:

Xcode tarafında Target>General>Singing kısmından Automatically manage singing kutusunu işaretledikten sonra editörünüzden tekrar ionic cordova build ios komut satırını çalıştırmayı deneyin.

Çözüm 2:

  1. Xcode içerisinde Target>General>Signing yolunda doğru takımı seçtiğinizden emin olun.
  2.  Target>Build Settings>Build Options>Enable Bitcode seçeneğini “YES” olarak değiştirin.
  3. Editörünüzden ionic cordova build ios komut satırını çalıştırın.

Çözüm 3:

ionic cordova platform rm ios ve ionic cordova platform add ios komut satırlarını çalıştırdıktan sonra tekrar build etmeyi deneyin.

Eğer hata metni içerisinde You may not have the required environment or OS to run this project şeklinde bir ibare bulunmuyor ise çözüm için aşağıdaki adımları deneyin.

 

Çözüm 1:

Xcode içerisinde Product>Clean menü yolundan önce temizliğimizi bir yapalım ardından da tekrar editörünüzden ionic cordova build ios komut satırını çalıştırmayı deneyin.

Çözüm 2:

Bu seçenek her ne kadar kesin çözüm olmasa bile bazı durumlarda Xcode sürümü eski kaldığında ya da cordova sürümü ile uyuşmadığında faydalı olabiliyor. Xcode sürümünüzü güncelleyin ya da kaldırıp yeniden kurun.

Hata metni içerisinde linker command failed with exit code 1 (use -v to see invocation) ibaresi var ise;

Çözüm 1:

İnternette araştırma yaparken bir de böyle bir çözüm buldum; benim yaşadığım soruna ilaç olmadı hatta biraz da ilginç geldi ama belki birilerinin işine yarar düşüncesi ile buraya ekleyelim.

Projenizi xcodeproj olarak değil de xcworkspace uzantılı dosya üzerinden Xcode’ta açıp build etmeyi deneyebilirsiniz.

Çözüm 2:

Xcode>Target>Build Settings>Build Active Architecture seçeneğini “NO” olarak işaretleyip tekrar build yapmayı deneyebilirsiniz.

Çözüm 3:

  • Bazen bu hataya 4 duplicate symbols for architecture arm64 ibaresi var ise Target>General sekmesinde Linked Frameworks and Libraries bölümünde aynı içeriğe sahip frameworklerin yer alması neden olabiliyor. Çözüm olarak ise Build Settings içerisinde bulunan No Common Blocks “NO” olarak seçin ve tekrar build etmeyi deneyin. Gerçi duplicate symbols hatası başlı başına bir konu olarak işlenebilirdi belki ama konunun ana başlığı ile ilintili olduğu için yine bu konu altında yazıyorum. Tekrarında ise yine Build Settings te Build Options içerisinde Enable Testability seçeneğini “NO” olarak işaretleyerek deneyin.
  • Eğer aynı hatayı almaya devam ederseniz; Visual Studio Code içerisinden node_modules klasörünü kaldırıp npm i komut satırını çalıştırın ve uygulamanızı tekrar ionic cordova build ios komut satırı ile build edin.
  • Bu da çözüm olmaz ise aşağıdaki komut satırlarını sırası ile çalıştırın.

rm -rf node_modules/ platform/ios
npm i
npm run-script build => bu satır ile paketlerin tamamının kurulumu gerçekleştirilecektir.

Şimdi sıra geldi uygulumanın ana sizininde bulunan package.json dosyasını editlemeye. cordova-ios sürümünün güncel olduğundan emin olalım. Bende codova-ios’un 4.5.4 sürümü bulunuyor. Aşağıdaki satır değişikliğini yapın.

"cordova-ios": "4.5.4" yerine "cordova-ios": "^4.5.4" “^” karakterini sürüm numarasının başına ekleyin. Aynı değişikliği config.xml dosyası için de yapın ve build işlemini yenileyin.

  • Sorun halen devam ediyor ve cordova-plugin-console pluginini kullanıyorsanız, kullanmayın 🙂 Bu plugini kaldırarak tekrar build etmeyi deneyin. Çünkü bu plugin işlevi 4.5.0 ve üzeri ips platformu içerisinde varsayılan olarak hali hazırda mevcut. Duplicate hatasına sebep olabilir.
  • Console pluginini kaldırmak da işe yaramadıysa aşağıdaki çözümü deneyin.

Ionic app-script son sürümü kullanıyorsanız eğer (bende mevcutta 3.1.6 sürümü var) zaman zaman sürüm çakışması nedeni ile sorunlara sebep verebiliyor. Eski bir sürümü kullanmayı deneyebilirsiniz. npm install @ionic/app-scripts@3.0.0 --save-dev komut satırını çalıştırarak tekrar build etmeyi deneyebilirsiniz. Muhtemelen siz de build etmeye çalıştığınızda Cannot find module '@angular/tsc-wrapped/src/tsc' hatasını alacaksınız. Aşağıdaki komut satırlarını sırası çalıştırın ve ardından build işlemini yineleyin.

npm install -g angular-cli
npm install @angular/tsc-wrapped autoprefixer

  • Bu satıra kadar geldiyseniz aynı hatayı almaya devam ediyorsunuz demek ki. Üzüldüm; öyleyse farklı çözümler denemeye devam edelim.

Öncelikle package.json ve config.xml dosyasında birbiri ile aynı işi yapan plugin olmadığına dikkat edin. Benim yaşadığım durumda local notification plugini iki farklı şekilde eklenmiş durumda idi. cordova-plugin-local-notification pluginini kaldırarak tekrar build denediğimde build işlemi başarılı bir şekilde tamamlanmış oldu.

<plugin name="cordova-plugin-local-notification" spec="^0.9.0-beta.2" />
<plugin name="de.appplant.cordova.plugin.local-notification" spec="^0.8.5" />

Umarım faydalı olmuştur.

Angular ile PDF Çıktı Almak

Standard

 

Merhaba Arkadaşlar.

Standart html projelerimizde pdf, excel ve ekran görüntüsü çıktılarını çok karmaşık olmadan bir takım eklentiler ile yapabiliyorduk. Angular projelerde bu durum yeni başlayanlar için biraz karmaşıklaşabiliyor. Bu yazımızda Angular 2 için bu karmaşadan çok basit bir şekilde nasıl kurtulabileceğinizi anlatacağım.

Bu işlem için iki eklentiye ihtiyacımız var. html2canvas ve pdfmake.

Eklentileri projeye dahil etmek için proje anadizininde iken konsolunuzdan

bower install html2canvas

bower install pdfmake

yazarak çalıştırmanız yeterli. 

Eğer bower projeye dahil edilmemiş ise npm install bower komut satırını çalıştırmanız kafi gelecektir. Yok bu da çalışmaz ise artık bilgisayarınıza nodejs yüklemelisiniz. Bunu da bir başka makalede ele alırız.

 

pdfmake’in bir çok özelliği var. PDF olarak çıktı alınacak belgenin style, table, image gibi içeriklerini json olarak belirleyebilirsiniz mesela; ancak bu yöntem sadece bir pdf çıktı için biraz uğraştırıcı olabilir. Eğer pdf çıktı üzerinde seçim düzenleme v.b. işlemler yapacaksanız tabi ki bu özellikleri kullanmak zorundasınız. Bu makalede basit olarak ekranı önce html2canvas sayesinde resim haline getireceğiz, ardından da pdfmake ile pdf dosyası şeklinde bilgisayara indirilmesini sağlayacağız.

Örnek Uygulama:

1- Html:

<html>
<head>
  <title>PDF Çıktı Örneği</title>
  <script src='build/pdfmake.min.js'></script>
  <script src='build/vfs_fonts.js'></script>
</head>
<body>
  <div id="pdfCikti">
     PDF çıktı için hazırlanacak veri bu alanda yer alacak. 
  </div>
  <button type="button" id="pdfOlustur">PDF Oluştur</button>
 </body>
</html>

2- Jquery

jQuery(document).on('click', '#pdfOlustur', function(){
 html2canvas(document.getElementById('pdfCikti'), {
 onrendered: function (canvas) {
 var data = canvas.toDataURL();
 var docDefinition = {
 content: [{
 image: data,
 width: 1024,
 }]
 };
 pdfMake.createPdf(docDefinition).download("pdfCikti.pdf");
 }
 });
 });

İşte hepsi bu kadar.

Tabii bower.json dosyanızda dependencies ve modüller kısmına html2canvas’ı ve tanımlamayı unutmamalısınız.

Umarım işinizi görür bu örnek.

Node Modules versiyon uyuşmazlığı (gulp build sorunu)

Standard

Merhaba Arkadaşlar;

Node Js ile yeni yeni proje geliştirirken ilginç bir durum fark ettim. Yeni başlayan arkadaşlar da faydalanır düşüncesi ile sizinle de paylaşıyorum.

Örneğin daha önce Gulp.js ile derlenmiş (build edilmiş) bir projede bilgisayarda ki nodejs versiyonu değiştiğinde (genellikle update edildiğinde) eski sürüm ile gelen nodejs modülleri bir sonraki build işlemlerinizde hata verebiliyor ve hatta zaman zaman bazı durumlarda build işlemini gerçekleştiremiyor. Benim de çözmek için çok uzun zamanımı alan bu durumu fark edip biraz araştırdığımda aşağıdaki çözüme ulaştım. Benim için çalıştı bir sorun ile karşılaşmadım. Umarım size de faydası olur.
1. Çözüm:
Sırası ile uygulanması gereken adımlar;
npm install -g salita
satila package.json dosyanızda ki sürümleri güncelleyecektir.
npm update --save
Eğer --save kısmını eklemezseniz çok fazla uzun sürebiliyor güncelleme işlemi ve hatta donup kalma olasılığı var.
Bu işlem biraz zaman alabiliyor. Sabretmelisiniz.

2. Çözüm:
1. Çözüm sonrasında libsass bindings not found gibi bir mesaj alırsanız eğer node-sass güncellenmesi ya da yeniden kurulması gerekir.
Bu işlem için aşağıdaki adımları deneyin.

npm install node-sass
ya da

npm uninstall node-sass
npm install node-sass

3. Çözüm:
Eğer yukarıdaki işlem sizin için çözüm olmaz ise alternatif yol olarak aşağıdaki çözümü uygulayabilirsiniz.
1. package.json dosyanızda gulp-sass için kullanacağınız versiyonu aşağıdaki şekilde belirtin.

"devDependencies" {
"gulp-sass":"*"
}

2. Projenizdeki node_modules dizinini siliyoruz.

cd [proje ana dizini] &&
rm -rf node_modules/

3. npm güncelliyoruz.
npm update

Şu andan itibaren npm ve node modülleri tamamen yeni versiyona göre ayarlanmış oldu. Artık gulp build diyebiliriz.