ARTICLE

Setting Up a Server
Contributed by Davidlohr Bueso in Servers on 2006-05-25 07:09:46

This article teaches you, the reader, how to configure a GNU/Linux based server with three of the most important services that must be provided in a company, at home, a lab or anywhere else, both for clients and internal usage: web, database, mail. So it will be assumed that the idea is to host websites that use certain technologies such as a scripting language and a database (for dynamic sites), and also to act as a mailing tool, for sending and receiving email.

Consider that this article only shows some of the basic features for configuring these services, each program has much more in depth options. Entire books have been written just about Apache or MySQL. So, don't just stay with what you learn here, play around, read, learn; system administration is all about security and performance, so there's a lot more to discover.

I have also decided to show some optimization (tuning) techniques for a better performance. We will use only free/open source software in this article, thus,it is not necessary to buy commercial licenses. The software we will use is Debian GNU/Linux, Apache, MySQL, PHP and Postfix. The first three are what is called LAMP, where the P can stand for various server side scripting languages such as PHP, Perl and Python. In general, it represents the open source web platform (both for developing and using it). I have been using LAMP and Postfix for years and must say that, after trying lots of other programs of the same sort, it is the wisest choice if you want a powerful, easy to use/configure/maintain and secure server environment.

Why use Debian? I have always liked this distribution because it's easy to manage packages (programs) and system services. It is also very secure and stable, making it perfect for servers and any system that must run 24/7. It's huge package repository (over 15490) is more than enough to get the best use out of any computer system.

Why use Apache? Simple - it's currently the best, most secure and most used HTTP server. It also supports a huge amount of modules and extensions. Here are some specific benefits of Apache: support, efficiency, portability and customizability.

Why use MySQL? It's logo says it all: The world's most popular open source database. This DBMS is reliable, powerful and easy to manage and use. Also, we will use it with Postfix for better integration and performance.

Why use Postfix? If you ask any systems administrator why he/she uses Postfix as a Mail Transport Agent (MTA) the answer will be it's easy and fast. Another great feature is it's security and the wide amount of operating systems it can run on (BSD, Linux, AIX, Solaris, OSX, etc.)

Installing and Configuring Apache

We will use Apache 2 because it has been rewritten for better performance and security. It brings more out of the box optimizations for scalability and throughput, as opposed to version 1.3 (which is not even being maintained anymore). So let's get to it, we first download and install the essential software:\

apt-get install apache2

This will also install the following packages: apache2, apache2-common,apache2-mpm-worker and apache2-utils. Now, try connecting to localhost:80 and you should see a page saying that Apache as been configured correctly. If not,you might have something wrong with the network settings, but that's a whole different ball game. By default, when installing services in Debian it leaves them configured to start when you boot GNU/Linux so you don't have to worry about further system configuration. For controlling the daemon we have apache2clt or we can use Debian's init utilities:

/etc/init.d/apache2 start|stop|restart|reload|force-reload 
apacheclt start|stop|restart|...

Apache2's configuration files, by default, are in /etc/apache2/. Whenever a configuration is modified, the server must be restarted. Here is a description of some of the more important files and directories:

  • apache2.conf is where the main configuration is, it used to be httpd.conf, so don't be fooled.
  • mods-available/ is the directory with all the modules that are available. The .load contain the Apache directives that are needed to load the modules. And the .conf are the configuration directives for each module.
  • mods-enabled/ is the directory that contains the symbolic links to the modules that we want to enable from mod-available/. At least the .load file must be there, so we will have: /etc/apache2/mod-enabled/modulex.load -> /etc/apache2/mod-available/modulex.load

Let's take this to practice, say we want to enable user directories:

(www.myurl.com/~someuser/). First uncomment the following in apache2.conf:

Next, we create the symbolic links for this module and restart the server:

cd /etc/apache2
ln -s mods-available/userdir.* /etc/apache2/mods-enabled/   
/etc/init.d/apache restart

This works for all the modules you want to load. Now let's try some optimization methods. Apache uses a great deal of resources, specially RAM, because it accumulates whatever is necessary to accommodate what it's serving and this process never decreases until it is complete. This takes up as much RAM as the largest dynamic script.

