Drupal: CKEditor konfigurieren

In einem anderen KB-Eintrag wurde erklärt, wie man dem bei [http://www.tech-island.com/kb-Platformunabh%C3%A4ngig-Internet-WordPress%3A+Mehrfache+Zeilenumbr%C3%BCche&structure=kb|Wordpress dem WYSIWYG-Editor einen schmaleren Zeilenumbruch] hinkriegt.

Das selbe kann man auch beim in Drupal erhaltenen CKEditor machen:

Erstelle ein Verzeichnis mit dem Namen overrides in sites/all/modules

Erstelle darin folgende zwei Dateien:

overrides.info und overrides.module

in overrides.info schreibe dies:

name = Overrides
description = Overrides settings
core = 7.x
 
package = own

und in overrides.module:

<?php
/<em> wysiwyg overrides </em>/
 
function overrides_wysiwyg_editor_settings_alter(&$settings, $context) {
  if($context['profile']->editor == 'ckeditor') {
    $settings['enterMode'] = 2;
    $settings['shiftEnterMode'] = 1;
  } else if($context['profile']->editor == 'tinymce') {
    $settings['forced_root_block'] = FALSE;
    $settings['force_br_newlines'] = TRUE;
    $settings['force_p_newlines'] = FALSE;
  }
}

Achtung: Das end-tag von <?php ist hier bewusst weg gelassen!

Gehe danach zur Module seite in: admin/modules Dort findest du in der Kategorie "OWN", das Modul "overrides". Aktiviere dieses.

Die Änderung sollte sofort wirksam werden, falls nicht wähle im cache menu: "Flush all caches".

Quelle: Dieser Tip stammt von: http://wdtutorials.com/drupal7/50

apache: An einer mySQL Datenbank authentifizieren

Die Methode mit .htaccess/.htpasswd ist vielen bekannt um ein Verzeichnis per passwort zu schützen – Und dies geht mit dem apache-modul: mod_auth_mysql auch über eine mysql Datenbank!

Die Möglichkeiten dieser Methode sind fast unerschröpflich, so kann z.B. ein Forum einen Verzeichnisschutz implementiert haben, bei dem man sich automatisch mit seinem normalen Foren-Login anmelden kann, usw.

Und so gehts:

Erst mal muss das mod_auth_mysql installiert werden, z.B. bei CentOS mittels:

yum install mod_auth_mysql

Dann legt man im zu schützenden Verzeichnis einfach ein normales .htaccess file an mit folgendem Inhalt:

AuthName "SeitenName"
AuthType Basic
AuthMySQLHost <DB_HOST>
AuthMySQLUser <DB_USER>
AuthMySQLPassword <DB_PASSWORT>
 
AuthMySQLDB <DB>
AuthMySQLUserTable <USER_TABELLE>
AuthMySQLNameField <FELD_NAME>
AuthMySQLPasswordField <FELD_PASSWORT>
AuthMySQLPwEncryption <passwort Verschlüsselung, z.B. md5>
AuthMySQLEnable On
AuthMySQLUserCondition "<ggf. weitere Kontitionen>"
require valid-user

Hier ist noch ein Beispiel, wie man das ganze auch auf Gruppenberechtigungen ausdehnen kann:

AuthName "YourSite"
AuthType Basic
 
# Database settings:
AuthMySQLHost localhost
AuthMySQLUser dbuser
AuthMySQLPassword dbpass
AuthMySQLDB dbname
 
# User table
AuthMySQLUserTable users
AuthMySQLNameField users.name
AuthMySQLPasswordField users.pass
 
# User Roles tables
AuthMySQLGroupTable "users, users_roles"
AuthMySQLGroupField users_role.rid
 
# Where clauses
AuthMySQLUserCondition "users.status = 1 and users.access <> 0"
AuthMySQLGroupCondition "users.uid = users_roles.uid AND users_roles.rid > 2"
 
# Do it to it!
AuthMySQLPwEncryption md5
AuthMySQLEnable On
require valid-user

Und wenn alles klappt kann man sich dann mit den Login-Daten aus der Datenbank anmelden! 😉

Quelle: [http://drupal.org/node/156547|drupal.org: Sharing authentication with HTTP-Auth]

BIND: Sag mir von wo du kommst und ich sage dir wohin du gehen sollst

bind hat ein sehr praktisches Feature, dass allerdings nur wenigen bekannt ist: anhand einer ACL kann man verschiedene "Sichten" erstellen; so kann man z.B. sagen, dass jemand der von einer Adresse vom internen Netzwerk kommt die interne Adresse eines Server erhält und jemand der von "draussen" kommt die externe, öffentlich zugängliche Adresse.

Und so gehts: Erstmal definieren wir in /etc/named/named.conf die entsprechende Zone für das interne Netz:

acl internal-network
{
  // Local
  127.0.0.0/8;
 
  // 10.1.1.0 - 10.1.1.255 (Internal Network)
  10.1.1.0/24;
};

Dann definieren wir je für die interne Zone und für den „rest“ eine view und includen das entsprechende Zonefile:

view "internal"
{
  match-clients { internal-network; };
  include "/etc/bind/zones.conf.int";
};
 
view "external"
{
  match-clients { any; };
  include "/etc/bind/zones.conf";
};

amavis/clamav: Fehler bei DB-Updates (connect(): Permission denied)

Falls man auf einmal von cron mails bekommt wie:

/etc/cron.daily/freshclam:
 
connect(): Permission denied

Und im freshclam.log:

WARNING: Clamd was NOT notified: Can't connect to clamd through /var/spool/amavisd/clamd.sock

Dann kann das unter anderem daran liegen, dass die Verzeichnisberechtigungen vom Verzeichnis in dem das file clamd.sock liegt (in diesem Falle: /var/spool/amavisd) falsch eingestellt sind.

Diese müssen chmod 770 sein. Falls sie z.B. 700 sind löst ein Umstellen der Berechtigungen das Problem:

chmod -v 770 /var/spool/amavisd

Weitere Infos: [https://bugzilla.redhat.com/show_bug.cgi?id=548234|Red Hat: Bug 548234 – Freshclam cannot notify clamd of database updates due to permission denied]

Suchen und Ersetzen in mehreren Dateien

Manchmal will man in mehreren Datei ein „Suchen & Ersetzten machen.
Dies geht mit folgendem sed Konstrukt ganz einfach:

sed -e 's/search/replace/g' -i *.txt

Die Option bedeuten:
-e Führe den folgenden code (expression) aus
-i editiere das file

[stextbox id=“tip“ caption=“Tip: Ersetzten von Strings mit slash (/)“]Falls man einen String mit slash (z.B. einen Pfad) ersetzten will, kann man % als alternatives Trennungszeichen verwenden. Z.B.

sed -e 's%/alter/pfad%/neuer/pfad%g' -i *.txt

[/stextbox]

Will man in einem Verzeichnis und allen Unterverzeichnissen in allen Dateien einen String ersetzen, so kann man noch find miteinbeziehen:

find ./ -type f -exec sed -i 's/search/replace/g' {} \;

Quelle: http://www.liamdelahunty.com/tips/linux_search_and_replace_multiple_files.php

iTunes Album gesplittet

Unter itunes (iphone) oder auch dem Windows Media Center (mce) kann es vorkommen, dass manche Alben als Alben angezeigt werden, andere jedoch sind gesplittet, d.h. für jeden Track wird ein eigenes Album erstellt (mit nur diesem Track drin), was natürlich sehr suboptimal ist. Continue reading iTunes Album gesplittet

DSH auf CentOS installieren

[http://www.netfort.gr.jp/~dancer/software/dsh.html.en|DSH] (Dancer’s shell) ist ein exzellenter weg um Shell Kommandos auf verschiedenen Linux-Systemen gleichzeitig abzusetzen.
Bevor es jedoch los geht braucht es unter CentOS ein wenig "Handarbeit".

Zuerst muss man compiler, make, usw. installieren, dann erst [http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz|libdshconfig] kompilieren und dann [http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz|dsh] selbst.

Zum Schluss muss man noch einen neuen library pfad hinzufügen:

yum install gcc make cpp gcc-c++ wget
 
wget <a href="http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz" target="blank">http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz</a>
wget <a href="http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz" target="blank">http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz</a>
 
tar -xvzf libdshconfig-0.20.9.tar.gz
cd libdshconfig-0.20.9
./configure
make install
 
tar -xvzf dsh-0.25.9.tar.gz
cd ../dsh-0.25.9/
./configure
make install
 
echo "/usr/local/lib/" >> /etc/ld.so.conf.d/dsh.conf
ldconfig -v |grep dsh

stdout und stderr gleichzeitig umleiten

Häufig möchte man bei Script- oder Programm Ausgaben, diese komplett, also stdout und stder in ein file oder /dev/null Umleiten.

Dazu existieren häufig falsche annahmen, wie z.B. script.sh 2>&1 /dev/null, was falsch ist.

Richtigerweise muss man zuerst die Ausgabe Umleiten und dann stderr auf stdout schreiben lassen, was mit dem & in der Form: 2>&1 geht.

Praktisch sieht das dann so aus:

script.sh > /dev/null 2>&1

Es gibt aber sogar noch einen eleganteren Weg mit &> um stdout und stderr gleichzeitig umzuleiten:

script.sh &> combined.log

Soft-RAID nachträglich auf LVM System hinzufügen

Die Situation: Man hat mal ein Linux System mit einer Festplatte und LVM aufgesetzt und möchte jetzt durch das hinzufügen einer zweiten Platte ein soft-raid darauf machen, ohne das System neu installieren zu müssen. – Und mit den richtigen Handgriffen geht das ganz einfach! 😉

[stextbox id=“note“ caption=“Mehr Platz gefällig?“]Meistens ist eine nachträglich hinzugefügte Platte grösser als die erste. – Möchte man dies gerade nutzen um mehr Platz zu bekommen kann man einfach zwei grosse Platten einbauen und nach der RAID-Migration der zweiten Platte, die erste auch noch ersetzen.
Die dazu nötigen Schritte werden an unten an passender Stelle beschrieben.[/stextbox]

Situation

Wir gehen davon aus, dass das system zwei Partitionen hat:
/dev/sda1 (100MB): /boot
/dev/sda2 (rest) : LVM
(bei mehr partionen die Schritte einfach entsprechend für alle wiederholen)

Migration

Zuerst mal wird das System herunter gefahren und die zweite Festplatte eingebaut.
Dann wieder hochfahren und die zweite Platte so formatiert, dass die Partitionen mindestens so gross sind wie die bisherigen (dürfen auch grösser sein, wenn es Sinn macht (z.B. beim LVM) und man evtl. vorhat später die kleinere Platte auch durch eine grössere zu ersetzen.

Nun migrieren wir /boot; dies ist besonders einfach, da /boot im laufenden Betrieb problemlos unmounted werden kann:

umount /boot
mdadm --create /dev/md1 --level=1 --raid-disks=2 /dev/sda1 missing

Nun muss gewartet werden bis

cat /proc/mdstat

beide Partitionen als synchron anzeigt. Danach wird die alte Partition erstmal wieder entfernt:

mdadm --manage /dev/md1 --fail /dev/sda1
mdadm --manage /dev/md1 --remove /dev/sda1
mdadm --zero-superblock /dev/sda1

Wir haben hier zuerst ein sog. "degraded" RAID-Array mit der bisherigen Partition erstellt.

Nun ändern wir in: /etc/fstab den Eintrag für boot wie folgt um:

/dev/md1                /boot                   ext3    defaults        1 2

Jetzt kann /boot wieder gemounted werden:

mount /boot/

Nun muss auch noch die: "#boot=" Zeile in: /boot/grub/menu.lst angepasst werden:

#boot=/dev/md1

Als nächstes stellen wir sicher, dass grub auf beiden Festplatten installiert ist:

grub
grub> device (hd0) /dev/sda
grub> root (hd0,0)
grub> setup (hd0)
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> setup (hd0)
grub> find /grub/stage1
grub> quit

Jetzt folgt die Migration des LVMs. Dazu erstellen wir wieder ein degraded raid-array, fügen dass als PV den LVM hinzu verschieben dann all die Daten von der alten Partition auf das neue md-drive und können danach das alte PV aus der VG entfernen:

mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb2
pvcreate /dev/md2
vgextend rootvg /dev/md2
pvmove /dev/sda2 /dev/md2
vgreduce rootvg /dev/sda2
pvremove /dev/sda2

Zu guter letzt muss jetzt noch ein neues initrd erstellt werden:

mkinitrd -v -f /boot/initrd-$(uname -r).img $(uname -r)

[stextbox id=“warning“ caption=“Achtung“]Das erstellen des initrd’s ist ganz wichtig und selbst dann, wenn man bereits vorher vom LVM gebootet- und CentOS am laufen hat! – Denn CentOS fügt bei der initialen initrd erstellung jeweils nur die Treiber-Module hinzu, die auch benötigt werden; so fehlt aber der raid-treiber und das System wird nicht booten![/stextbox]

Nun kann man das System neu starten und wenn alles geklappt hat die Partitionen der alten Platte dem neuen RAID-Array hinzufügen:

mdadm --manage /dev/md1 --add /dev/sda1
mdadm --manage /dev/md2 --add /dev/sda2
cat /proc/mdstat

[stextbox id=“tip“ caption=“Tip“]Will man nun die alte Platte auch gleich mit einer grösseren ersetzen, so kann man diese vor dem obigen Schritt durch eine grössere ersetzen, entsprechend Partitionieren und gleich wie im obigen Schritt einbinden.[/stextbox]

Drupal: Cache manuell löschen

Bei Problemen mit drupal wird es manchmal sogar nötig den Cache manuell in der Datenbank zu löschen.

Dies kann mit folgendem Query gemacht werden:

TRUNCATE TABLE drupal_cache;
TRUNCATE TABLE drupal_cache_block;
TRUNCATE TABLE drupal_cache_browscap;
TRUNCATE TABLE drupal_cache_content;
TRUNCATE TABLE drupal_cache_filter;
TRUNCATE TABLE drupal_cache_form;
TRUNCATE TABLE drupal_cache_menu;
TRUNCATE TABLE drupal_cache_page;
TRUNCATE TABLE drupal_cache_uc_price;
TRUNCATE TABLE drupal_cache_update;
TRUNCATE TABLE drupal_cache_views;
TRUNCATE TABLE drupal_cache_views_data;
DELETE FROM drupal_variable WHERE name="cron_semaphore";
DELETE FROM drupal_variable WHERE name="cron_last";