Tag Archives: debian

Useful aptitude commands

A simple list of installed packages

max@wonko:~$ aptitude search '~i' -F '%p'

Search for installed packages from the testing repo

max@wonko:~$ aptitude versions '~i ~Atesting' --group-by=none

Finding why a package is installed

I found fonts-font-awesome in my headless server, but there’s a reason

max@wonko:~$ aptitude why fonts-font-awesome
i   owncloud Depends fonts-font-awesome

Select packages that were removed but not purged

max@wonko:~$ aptitude search '~c'

Search in the package description

max@wonko:~$ aptitude search '~d"web browser"'

Upgradable packages

max@wonko:~$ aptitude search '~U'

How to display PHP errors only in public_html directories

How to display PHP errors

I always use servers where PHP errors are not shown by default and I always forget how to enable error messages in development environments.

My situation

On a server I usually prefer Debian OS, but when I develop on the go I use laptops with Ubuntu.
In this case I’m running Ubuntu 14.04 LTS with Apache2 (v2.4.7) and libapache2-mod-php5 (v5.5.9).

I want PHP errorors displayed for projects in my public_html folder.

Solution 1 (only Apache conf files)

Create the file /etc/apache2/sites-enabled/800-public-html.conf with this content:

<Directory /home/*/public_html>
  AllowOverride Options
  php_admin_flag display_errors On
</Directory>

Solution 2 (using .htaccess)

Create the file /etc/apache2/sites-enabled/800-public-html.conf with this content:

<Directory /home/*/public_html>
  AllowOverride Options
</Directory>

Create the file /home/max/public_html/project1/.htaccess with this content:

php_admin_flag display_errors On

Conclusions

It’s easy and easily forgettable. Don’t forget to add

error_reporting(E_ALL | E_NOTICE);

in your .php files.

Restore an etc configuration file from the original maintainer version on Debian

There are events that can not be stopped, for example when you delete a file by mistake under /etc.

Debian provides an elegant way to restore files of the maintainer’s version without touching your existing configuration.

Practical scenario

Let’s say I’ve removed the file /etc/apache2/sites-available/000-default.conf, here’s the procedure to recover it:

  • find the deb package containing the file
    # dpkg -S /etc/apache2/sites-available/000-default.conf
    
  • reinstall the package with a specific option
    # apt-get install --reinstall -o Dpkg::Options::="--force-confmiss" apache2
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 5 not upgraded.
    Need to get 86,7 kB of archives.
    After this operation, 0 B of additional disk space will be used.
    Get:1 http://archive.ubuntu.com/ubuntu/ saucy-updates/main apache2 amd64 2.4.6-2ubuntu2.1 [86,7 kB]
    Fetched 86,7 kB in 0s (264 kB/s)
    (Reading database ... 245864 files and directories currently installed.)
    Preparing to replace apache2 2.4.6-2ubuntu2.1 (using .../apache2_2.4.6-2ubuntu2.1_amd64.deb) ...
    Unpacking replacement apache2 ...
    Processing triggers for man-db ...
    Processing triggers for ufw ...
    Processing triggers for ureadahead ...
    ureadahead will be reprofiled on next reboot
    Setting up apache2 (2.4.6-2ubuntu2.1) ...
    
    Configuration file `/etc/apache2/sites-available/000-default.conf', does not exist on system.
    Installing new config file as you requested.
     * Restarting web server apache2
       ...done.
    

That’s all.

Practical scenario #2

There’s another interesting case when this procedure comes handy: if you changed a default etc file and you want to restore it. In that case you can simply delete it and use the same apt-get command:

# apt-get install --reinstall -o Dpkg::Options::="--force-confmiss" <package name>

References

Cache deb packages with apt-cacher-ng

I’m playing with Docker and I’m constantly tuning my Dockerfile to install the needed packages.

This continuous refinement forces the build process to download the same deb packages every time and it becomes an actual waste of time and bandwidth.

Solution

apt-cacher-ng is a service which can be run on a Debian or Ubuntu host and will serve as a local cache for deb packages from Debian or Ubuntu repositories.

That’s what I need because I’m on an Ubuntu machine emulating a Debian container.

Host setup

The setup is really easy:

# aptitude install apt-cacher-ng

After the installation I changed the bind address of the service to keep it local (I don’t need LAN exposure), I added my local proxy to reach the internet and I disabled ReuseConnections (see Problems):

root@yoda:/etc/apt-cacher-ng# diff acng.conf acng.conf.old 
28d27
< BindAddress: localhost 172.17.42.1
35d33
< proxy: http://127.0.0.1:5865
322d319
< ReuseConnections: 0

Client setup

On the client side it’s necessary to force apt requests to use the proxy.
In the Dockerfile I added

RUN echo 'Acquire::http::Proxy "http://172.17.42.1:3142";' > /etc/apt/apt.conf.d/90-apt-cacher.conf

which creates the configuration file read by apt-get or aptitude when downloading packages.

Problems

The apt-cacher-ng server seems buggy at least when used in conjunction with a regular proxy. Sometimes I get errors like these on the client side

Err http://http.debian.net/debian/ wheezy/main netbase all 5.0
500  Invalid header

one possible solution is to perform a

# apt-get update

on the host machine (it seems to help). Another useful setting is

ReuseConnections: 0

as explained before.

Postfix with gmail as relay on Debian Squeeze

My Situation

A server running Debian Squeeze.
A valid Gmail account.

Procedure

Make sure you have the right packages installed
# aptitude install postfix libsasl2 ca-certificates libsasl2-modules

Make a backup of your original files
# tar cfz /var/backups/etc-postfix_20121105.tgz /etc/postfix/

Modify /etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes

Create /etc/postfix/sasl/passwd with your “user” and “password” values
[smtp.gmail.com]:587 theuser@gmail.com:thesecretpassword

Secure your new file and make it usable for Postfix
# chmod 400 /etc/postfix/sasl/passwd
# postmap /etc/postfix/sasl/passwd
# ls -l /etc/postfix/sasl/
total 12
-r-------- 1 root root 57 Nov 5 00:39 passwd
-rw------- 1 root root 12288 Nov 5 00:40 passwd.db

Make sure you have the right certification authorities available to Postfix
# cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem >> /etc/postfix/cacert.pem
# cat /etc/ssl/certs/Equifax_Secure_Global_eBusiness_CA.pem >> /etc/postfix/cacert.pem

Restart Postfix
/etc/init.d/postfix restart

done