To help reduce this problem, edit apache2.conf and enable KeepAlive (increases time) and set a low value for KeepAliveTimout (this will reduce the time the process waits without doing anything). Also, set the value for MaxRequestsPerChild around 20, depending on the amount of dynamic sites the server is hosting. The idea behind this is that when the process ends, it makes it start over again, but with lower RAM usage. However, by doing this, you might have to increase MaxClients around 50%.

Installing and Configuring MySQL

MySQL 5 introduces a number of new features, compared to older versions, such as new data types, precision math, better performance for storage, faster queries and better handling of certain types. The list goes on, so I recommend checking out the official documentation to see how you can take advantage of the latest version. To get it:

apt-get install mysql-server-5.0

libdbd-mysql-perl, libmysqlclient15off, mysql-client-5.0 and mysql-common will also be installed. Debian will also make sure MySQL starts at boot time. To control the daemon, I use the init script and voila!:

/etc/init.d/mysql start|stop|restart|reload|force-reload|status

To first start working with this database, the root password must be set. The word root does not apply to the system's root, but to the database administrator, however, it can be the same person. So let's set it and log in:

mysqladmin -u root password 'thepassword'
mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 5.0.20a-Debian_1-log
    
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
mysql>

If you don't like using the command line system (lazy sysadmins), there a couple graphical user interfaces for MySQL, such as MySQLCC (QT), gMySQLCC (GTK+), etc. Since everything is running fine (or should be) it's time to optimize. MySQL uses algorithms that let you run it with little memory, but you can give it options to increase the memory usage if you have more, and therefore increase performance. To lower the amount of time MySQL sits waiting, edit the configuration file: /etc/mysql/my.cnf and add/change the following (values may vary depending on your specific needs):

wait_timeout=60 
connect_timeout=10
interactive_timeout=100 
join_buffer_size=1M
query_cache_size=128M
query_cache_limit=2M
max_allowed_packet=16M
table_cache=1024

Installing and Configuring PHP

Now that we have our httpd server up and running we can setup PHP. Debian includes PHP5 in the official package repository, not too long ago only up to version 4 was supported. So let's get it:

apt-get install php5

Just like for Apache and MySQL, extra packages will have to be install as well: apache2-mpm-prefork, libapache2-mod-php5 and php5-common.

Now, add support for MySQL:

apt-get install php5-mysql

I also like to add some more packages for PHP, such as CLI, Pear, LDAP, IMAP, GD, mhash, ODBC and PostScript:

apt-get install php5-cli php-pear php5-ldap php5-imap php5-gd\
    php5-mhash php5-odbc php5-ps

The configuration file for PHP is located in /etc/php5/apache2/php.ini, every time you modify it, Apache must be restarted. So let's see if everything is working. First let's create a simple script, called information.php, in Apache's DocumentRoot, that is /var/www/information.php and inside it should go:

<? phpinfo(); ?>

Now, fireup a browser and open www.mycompany.com/information.php. You should see a page with information about the PHP version that is installed. Also it provides some details about Apache, and all the PHP modules. Last, but not least, let's make sure MySQL and PHP are working well together. First, log in to MySQL and create a new database:

mysql> create database test;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> exit
    Bye


'

Create a new file, db.php, in the same directory and write:

 <?
if(mysql_connect("localhost", "root", "rootpassword"))
echo("connection success");
?>

Check your browser and you should see: connection success. Now for a little optimization. Usually compiling PHP scripts on the fly uses a lot of memory, so if your hosting several big web sites and have lots of users visiting, you might want to do something about this resource abuse. The solution is to use a program that keeps the scripts precompiled. The most popular include Zend Accelerator, Turck MMCache and PHP Accelerator. Performance can increase up to 200%.

Finally LAMP is up, running and optimized. You can also provide further services, such as more databases (PosgreSQL, Oracle, Informix, etc) and more server side languages (Perl, JSP, Python, etc).

Installing and Configuring Postfix

Postfix was originally written as an alternative to Sendmail, which is used in most mail servers around the world. Unfortunately, Sendmail is hard to use (and manage) and very bug prone, therefore securing it can be quite a task. This is why Postfix is a fantastic option. Just like with the rest of the software, we download and install it, with support with MySQL:

