about summary refs log blame commit diff
path: root/doc/manual/troubleshooting.xml
blob: e1e6c08c8649445c1f0a28a48bb1c4b55030c326 (plain) (tree)
1
2
3
4
5
6
7
8
9




                                                     
 
                                                                      
 
 
                                                                          





                                                                       




                                               



                                                                     




                      

       
          

 









                                                                                      


                                                                        































                                                                                                     
                                                                
























                                                                                            
                                                                  








                                                                                              
          
 
 
                                                              


































                                                                                                                       
          


  
           
<appendix xmlns="http://docbook.org/ns/docbook"
          xmlns:xlink="http://www.w3.org/1999/xlink">

<title>Troubleshooting</title>


<para>This section provides solutions for some common problems.</para>


<section><title>Berkeley DB: <quote>Cannot allocate memory</quote></title>

<para>Symptom: Nix operations (in particular the
<command>nix-store</command> operations <option>--gc</option>,
<option>--verify</option>, and <option>--clear-substitutes</option> —
the latter being called by <command>nix-channel --update</command>)
failing:

<screen>
$ nix-store --verify
error: Db::del: Cannot allocate memory</screen>

</para>

<para>Possible solution: make sure that no Nix processes are running,
then do:

<screen>
$ cd /nix/var/nix/db
$ rm __db.00*</screen>

</para>

</section>


<section><title>Berkeley DB gives weird error messages</title>

<para>Symptom: you get error messages such as

<screen>
Berkeley DB message: Finding last valid log LSN: file: 1 offset 28
Berkeley DB error: file validpaths (meta pgno = 0) has LSN [483][34721].
Berkeley DB error: end of log is [1][28]
Berkeley DB error: /nix/var/nix/db/validpaths: unexpected file type or format</screen>

or other weird Berkeley DB errors, and they don’t go away (i.e.,
automatic recovery doesn’t work).  This may be the case after a system
crash.</para>

<para>Solution: first try to run <command>db_recover</command> and
then <link linkend='refsec-nix-store-verify'><command>nix-store
--verify</command></link>:

<screen>
$ db_recover -h /nix/var/nix/db
$ nix-store --verify</screen>

(Make sure that you have the right version of
<command>db_recover</command>, namely, Berkeley DB 4.4 for Nix 0.10,
and 4.5 for Nix 0.11.)</para>

<para>If that doesn’t work, it’s time to bring out the big guns:

<screen>
$ cd /nix/var/nix
$ cp -pr db db-backup  <lineannotation>(making a backup just in case)</lineannotation>
$ cd db
$ rm __db.* log*  <lineannotation>(removing the Berkeley DB environment)</lineannotation>
$ mkdir tmp
$ for i in *; do db_dump $i | (cd tmp &amp;&amp; db_load $i); done 
<lineannotation>(ignore error messages about non-database files like “reserved”)</lineannotation>
$ mv tmp/* .
$ nix-store --verify</screen>

</para>

</section>



<section><title>Collisions in <command>nix-env</command></title>

<para>Symptom: when installing or upgrading, you get an error message such as

<screen>
$ nix-env -i docbook-xml
...
adding /nix/store/s5hyxgm62gk2...-docbook-xml-4.2
collission between `/nix/store/s5hyxgm62gk2...-docbook-xml-4.2/xml/dtd/docbook/calstblx.dtd'
  and `/nix/store/06h377hr4b33...-docbook-xml-4.3/xml/dtd/docbook/calstblx.dtd'
  at /nix/store/...-builder.pl line 62.</screen>

</para>

<para>The cause is that two installed packages in the user environment
have overlapping filenames (e.g.,
<filename>xml/dtd/docbook/calstblx.dtd</filename>.  This usually
happens when you accidentally try to install two versions of the same
package.  For instance, in the example above, the Nix Packages
collection contains two versions of <literal>docbook-xml</literal>, so
<command>nix-env -i</command> will try to install both.  The default
user environment builder has no way to way to resolve such conflicts,
so it just gives up.</para>

<para>Solution: remove one of the offending packages from the user
environment (if already installed) using <command>nix-env
-e</command>, or specify exactly which version should be installed
(e.g., <literal>nix-env -i docbook-xml-4.2</literal>).</para>

<para>Alternatively, you can modify the user environment builder
script (in
<filename><replaceable>prefix</replaceable>/share/nix/corepkgs/buildenv/builder.pl</filename>)
to implement some conflict resolution policy.  E.g., the script could
be modified to rename conflicting file names, or to pick one over the
other.</para>

</section>


<section><title><quote>Too many links</quote> error in the Nix
store</title>


<para>Symptom: when building something, you get an error message such as

<screen>
...
<literal>mkdir: cannot create directory `/nix/store/<replaceable>name</replaceable>': Too many links</literal></screen>

</para>

<para>This is usually because you have more than 32,000 subdirectories
in <filename>/nix/store</filename>, as can be seen using <command>ls
-l</command>:

<screen>
$ ls -l /nix/store
drwxrwxrwt 32000 nix nix 4620288 Sep 8 15:08 store</screen>

The <literal>ext2</literal> file system is limited to a inode link
count of 32,000 (each subdirectory increasing the count by one).
Furthermore, the <literal>st_nlink</literal> field of the
<function>stat</function> system call is a 16-bit value.</para>

<para>This only happens on very large Nix installations (such as build
machines).</para>

<para>Quick solution: run the garbage collector.</para>

<para>Real solution: put the Nix store on a file system that supports
more than 32,000 subdirectories per directory, such as ReiserFS.
(This doesn’t solve the <literal>st_nlink</literal> limit, but
ReiserFS lies to the kernel by reporting a link count of 1 if it
exceeds the limit.)</para>

</section>
  


</appendix>