When you think about installing a nameserver, then you theoretically could just install bind9 from the repositories.
This also works fine, if you work with file-based configuration.
But when you want to have a dynamic interface, e.g. your users can enter DNS names themselves, you don't want the dns server to be stopped and restarted at every entry, because this disrupts the service for everyone else.
So you want to use dynamic loadable zones (DLZ, http://bind-dlz.sourceforge.net/), which means bind9 uses a mysql/postgre/ODBC database as backend.
Then you can add n entries at your leisure, without having to restart the server.
But using bind9 with DLZ isn't that simple.
When you try, you'll find that it doesn't work.
Why that is, you see when you start the bind9 server in debug mode
You'll see this output
22-Oct-2011 13:32:24.387 starting BIND 9.7.3 -g -d 9
22-Oct-2011 13:32:24.387 built with '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir=/etc/bind' '--localstatedir=/var' '--enable-threads' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-openssl=/usr' '--with-gssapi=/usr' '--with-gnu-ld' '--with-dlz-postgres=no' '--with-dlz-mysql=no' '--with-dlz-bdb=yes' '--with-dlz-filesystem=yes' '--with-dlz-ldap=yes' '--with-dlz-stub=yes' '--with-geoip=/usr' '--enable-ipv6' 'CFLAGS=-fno-strict-aliasing -DDIG_SIGCHASE -O2' 'LDFLAGS=-Wl,-Bsymbolic-functions' 'CPPFLAGS='
And you realize why it doesn't work.
Because bind9 in the ubuntu repositories has been compiled without DLZ support...
Of course, if bind9 doesn't load a SQL driver, it won't be able to access a SQL database...
So you have to recompile bind9.
And this is what this tutorial is about.
For this tutorial, for convenience, simplicity and ease of use, I will suppose you work as root.
However, this is not recommended for security reasons.
So if you don't, just add sudo in front of every apt-get directive.
Code:
apt-get install bind9
apt-get install bind9utils
apt-get remove bind9
apt-get build-dep bind9
mkdir /home/yourusername/bind9
cd /home/yourusername/bind9
apt-get source bind9
The database dependencies (not included in build-dep bind9)
Code:
apt-get install libdb4.8-dev
apt-get install libpq-dev
apt-get install libmysqlclient16-dev
apt-get install unixodbc unixodbc-dev
Install the databases themselves (you only need one of those)
Code:
apt-get install postgresql-9.1
apt-get install mysql-server mysql-client
apt-get install firebird2.5-superclassic
cd /home/yourusername/sources/bind9/bind9-9.7.3.dfsg
Code:
./configure --prefix=/usr --sysconfdir=/etc/bind --localstatedir=/var \
--mandir=/usr/share/man --infodir=/usr/share/info \
--enable-threads --enable-largefile --with-libtool --enable-shared --enable-static \
--with-openssl=/usr --with-gssapi=/usr --with-gnu-ld \
--with-dlz-postgres=yes --with-dlz-mysql=yes --with-dlz-bdb=no \
--with-dlz-filesystem=yes --with-dlz-ldap=yes \
--with-dlz-stub=yes --with-geoip=/usr --enable-ipv6
Now configure should run.
While configure is running, have a look at the configure statement, especially this argument:
Note thatI have nothing against bdb (BerkeleyDB), as you see with "apt-get install libdb4.8-dev" but currently, configure doesn't like it:
> checking for Berkeley DB DLZ driver... not found
> configure: error: could not find Berkeley DB include directory
> make: *** [configure-stamp] Error 1
(http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=634533)
So I just switched it off...
Now, if configure ran and didn't output an error message, initiate the make (compilation) process:
Otherwise, fix the error messages.
Now, while your system is compiling, we can create the database tables.
You can do this any way you like, I'll use pgamin3 for postgres, mysql-workbench for mysql, and flamerobin for firebird.
Code:
apt-get install pgadmin3
apt-get install flamerobin
For mysql-workbench, go to:
http://dev.mysql.com/downloads/workbench/
and download the most appropriate version of mysql-workbench
Since I run Ubuntu 11.10 x64, and there is no such package, I downloaded mysql-workbench for ubuntu 11.04 x64.
http://dev.mysql.com/downloads/workb...html#downloads
Download it, then open a terminal, and change the current working directory to your download location.
There should be this file in that location:
mysql-workbench-gpl-5.2.35-1ubu1104-amd64.deb
Now install it with
Code:
apt-get install libzip1 libgtkmm-2.4-1c2a python-paramiko python-pysqlite2 libctemplate0
dpkg -i mysql-workbench-gpl-5.2.35-1ubu1104-amd64.deb
Now start it (applications-->programming-->MySQL workbench in gnome-classic).
For those who use the 11.04 deb on 11.10, if your workbench freezes on the splash screen, just type alt+f4 and the workbench will show.
Now once arrived in mysql-workbench, click on connect (to localhost) and use user root plus the password you set for user root during the mysql-installation.
Once you're connected (press alt+f4 if nothing happens)
go in menu Edit->Preferences->SQL Editor and
untick "Safe updates" (in order to be able to delete an entire table without where), then switch back to general (because you can't click OK here - bug) and then click OK. You may want to re-enable this options later on.
If SQL-workbench doesn't work, remove it with
Code:
apt-get remove mysql-workbench-gpl
and look out for another administration tool
like
Code:
apt-get install mysql-admin
Now, to connect to the postgres database, we first have to set the password:
Code:
su postgres
psql
ALTER USER postgres WITH ENCRYPTED PASSWORD 'your_password';
\q
exit
Now open pgamin3, and login to the database ON LOCALHOST (default port: 5432)
Now, enable remote access on your MySQL server:
In
change
Code:
bind-address = 127.0.0.1
to
Code:
#bind-address = 127.0.0.1
bind-address = 192.168.1.8
(with 192.168.1.8 being the server's internal IP address)
Add remote access:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
If you can't access mysql, you may have to change the mysql root user password:
Code:
open /usr/bin/mysqld_safe --skip-grant-tables
Start the mysql console:
Code:
mysql -u root -p mysql
update user set Password=PASSWORD('your_password') WHERE User='root';
then type exit to exit the mysql command line.
In order to enable postgresql remote access, do this:
Open
Code:
/etc/postgresql/9.1/main/postgresql.conf
in a text editor.
Now change listen_addresses to your internal IP address, in this case 192.168.1.8
Code:
listen_addresses = 'localhost, 192.168.1.8' # what IP address(es) to listen on;
Then, edit this file
Code:
/etc/postgresql/9.1/main/pg_hba.conf
and add
Code:
host all all 192.168.1.0/0 md5
Once you can connect to your databases, create the DLZ database:
MySQL
Code:
CREATE SCHEMA `bind9_dlz` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
PostGreSQL
Code:
-- Database: "bind9_dlz"
-- DROP DATABASE "bind9_dlz";
CREATE DATABASE "bind9_dlz"
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
CONNECTION LIMIT = -1;
Then, create the table-create scripts
MySQL:
Code:
-- MySQL dump 10.13 Distrib 5.1.58, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: bind9_dlz
-- ------------------------------------------------------
-- Server version 5.1.58-1ubuntu1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `dns_records`
--
DROP TABLE IF EXISTS `dns_records`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dns_records` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`zone` varchar(255) NOT NULL,
`host` varchar(255) NOT NULL DEFAULT '@',
`type` varchar(255) NOT NULL,
`data` text,
`ttl` int(11) NOT NULL DEFAULT '86400',
`mx_priority` int(11) DEFAULT NULL,
`refresh` int(11) DEFAULT NULL,
`retry` int(11) DEFAULT NULL,
`expire` int(11) DEFAULT NULL,
`minimum` int(11) DEFAULT NULL,
`serial` bigint(20) DEFAULT NULL,
`resp_person` varchar(255) DEFAULT NULL,
`primary_ns` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `type` (`type`),
KEY `host` (`host`),
KEY `zone` (`zone`),
KEY `zone_host_index` (`zone`(30),`host`(30)),
KEY `type_index` (`type`(8))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `dns_records`
--
LOCK TABLES `dns_records` WRITE;
/*!40000 ALTER TABLE `dns_records` DISABLE KEYS */;
/*!40000 ALTER TABLE `dns_records` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `xfr_table`
--
DROP TABLE IF EXISTS `xfr_table`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `xfr_table` (
`zone` varchar(255) NOT NULL,
`client` varchar(255) NOT NULL,
KEY `zone` (`zone`),
KEY `client` (`client`),
KEY `zone_client_index` (`zone`(30),`client`(30))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `xfr_table`
--
LOCK TABLES `xfr_table` WRITE;
/*!40000 ALTER TABLE `xfr_table` DISABLE KEYS */;
/*!40000 ALTER TABLE `xfr_table` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2011-10-19 23:04:01
PostGre:
Code:
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: dns_record; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
--
CREATE TABLE dns_record (
id integer NOT NULL,
zone character varying(255) NOT NULL,
ttl integer NOT NULL,
type character varying(255) NOT NULL,
host character varying(255) DEFAULT '@'::character varying NOT NULL,
mx_priority integer,
data text,
primary_ns character varying(255),
resp_contact character varying(255),
serial bigint,
refresh integer,
retry integer,
expire integer,
minimum integer
);
ALTER TABLE public.dns_record OWNER TO postgres;
--
-- Name: dns_record_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--
CREATE SEQUENCE dns_record_id_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE public.dns_record_id_seq OWNER TO postgres;
--
-- Name: dns_record_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
--
ALTER SEQUENCE dns_record_id_seq OWNED BY dns_record.id;
--
-- Name: dns_record_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
--
SELECT pg_catalog.setval('dns_record_id_seq', 1, false);
--
-- Name: dns_xfr; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
--
CREATE TABLE dns_xfr (
zone character varying(255) NOT NULL,
client character varying(255) NOT NULL
);
ALTER TABLE public.dns_xfr OWNER TO postgres;
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
--
ALTER TABLE dns_record ALTER COLUMN id SET DEFAULT nextval('dns_record_id_seq'::regclass);
--
-- Name: dns_record_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace:
--
ALTER TABLE ONLY dns_record
ADD CONSTRAINT dns_record_pkey PRIMARY KEY (id);
--
-- Name: dns_record_host_idx; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
--
CREATE INDEX dns_record_host_idx ON dns_record USING btree (host);
--
-- Name: dns_record_type_idx; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
--
CREATE INDEX dns_record_type_idx ON dns_record USING btree (type);
--
-- Name: dns_record_zone_idx; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
--
CREATE INDEX dns_record_zone_idx ON dns_record USING btree (zone);
--
-- Name: dns_xfr_client_idx; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
--
CREATE INDEX dns_xfr_client_idx ON dns_xfr USING btree (client);
--
-- Name: dns_xfr_zone_idx; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
--
CREATE INDEX dns_xfr_zone_idx ON dns_xfr USING btree (zone);
--
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--
REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;
Then, insert the data
MySQL:
Code:
INSERT INTO `bind9_dlz`.`dns_records`
(`id`,`zone`,`host`,`type`,`data`,`ttl`,`mx_priority`,`refresh`,`retry`,`expire`,`minimum`,`serial`,`resp_person`,`primary_ns`)
VALUES
(1, 'example.com', '@', 'SOA', NULL, 180, NULL, 10800, 7200, 604800, 86400, 2011091101, 'admins.mail.hotmail.com', '77.84.21.84'),
(2, 'example.com', '@', 'NS', '77.84.21.84', 180, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3, 'example.com', '@', 'A', '77.84.21.84', 180, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4, 'example.com', 'www', 'A', '77.84.21.84', 180, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5, 'xn--unicode-example.com', '@', 'SOA', NULL, 180, NULL, 10800, 7200, 604800, 86400, 2011091101, 'admins.mail.hotmail.com', '77.84.21.84'),
(6, 'xn--unicode-example.com', '@', 'NS', '77.84.21.84', 180, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7, 'xn--unicode-example.com', '@', 'A', '77.84.21.84', 180, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8, 'xn--unicode-example.com', 'www', 'A', '77.84.21.84', 180, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
;
PostGre:
Code:
insert into dns_record (id, zone, ttl, type, host, mx_priority, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum)
values
(1, 'example.com', 180, 'SOA', '@', NULL, NULL, '77.84.21.84', 'admins.mail.hotmail.com', 2011091101, 10800, 7200, 604800, 86400),
(2, 'example.com', 180, 'NS', '@', NULL, '77.84.21.84', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3, 'example.com', 180, 'A', '@', NULL, '77.84.21.84', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4, 'example.com', 180, 'A', 'www', NULL, '77.84.21.84', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5, 'xn--unicode-example.ch', 180, 'SOA', '@', NULL, NULL, '77.84.21.84', 'admins.mail.hotmail.com', 2011091101, 10800, 7200, 604800, 86400),
(6, 'xn--unicode-example.com', 180, 'NS', '@', NULL, '77.84.21.84', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7, 'xn--unicode-example.com', 180, 'A', '@', NULL, '77.84.21.84', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8, 'xn--unicode-example.com', 180, 'A', 'www', NULL, '77.84.21.84', NULL, NULL, NULL, NULL, NULL, NULL, NULL)
;
Now comes the trickiest part:
Create the bind9 config file.
For MySQL (/etc/bind/named.conf):
Code:
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
#auskommentiert !!!
#include "/etc/bind/named.conf.options";
#include "/etc/bind/named.conf.local";
#include "/etc/bind/named.conf.default-zones";
key "rndc-key" {
// how was key encoded
algorithm hmac-md5;
// what is the pass-phrase for the key
secret "4ptlffIBhVnZgfdT0CXIcLDZeONxA5bHUVT5W2NofC9O4FOfjps8FzghoQy4myXnJ0g9jrna9Sjl6uKt6c/22A==";
};
#options {
#default-key "rndc-key";
#default-server 127.0.0.1;
#default-port 953;
#};
controls {
inet * port 953 allow { any; } keys { "rndc-key"; };
#inet * port 53 allow { any; } keys { "rndc-key"; };
};
logging {
channel query.log {
file "/var/log/query.log";
// Set the severity to dynamic to see all the debug messages.
severity dynamic;
};
category queries { query.log; };
};
dlz "Mysql zone" {
database "mysql
{host=127.0.0.1 port=3306 dbname=bind9_dlz user=root password=your_password}
{SELECT zone FROM dns_records WHERE zone = '$zone$'}
{SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data
FROM dns_records
WHERE zone = '$zone$' AND host = '$record$' AND type <> 'SOA' AND type <> 'NS'}
{SELECT ttl, type, data, primary_ns, resp_person, serial, refresh, retry, expire, minimum
FROM dns_records
WHERE zone = '$zone$' AND (type = 'SOA' OR type='NS')}
{SELECT ttl, type, host, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data, resp_person, serial, refresh, retry, expire, minimum
FROM dns_records
WHERE zone = '$zone$' AND type <> 'SOA' AND type <> 'NS'}
{SELECT zone FROM xfr_table where zone='$zone$' AND client = '$client$'}";
};
And PostgreSQL (/etc/bind/named.conf):
Code:
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
#auskommentiert !!!
#include "/etc/bind/named.conf.options";
#include "/etc/bind/named.conf.local";
#include "/etc/bind/named.conf.default-zones";
key "rndc-key" {
// how was key encoded
algorithm hmac-md5;
// what is the pass-phrase for the key
secret "4ptlffIBhVnZgfdT0CXIcLDZeONxA5bHUVT5W2NofC9O4FOfjps8FzghoQy4myXnJ0g9jrna9Sjl6uKt6c/22A==";
};
#options {
#default-key "rndc-key";
#default-server 127.0.0.1;
#default-port 953;
#};
controls {
inet * port 953 allow { any; } keys { "rndc-key"; };
#inet * port 53 allow { any; } keys { "rndc-key"; };
};
logging {
channel query.log {
file "/var/log/query.log";
// Set the severity to dynamic to see all the debug messages.
severity dynamic;
};
category queries { query.log; };
};
dlz "Postgres Zone" {
database "postgres 2
{host=127.0.0.1 port=5432 dbname=bind9_dlz user=postgres password=your_password}
{SELECT zone FROM dns_record WHERE zone = '$zone$'}
{SELECT ttl, type, mx_priority, case when lower(type)='txt' then '\"' || data || '\"' else data end AS data FROM dns_record WHERE zone = '$zone$' AND host = '$record$' AND type <> 'SOA' AND type <> 'NS'}
{SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum FROM dns_record WHERE zone = '$zone$' AND (type = 'SOA' OR type='NS')}
{SELECT ttl, type, host, mx_priority, case when lower(type)='txt' then '\"' || data || '\"' else data end AS data, resp_contact, serial, refresh, retry, expire, minimum FROM dns_record WHERE zone = '$zone$' AND type <> 'SOA' AND type <> 'NS'}
{SELECT zone FROM dns_xfr where zone='$zone$' AND client = '$client$'}";
};
Now start named
Code:
/etc/init.d/bind9 start
Now test whether it works:
Code:
dig @127.0.0.1 example.com
dig @127.0.0.1 www.example.com
If it gives you the IP, then it works, else there is something wrong.
Now you have to watch out.
You might have already realized that the entire process isn't that simple.
So let's come to the pitfalls, which foremost include:
- wrong IP (timeout)
- wrong database name (case-sensitive)
- wrong database password (case-sensitive, nonsensical error message)
- wrong order of columns in the named.conf file's SQL statements (since the column names are freely choosable, access depends on column indexes, and if they are wrong, but not of the wrong datatype, it won't throw an error, but resolving won't work)
- wrong escape sequence for named.conf (the old % instead of the new $)
But on top of all those obvious things, there is another thing that isn't that obvious.
Now it (should) work/s fine, but you'll realize that your named daemon will be gone when you restart your server.
This is because bind9 now depends on mysql/postgresql/firebird.
And rebooting your system will start bind before mysql/pgsql which causes bind to exit.
Changing the boot order of init scripts is a bit involved, so stay tuned.
Install insserv (service dependency resolver)
Code:
apt-get install insserv
Now edit these mysql init scripts:
Code:
/etc/init.d/mysql-ndb
/etc/init.d/mysql-ndb-mgm
/etc/init.d/mysql
and remove the $named from the two lines beginning with # Should-Start: and # Should-Stop.
Now edit
and append mysql to the Should-Start and Should-Stop lines. The 3rd file does not exsist on Lucid. Ignore it.
Dito for postgre/firebird.
Now run insserv to set up the necessary symlinks in /etc/rcX.d.
Code:
insserv mysql
insserv bind9
and there you go.
Bookmarks