apt-get install postfix postfix-mysql

Leave the values dpkg suggests when configuring. The default configuration files are in /etc/postfix, we will only use main.cf. Once done, we create the postfix user for MySQL and the database for the emails:

  mysql -A -u root -p  
  Enter password: 
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 4 to server version: 5.0.20a-Debian_2-log
  
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  
  mysql> use mysql;
  Database changed
  mysql> insert into user (host, user, password) values ('localhost', 'postfix', password('thepostfixpass'));  
  Query OK, 1 row affected, 3 warnings (0.00 sec)  
  
  mysql> insert into db (host, db, user, select_priv) values ('localhost', 'mail', 'postfix', 'Y');
  Query OK, 1 row affected (0.00 sec)
  
  mysql> create database mail;
  Query OK, 1 row affected (0.01 sec)

Afterward, MySQL must be restarted to use the new user and database. If everything worked correctly, then there shouldn't be any problem logging in as postfix using the mail database. So now we create our tables, as root:

  mysql -u root -p
  Enter password: 
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 3 to server version: 5.0.20a-Debian_2-log
  
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  
  mysql> use mail;
  Database changed
  mysql> create table transport (
    -> domain varchar(255) primary key,
    -> transport char(8),
    -> access varchar(2)
    -> default 'OK');
  Query OK, 0 rows affected (0.01 sec)

  mysql> create table aliases (
    -> id int(6),
    -> alias varchar(255) primary key,
    -> maildir varchar(255) not null,
    -> access varchar(2) 
    -> default 'OK');
  Query OK, 0 rows affected (0.00 sec)

  mysql> create table remote_alias ( 
    -> alias varchar(255) primary key,
    -> rcpt varchar(255) not null);
  Query OK, 0 rows affected (0.01 sec)

  mysql> create table domain1 (
    -> user varchar(255) primary key,
    -> pass varchar(255) not null,
    -> maildir varchar(255) not null,
    -> active int(8)        
    -> default 1);
  Query OK, 0 rows affected (0.00 sec)

The next step is configuring Postfix to support MySQL, so edit the configuration file and add:

  transport_maps=mysql:/etc/postfix/transport.cf
  virtual_mailbox_base=/home/postfix
  virtual_uid_maps=mysql:/etc/postfix/ids.cf
  virtual_gid_maps=mysql:/etc/postfix/ids.cf
  virtual_mailbox_maps=mysql:/etc/postfix/aliases.cf
  virtual_maps=mysql:/etc/postfix/remote_aliases.cf

Since we are specifying files that don't exist, we must create them. In transport.cf write:

  user=postfix
  password=thepostfixpass # the password used in MySQL
  dbname=mail
  table=transport
  select_field=transport
  where_field=domain
  hosts=localhost

  user=postfix
  password=thepostfixpass # the password used in MySQL
  dbname=mail
  table=aliases
  select_field=maildir
  where_field=alias
  hosts=localhost

In ids.cf:

  user=postfix
  password=thepostfixpass # the password used in MySQL
  dbname=mail
  table=aliases
  select_field=id
  where_field=alias
  hosts=localhost

And for the final file, remote_aliases.cf:

user=postfix
  password=thepostfixpass # the password used in MySQL
  dbname=mail
  table=remote_aliases
  select_field=rcpt
  where_field=alias
  hosts=localhost

Lets now create the information for the domain1 example in MySQL:

mysql -A -u root -p
  Enter password: 
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 8 to server version: 5.0.20a-Debian_2-log
  
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  
  mysql> use mail;
  Database changed
  mysql> insert into transport(domain, transport) values ('domain1.com', 'virtual:');
  Query OK, 1 row affected (0.00 sec)

To add users to that domain, simply insert into the aliases table the data (you can get postfix's userid from /etc/passwd, for example:

mysql>insert into aliases values 
  (postfix_uid,'user@domain1.com','domain1/user', 'OK');

Finally everything should be working smoothly. Make sure you constantly check the logs (/var/log/mail.log), even if everything is normal, because the first place you might detect an attack is there.


 
Discussion(s)
Tutorial isn't complete
Written by arfarf on 2006-05-25 17:21:43
You're missing something in the 'Configure Apache' section! This part just doesn't make sense. What's missing?

Quote:

Let's take this to practice, say we want to enable user directories:

(www.myurl.com/~someuser/). First uncomment the following in apache2.conf:

Next, we create the symbolic links for this module and restart the server:





Discuss! Reply!

Do I need a server?
Written by fingal on 2006-11-23 07:55:59
... maybe I should have asked, 'Do I want a server!' I'm not sure. I'm very curious about servers and running my own, but I'm not sure what I would do with it. Maybe I could host my own website, use it to log into remotely to save work on etc ... This section looks promising though.
Discuss! Reply!

Dysfunction erectile pills
Written by Erectile on 2007-07-07 20:49:14
LOS ANGELES, July 5 Pomegranate juice may help counter erectile dysfunction, according to findings by the University of Southern California.
Dr. Harin Padma-Nathan, of the Keck School of Medicine at the University of Southern California, conducted a randomized, placebo-controlled, double-blind, crossover pilot study to examine the efficacy of pomegranate juice versus placebo in improving erections in 61 male subjects.
Discuss! Reply!

Linux in computer shop
Written by adrian on 2007-11-18 21:16:54
IS IT POSSIBLE TO SET A COMPUTER SHOP USING LINUX AS A CLIENT AND A SERVER?
Discuss! Reply!

A distribution Idea
Written by Trent Arms on 2006-05-27 02:05:42
Since you like Debian, I would definitely recommend to you the Gentoo ditribution for severs. Unlike apt, the Portage tree isn't terribly out of date and the ability to use hardened sources for extra security really makes it shine in this arena. If you don't like the idea of compiling from source, portage can get binary packages in most cases. I've been really impressed with Gentoo's security and wouldn't hesitate to recommend it to a veteran Linux user.
Discuss! Reply!

Holy Crap
Written by Badhat on 2006-12-03 21:20:52
Geez man before anyone recommends Gentoo you better think about it especially if you just adopted it. 1) Gentoo's portage tree is bleeding edge. 2) You must not have been around for the Apache/httpd.conf snafu. If you were around for #2 you would probably not even think twice about 'not' using Gentoo in an environment that needs to be able to update and not worry about breaking everything. As stated in this how-to Debian is ok and so is Slack. It just all depends on peoples preferences. I personally wouldn't change Linux OS's to be able to install some of this software. Also, I don't recommend using the 'Straight off the CD' installs for a server either. Commonly the straight off the CD method leaves you with the most insecure and outdated system any administrator would pass out over.
Discuss! Reply!

more clear debian linux server setup
Written by roger on 2006-05-27 03:55:53
i love this debian linu server setup guide this really having more easy steps

Debian Linux Server Setup
Discuss! Reply!

definitely not complete tutorial
Written by sri on 2006-05-27 05:17:29
this is not definitely not complete tutorial but mostly i like the link provided for debian linux server setup guide great like that one.
Discuss! Reply!

Gentoo solves what?
Written by Alan Tam on 2006-05-27 14:04:59
If you don't like Debian stable, which is terribly out of date, you can use either:
* Debian testing
* Ubuntu release
I don't see how Debian's and Ubuntu's security are not as good as (or better than) Gentoo's.
Discuss! Reply!

Apache section
Written by Marius on 2006-06-02 07:33:07
The apache section can be impoved a lot... ;-)
1. you are installing apache2-mpm-worker but later you will install PHP... this will not work... you need the prefork package installed for PHP.
2. userdir doesn't need to be enabled because it is enabled by default.
3. if this is targeted towards beginners (or so I hope), then why do you scare them with creating links for enabling modules? When Debian has such a simple way to do this:
a2enmod module_name
a2dismod module_name
(you can check my blog post about managing apache modules, the debian way:
Managing Apache2 modules the Debian way
Discuss! Reply!

Help
Written by Francis on 2006-06-08 10:27:03
Please help me to set up a wide area netork with a linux as my server
discussing about Vpn,
File sharing, and printing
and securities in place.
Counting on your cooperation
Thank you
Discuss! Reply!

mySQL?
Written by brokndodge on 2006-06-09 12:58:38
Doesn't mySQL have a license restriction saying that it can only be used by .orgs and home users on the free license? I use postgreSQL due to this restriction. Anyway it bothered me that the writer claimed:
Quote:

We will use only free/open source software in this article, thus,it is not necessary to buy commercial licenses.





then used mySQL.
Discuss! Reply!

Dual license
Written by linuxamp on 2007-11-12 07:11:31
Quote:

Doesn't mySQL have a license restriction saying that it can only be used by .orgs and home users on the free license?





From what I understand, the commercial license is only required if you to distribute MySQL with proprietary applications. This includes requiring end users to download and install it to use your proprietary applications.

If you're not distributing MySQL or you're distributing MySQL along with your open source applications then you're all good.

However, if in doubt either get the commercial license or contact MySQL AB.
Discuss! Reply!

Re: mySQL?
Written by Davidlohr Bueso on 2006-06-10 18:18:10
This is true, however, MySQL is still distrubuted under the GPL license. This means that it is free software. For more information: http://www.mysql.com/company/legal/licensing/
Discuss! Reply!

Tutorial helpful or not
Written by Matias @ NZ on 2006-06-10 18:46:16
Why tutorials exists? The goal of tutorial is to give some tips, guidelines, step-by-step directions in order to reach your goals, which in this case is implementing a email server with apache and mysql support.

This particular Document, I found it so clear and easy to follow without any deep specific technical knowledge. Also, it explains benefit of packages chosen and Linux Debian distribution, however I see some people wrote how to improve it: All technical proyects and final products could be improve them.

The question is: Did tutorial and guideliness help to that implementation? And the end of the process software was working?

In conclusion I really like this tutorial.

Regards,

Matias Monteverde

ProgressDB DBA
Linux system Consultant
counter.li.org: #410688
------------------------
Discuss! Reply!

Retired
Written by Dave Dartnall on 2007-02-27 02:11:07
Ubuntu edgy:
The most helpful tutorial yet - apache installed and displays the default page. Mysql installed with 'root' and mysql user passwords is accessible. Suggested php script information.php and phpmyadmin (which was the reason for installing apache) in /var/www/, however, don't display. Edgy calls up gedit.. frustrating!
What have I done wrong?
Discuss! Reply!

Good tourorial
Written by Jason on 2008-01-03 20:35:49
I vote yes. I've seen a lot of other tutorials out their that don't help at all. The first thing I suggest to a neub is to not use a cd install. You will be stuck somewhere in the process and realize that you don't get what it is asking you. Starting with a desktop then a server gives you a chance to research what you don't know before you screw up you server.
Discuss! Reply!

Setting Up Server
Written by Tim on 2006-07-06 13:31:47
I think that for every article written on this subject, there is another that compliments it. I can take some information from this article and use information from other articles and get a better understanding of how this whole thing comes together. Nice article.
Discuss! Reply!

Linux As Remote Boot Server
Written by david on 2008-04-09 03:51:43
installing lINUX As Remote Boot Server.
Discuss! Reply!

postfix
Written by coolal2 on 2006-12-31 11:01:57
Hi there,

I'm currently runnig postfix on an old powermac g4 using postfixenabler, and it's very easy to add domains and users. I'm thinking about moving to ubuntu on the i386 platform and after doing some research I found that all the posted examples of postfix setup only deal with one domain. None of these linux experts ever bother to think that maybe this reader may want to add domains. I may be wrong but can aybody point me to a tutorial that actually shows how to add domains to postfix (Ubuntu).

Thanks in advance for the help.
Discuss! Reply!

postfix mail server
Written by Mohammed Waheed Shareef on 2007-08-01 06:16:46
i have some porb with my postfix mail server if any body can help me for thisssss please

anyuser if send a new mail its going to outbox and after 5 min its going, after 5 mins aslo if not going out mail then i ahve to start some services

cdetcpostfix
postmap access
postamp virtualdomain
postmap realydomain
postfix start
potfix stop

if i run this command then mail will go fast for some time after one hour again same porb can you help me in this pls
Discuss! Reply!

setup the linux web server
Written by Aditya Kapoor on 2007-03-08 22:31:19
HI,
I want to set up Linux as web server ..
I m new to linux till now i got to knw tht I hv to install apache to configure as web server but dnt no hw to install and configure apache.
found smthng in setting up the server but wht is apt-get install apache2 but whr to type this up ???? I tried to type tht at konsole teminal but its says tht bash not found. I also went to apache.org and they direct me to mirrors but there are lots of files out there so whch one to pick up and install and how to install.
Discuss! Reply!

re: new to linux
Written by jargoman on 2007-05-26 04:18:48
Quote:

HI,
I want to set up Linux as web server ..
I m new to linux till now i got to knw tht I hv to install apache to configure as web server but dnt no hw to install and configure apache.
found smthng in setting up the server but wht is apt-get install apache2 but whr to type this up ???? I tried to type tht at konsole teminal but its says tht bash not found. I also went to apache.org and they direct me to mirrors but there are lots of files out there so whch one to pick up and install and how to install.





apt-get or sudo apt-get will only work on debian based systems with apt-get installed. The way to install anything on your system depends on what type of distrobution you have. The error you are getting probably doesn'y mean bash not found. Instead it means bash can't find that command.

Discuss! Reply!

Herr
Written by Xaleandr on 2007-06-28 17:11:03
Hello,
this is not a problem to set up Apache on local machine. The most complicated point is how to configure the (local) network, so that the machine would be visible from outside !
Discuss! Reply!

apache server
Written by himanshu on 2007-10-17 13:17:53
Quote:

HI,
I want to set up Linux as web server ..
I m new to linux till now i got to knw tht I hv to install apache to configure as web server but dnt no hw to install and configure apache.
found smthng in setting up the server but wht is apt-get install apache2 but whr to type this up ???? I tried to type tht at konsole teminal but its says tht bash not found. I also went to apache.org and they direct me to mirrors but there are lots of files out there so whch one to pick up and install and how to install.




hi!! no need to worry!! first u require a sound knowledge of linux commands...as u study them u will get wat u r really doin..n den u can do it..jus got to tuxfile.com..bye
Discuss! Reply!

Try XAMP
Written by Latheesan on 2007-10-18 22:03:08
Why don't you just install linux version of XAMPP - http://www.apachefriends.org/en/xampp.html ?
Discuss! Reply!

web developer student
Written by Maria Crosby on 2007-12-05 09:10:28
I am running Suse 10.2 Linux, and had all of LAMP successfully installed. How can I add SSL and serve web pages? Any thoughts how it would be any easier to use TomCat Apache instead?
Discuss! Reply!

web developer student
Written by maria_crosby on 2007-12-05 09:16:17
I was also trying to install Suse 10.2 on an old iMac G4 800 mhz, not sure though if it has a PPC, anyway, the install (type &quot;C&quot;) on boot command wouldn't work, I tried option C but still the same. Should I create partition in Utilities? i would like to wipe out the OSX 10.3 on it... any thoughts? Thanks, Maria
Discuss! Reply!

SERVER!
Written by peter parker on 2008-01-26 10:37:08
What would be the most economical server to buy in order run a social network with the above programs? (new to this)
Can I use the PS3 as a server since linux can be runned through it? Would it be wise?
-Thanks
Discuss! Reply!

samba
Written by anatak on 2008-02-01 01:42:54
Good tutorial,

I missed Samba.
I would have thought that setting up a file server would be more important for most networks than setting up a mailserver.

anyway, I will experiment with this tutorial as a guideline.

thank you for writing and publishing this tutorial and I hope that there will be others following.

firewall, VPN, Samba would be my main interests.

anatak
Discuss! Reply!

altering the default nice values
Written by Manish on 2008-02-28 17:48:25
Hi
If I want all processes by a certain user to be run with a configurable nice value, e.g. nice value +3, then how can I implement this.

thanks
Discuss! Reply!

what about opening ports¿¿
Written by Jaime on 2008-04-23 16:17:06
Quote:

Hi
If I want all processes by a certain user to be run with a configurable nice value, e.g. nice value +3, then how can I implement this.

thanks




You are missing the part about opening ports&iquest;&iquest;?? for mysql, apaches, and postfix...
Discuss! Reply!