Difference between revisions of "64-bit FAQ"

From ArchWiki
Jump to: navigation, search
m (Why 64bit?: add tag wikipedia for ASLR and PIC, for more external information)
(Can I upgrade/switch my system from i686 to x86_64 without reinstalling?)
(25 intermediate revisions by 15 users not shown)
Line 1: Line 1:
[[Category:Arch64 (English)]]
+
[[Category:Arch64]]
[[Category:FAQs (English)]]
+
[[cs:Arch64 FAQ]]
{{i18n|Arch64 FAQ}}
+
[[de:Arch64 FAQ]]
 
+
[[el:Arch64 FAQ]]
Below is a list of frequently asked questions about Arch Linux on 64bit.  When all else fails, use the "dual" version of the ISO of choice.
+
[[es:Arch64 FAQ]]
 +
[[it:Arch64 FAQ]]
 +
[[ru:Arch64 FAQ]]
 +
[[sr:Arch64 FAQ]]
 +
[[uk:Arch64 FAQ]]
 +
[[zh-CN:Arch64 FAQ]]
 +
Below is a list of frequently asked questions about Arch Linux on 64-bit.
  
 
== How do I determine if my processor is x86_64 compatible? ==
 
== How do I determine if my processor is x86_64 compatible? ==
 +
=== Linux users ===
 
Run the following command:
 
Run the following command:
 
  $ less /proc/cpuinfo
 
  $ less /proc/cpuinfo
Line 12: Line 19:
  
 
Or you can run this command:
 
Or you can run this command:
  $ grep "^flags.*\blm\b" /proc/cpuinfo
+
  $ grep -q "^flags.*\blm\b" /proc/cpuinfo && echo "x86_64" || echo "not x86_64"
 +
 
 +
=== Windows users ===
 +
Using the freeware [http://www.cpuid.com/cpuz.php CPU-Z] you can determine whether your CPU is 64-bit compatible.
 +
CPUs with AMD's instruction set "AMD64" or Intel's solution "EM64T" should be compatible with the x86_64 releases and binary packages.
  
 
== Should I use the 32 or 64 bit version of Arch? ==
 
== Should I use the 32 or 64 bit version of Arch? ==
If your processor is [[wikipedia:X86-64|x86_64]] compatible, you should use Arch64 unless you plan to use [[#What_will_I_miss_in_Arch64.3F|unsupported]] software. Note that Arch32 does not support more than 3GB of RAM without a custom {{ic|PAE-enabled}} kernel. It is recommended you use Arch64 if your system has more memory.
+
If your processor is [[wikipedia:X86-64|x86_64]] compatible, you should use Arch64.
  
==How can I install Arch64?==
+
== How can I install Arch64? ==
Just use our [http://www.archlinux.org/download/ official install ISO CD].
+
Just use our [https://www.archlinux.org/download/ official installation ISO CD].
  
==How complete is the port?==
+
== How complete is the port? ==
 
The port is ready for daily use in a desktop or server environment.
 
The port is ready for daily use in a desktop or server environment.
  
==Will I have all the packages from my 32-bit Arch I am used to?==
+
== Will I have all the packages from my 32-bit Arch I am used to? ==
The Repositories are ported and almost everything is up to date. At most, the x86_64 versions are only hours behind the i686 ones.
+
The repositories are ported and pretty much everything should work as expected.
  
Occasionally, a package in [[AUR]] will only have {{ic|'i686'}} listed, but often they work for 64-bit too, just try adding {{ic|'x86_64'}}.
+
Rarely, an old package in the [[Arch User Repository|AUR]] will only have {{ic|'i686'}} listed, but typically they work for 64-bit too. Just try adding {{ic|'x86_64'}}.
  
==Why 64bit?==
+
== Why 64-bit? ==
It is usually faster (Especially true for Video/Audio encoding, Scientific applications etc.) and as an added bonus also inherently a little more secure due to the nature of [[wikipedia:Address space layout randomization|Address space layout randomization (ASLR)]] and [[wikipedia:Position-independent code|Position-independent code (PIC)]].
+
It is faster under most circumstances and as an added bonus also inherently more secure due to the nature of [[wikipedia:Address space layout randomization|Address space layout randomization (ASLR)]] in combination with [[wikipedia:Position-independent code|Position-independent code (PIC)]] and the [[wikipedia:NX Bit|NX Bit]] which is not available in the stock i686 kernel due to disabled PAE. If your computer is running 4 GB or more of usable RAM, 64-bit should be strongly considered as any additional RAM cannot be allocated by a 32-bit OS.
Limiting oneself to 32bit and the disadvantages that come with it makes little sense these days unless done for a very good reason. Programmers also increasingly tend to care more about 64bit since almost all mainstream X86 CPUs that have been coming out are making use of the 64bit extension.
+
  
For further details watch our [[Arch64_ToDoS]]. There you will find a list comparing 32-/64bit package versions.
+
Programmers also increasingly tend to care less about 32-bit ("legacy") as "new" x86 CPUs typically support the 64-bit extensions.
  
==How can I file bugs?==
+
There are many more reasons we could list here to tell you to avoid 32-bit, but between the kernel, userspace and individual programs it is simply not viable to list every last thing that 64-bit does much better these days.
Simply use Arch's [http://bugs.archlinux.org/ flyspray] but select x86_64 in the Architecture field if you think it is a port-related problem!
+
  
==What repositories should I set up for pacman to use?==
+
For further details watch our [https://www.archlinux.org/packages/differences/ differences reports]. There you will find a list comparing 32-/64-bit package versions.
 +
 
 +
== How can I file bugs? ==
 +
Simply use Arch's [https://bugs.archlinux.org/ Flyspray] but select x86_64 in the Architecture field if you think it is a port-related problem!
 +
 
 +
== What repositories should I set up for pacman to use? ==
 
All repositories are supported for the port.
 
All repositories are supported for the port.
  
==How can I patch existing PKGBUILDs for use with Arch64?==
+
== How can I patch existing PKGBUILDs for use with Arch64? ==
 
Add the following variable to all ported packages:
 
Add the following variable to all ported packages:
 
  arch=('i686' 'x86_64')  
 
  arch=('i686' 'x86_64')  
Line 54: Line 68:
 
  fi
 
  fi
  
==What will I miss in Arch64?==
+
== What will I miss in Arch64? ==
 
Nothing, really. Almost all applications support 64-bit by now or are in the transition to become 64-bit compatible.
 
Nothing, really. Almost all applications support 64-bit by now or are in the transition to become 64-bit compatible.
  
The biggest problem are packages that are either '''closed source''' or contains x86-specific assembly that is cumbersome to port to 64-bit (typical for emulators).
+
The biggest problem are packages that are either '''closed source''' or contain x86-specific assembly that is cumbersome to port to 64-bit (typical for emulators).
  
These applications were previously problematic, but are now available in the [[AUR]] and work fine:
+
These applications were previously problematic but are now available in the [[Arch User Repository|AUR]] and work fine:
 
* Acrobat Reader is not available in 64-bit, but you can run the 32-bit version in compatibility mode. There are also many other open source alternatives that can be used to read PDF files.
 
* Acrobat Reader is not available in 64-bit, but you can run the 32-bit version in compatibility mode. There are also many other open source alternatives that can be used to read PDF files.
  
 
Everything else should work perfectly fine. If you miss any Arch32 package in our port and you know that it will compile on x86_64 (perhaps you have found it as native packages in another 64-bit distribution), just contact the developers or request a new package in the forums.
 
Everything else should work perfectly fine. If you miss any Arch32 package in our port and you know that it will compile on x86_64 (perhaps you have found it as native packages in another 64-bit distribution), just contact the developers or request a new package in the forums.
  
==Can I run 32-bit apps inside Arch64?==
+
== Can I run 32-bit apps inside Arch64? ==
 
Yes!  
 
Yes!  
  
* You can install {{ic|1=lib32-*}} libraries from the multilib repository. To use this repository, you should add the following lines to your {{ic|/etc/pacman.conf}}:
+
* You can install {{ic|1=lib32-*}} libraries from the [multilib] repository. To use this repository, you should add the following lines to your {{ic|/etc/pacman.conf}}:
 
   
 
   
 
  [multilib]
 
  [multilib]
 +
SigLevel = PackageRequired
 
  Include = /etc/pacman.d/mirrorlist
 
  Include = /etc/pacman.d/mirrorlist
  
At this time (December 2011), it contains wine and skype. Furthermore, a multilib compiler is available.
+
At this time (December 2011), [multilib] contains wine and Skype. Furthermore, a multilib compiler is available.
  
* Or you can create another chroot with 32bit system (refer to [[Arch64 Install bundled 32bit system]]):
+
* Or you can create another chroot with 32-bit system (refer to [[Arch64 Install bundled 32bit system]]):
  
Boot into Arch64, startx, open a term.
+
Boot into Arch64, startx, open a terminal.
 
  $ xhost +local:
 
  $ xhost +local:
 
  $ su
 
  $ su
Line 85: Line 100:
 
  $ /usr/bin/command-you want # or eg: /opt/mozilla/bin/firefox
 
  $ /usr/bin/command-you want # or eg: /opt/mozilla/bin/firefox
  
Some 32-bit apps (like OpenOffice) may require additional bindings. The following lines can be placed in rc.local to ensure you get all you need for the 32-bit apps (assuming {{ic|/mnt/arch32}} is mounted in fstab):
+
Some 32-bit apps (like OpenOffice) may require additional bindings. The following lines can be placed in {{ic|/etc/rc.local}} to ensure you get all you need for the 32-bit apps (assuming {{ic|/mnt/arch32}} is mounted in {{ic|/etc/fstab}}):
 
  mount --bind /dev /mnt/arch32/dev
 
  mount --bind /dev /mnt/arch32/dev
 
  mount --bind /dev/pts /mnt/arch32/dev/pts
 
  mount --bind /dev/pts /mnt/arch32/dev/pts
Line 95: Line 110:
 
  #comment the following line if you do not use the same home folder
 
  #comment the following line if you do not use the same home folder
 
  mount --bind /home /mnt/arch32/home
 
  mount --bind /home /mnt/arch32/home
You can then type in a term:
+
You can then type in a terminal:
 
  $ xhost +localhost
 
  $ xhost +localhost
 
  $ sudo chroot /mnt/arch32 su your32bitusername /opt/openoffice/program/soffice
 
  $ sudo chroot /mnt/arch32 su your32bitusername /opt/openoffice/program/soffice
  
==Can I build 32-bit packages for i686 inside Arch64?==
+
== Can I build 32-bit packages for i686 inside Arch64? ==
 
Yes. You can either use  
 
Yes. You can either use  
*the multilib versions of the relevant packages from the multilib repository or
+
*the multilib versions of the relevant packages from the [multilib] repository or
*a i686 chroot.
+
*an i686 chroot.
  
=== Multilib Repository - [[Multilib_Project]] ===
+
=== [[Multilib]] Repository ===
To use the multilib repository, edit your {{ic|/etc/pacman.conf}} and add the following to it:
+
To use the [multilib] repository, edit your {{ic|/etc/pacman.conf}} and uncomment following lines:
  
 
  [multilib]
 
  [multilib]
 +
SigLevel = PackageRequired
 
  Include = /etc/pacman.d/mirrorlist
 
  Include = /etc/pacman.d/mirrorlist
  
update your database:
+
upgrade your system with {{ic|pacman -Syu}} and install the {{pkg|gcc-multilib}} package.
  
# pacman -Sy
+
{{Note|If the system has the {{ic|base-devel}} package group installed, users must replace the [extra] versions with the [mutlilib] versions as shown below.}}
  
and install {{pkg|gcc-multilib}} and its dependencies
+
{{Note|1= {{pkg|gcc-multilib}} is capable of building 32-bit and 64-bit code. You can safely install {{ic|multilib-devel}} to replace the packages shown below, but you still need {{ic|base-devel}} for the other packages it includes. See https://bbs.archlinux.org/viewtopic.php?id=102828 for more information.}}
 
+
pacman -S gcc-multilib gcc-libs-multilib binutils-multilib libtool-multilib lib32-glibc
+
 
+
{{Note|If the system has the {{ic|base-devel}} package installed, users must replace the [extra] versions with the [mutlilib] versions as shown below.}}
+
 
+
{{Note|1= {{pkg|gcc-multilib}} is capable of building 32bit and 64bit code. You can safely install {{ic|multilib-devel}} and remove {{ic|base-devel}} on x86_64. See https://bbs.archlinux.org/viewtopic.php?id=102828 for more information.}}
+
  
 
{{bc|<nowiki>
 
{{bc|<nowiki>
# pacman -S gcc-multilib gcc-libs-multilib binutils-multilib libtool-multilib lib32-glibc
+
# pacman -S gcc-multilib
 
resolving dependencies...
 
resolving dependencies...
 
warning: dependency cycle detected:
 
warning: dependency cycle detected:
Line 146: Line 156:
 
</nowiki>}}
 
</nowiki>}}
  
Compile packages on x86_64 for i686 is as easy as adding the following lines to {{ic|~/.makepkg.conf}}
+
Compiling packages on x86_64 for i686 is as easy as adding the following lines to an alternate configuration file (e.g. {{ic|~/.makepkg.i686.conf}})
 
  CARCH="i686"
 
  CARCH="i686"
 
  CHOST="i686-pc-linux-gnu"
 
  CHOST="i686-pc-linux-gnu"
  CFLAGS="-march=i686 -O2 -pipe -m32"
+
  CFLAGS="-m32 -march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
 
  CXXFLAGS="${CFLAGS}"
 
  CXXFLAGS="${CFLAGS}"
  
 
and invoking makepkg via the following
 
and invoking makepkg via the following
  $ linux32 makepkg -src
+
  $ linux32 makepkg -src --config ~/.makepkg.i686.conf
 
+
Remember to remove or modify {{ic|~/.makepkg.conf}} when finished compiling i686 packages!
+
  
 
=== Chroot ===
 
=== Chroot ===
To use a i686 chroot (installation with i686 iso "quickinstall" is recommended for the quick way to install it inside Arch64 or see [[Arch64 Install bundled 32bit system]]), install "linux32" wrapper pkg from current to make the chroot behave like a real i686 system. Then use this script to login into the chroot environment as root:
+
{{out of date|This sections mentions the "linux32" package which does not exist.}}
 +
To use an i686 chroot (installation with i686 ISO "quickinstall" is recommended for the quick way to install it inside Arch64 or see [[Arch64 Install bundled 32bit system]]), install "linux32" wrapper pkg from current to make the chroot behave like a real i686 system. Then use this script to login into the chroot environment as root:
  
 
  #!/bin/bash
 
  #!/bin/bash
Line 168: Line 177:
 
  linux32 chroot /path-to-your-chroot
 
  linux32 chroot /path-to-your-chroot
  
If you keep the sources on the x86_64 host system you can add
+
If you keep the sources on the x86_64 host system, you can add
 
  "mount --bind /path-to-your-stored-sources /path-to-your-chroot/path-to-your-stored-sources"  
 
  "mount --bind /path-to-your-stored-sources /path-to-your-chroot/path-to-your-stored-sources"  
 
to share sources from host to chroot system for pkg building used in {{ic|/etc/makepkg.conf}}.
 
to share sources from host to chroot system for pkg building used in {{ic|/etc/makepkg.conf}}.
  
==Can I upgrade/switch my system from i686 to x86_64 without reinstalling?==
+
== Can I upgrade/switch my system from i686 to x86_64 without reinstalling? ==
Yes. A forum thread has been created [http://bbs.archlinux.org/viewtopic.php?id=64485 here] which outlines steps taken to successfully migrate an install from 32 to 64 bit without losing any configs/settings/data.  Note: A large external drive was used for the transfer.
+
No. However a forum thread has been created [https://bbs.archlinux.org/viewtopic.php?id=64485 here] which outlines steps taken to successfully migrate an install from 32 to 64 bit without losing any configs/settings/data.  Note: A large external hard drive was used for the transfer.
  
However, you can also start the system with the Arch64 install CD, mount the disk, backup anything you may want to keep that is not a 32-bit binary (e.g: {{ic|/home}} & {{ic|/etc}}), and install.
+
However, you can also start the system with the Arch64 installation CD, mount the disk, backup anything you may want to keep that is not a 32-bit binary (e.g: {{ic|/home}} & {{ic|/etc}}), and install.
  
 
You may also want to read [[Migrating Between Architectures Without Reinstalling]].
 
You may also want to read [[Migrating Between Architectures Without Reinstalling]].

Revision as of 03:44, 16 January 2013

Below is a list of frequently asked questions about Arch Linux on 64-bit.

How do I determine if my processor is x86_64 compatible?

Linux users

Run the following command:

$ less /proc/cpuinfo

Look for the flags entry. If you see the lm flag then your processor is x86_64 compatible.

Or you can run this command:

$ grep -q "^flags.*\blm\b" /proc/cpuinfo && echo "x86_64" || echo "not x86_64"

Windows users

Using the freeware CPU-Z you can determine whether your CPU is 64-bit compatible. CPUs with AMD's instruction set "AMD64" or Intel's solution "EM64T" should be compatible with the x86_64 releases and binary packages.

Should I use the 32 or 64 bit version of Arch?

If your processor is x86_64 compatible, you should use Arch64.

How can I install Arch64?

Just use our official installation ISO CD.

How complete is the port?

The port is ready for daily use in a desktop or server environment.

Will I have all the packages from my 32-bit Arch I am used to?

The repositories are ported and pretty much everything should work as expected.

Rarely, an old package in the AUR will only have 'i686' listed, but typically they work for 64-bit too. Just try adding 'x86_64'.

Why 64-bit?

It is faster under most circumstances and as an added bonus also inherently more secure due to the nature of Address space layout randomization (ASLR) in combination with Position-independent code (PIC) and the NX Bit which is not available in the stock i686 kernel due to disabled PAE. If your computer is running 4 GB or more of usable RAM, 64-bit should be strongly considered as any additional RAM cannot be allocated by a 32-bit OS.

Programmers also increasingly tend to care less about 32-bit ("legacy") as "new" x86 CPUs typically support the 64-bit extensions.

There are many more reasons we could list here to tell you to avoid 32-bit, but between the kernel, userspace and individual programs it is simply not viable to list every last thing that 64-bit does much better these days.

For further details watch our differences reports. There you will find a list comparing 32-/64-bit package versions.

How can I file bugs?

Simply use Arch's Flyspray but select x86_64 in the Architecture field if you think it is a port-related problem!

What repositories should I set up for pacman to use?

All repositories are supported for the port.

How can I patch existing PKGBUILDs for use with Arch64?

Add the following variable to all ported packages:

arch=('i686' 'x86_64') 

Add small patches directly to the sources and md5sums area but use for complete different sources:

[ "$CARCH" = "x86_64" ] && source=(${source[@]} 'other source')
[ "$CARCH" = "x86_64" ] && md5sums=(${md5sums[@]} 'other md5sum')

For any small fix use this in the build area:

[ "$CARCH" = "x86_64" ] && (patch -Np0 -i ../foo_x86_64.patch)

Or when you need more changes:

if [ "$CARCH" = "x86_64" ]; then
    configure/patch/sed      # for x86_64
  else configure/patch/sed   # for i686
fi

What will I miss in Arch64?

Nothing, really. Almost all applications support 64-bit by now or are in the transition to become 64-bit compatible.

The biggest problem are packages that are either closed source or contain x86-specific assembly that is cumbersome to port to 64-bit (typical for emulators).

These applications were previously problematic but are now available in the AUR and work fine:

  • Acrobat Reader is not available in 64-bit, but you can run the 32-bit version in compatibility mode. There are also many other open source alternatives that can be used to read PDF files.

Everything else should work perfectly fine. If you miss any Arch32 package in our port and you know that it will compile on x86_64 (perhaps you have found it as native packages in another 64-bit distribution), just contact the developers or request a new package in the forums.

Can I run 32-bit apps inside Arch64?

Yes!

  • You can install lib32-* libraries from the [multilib] repository. To use this repository, you should add the following lines to your /etc/pacman.conf:
[multilib]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

At this time (December 2011), [multilib] contains wine and Skype. Furthermore, a multilib compiler is available.

Boot into Arch64, startx, open a terminal.

$ xhost +local:
$ su
# mount /dev/sda1 /mnt/arch32
# mount --bind /proc /mnt/arch32/proc
# chroot /mnt/arch32
# su your32bitusername
$ /usr/bin/command-you want # or eg: /opt/mozilla/bin/firefox

Some 32-bit apps (like OpenOffice) may require additional bindings. The following lines can be placed in /etc/rc.local to ensure you get all you need for the 32-bit apps (assuming /mnt/arch32 is mounted in /etc/fstab):

mount --bind /dev /mnt/arch32/dev
mount --bind /dev/pts /mnt/arch32/dev/pts
mount --bind /dev/shm /mnt/arch32/dev/shm
mount --bind /proc /mnt/arch32/proc
mount --bind /proc/bus/usb /mnt/arch32/proc/bus/usb
mount --bind /sys /mnt/arch32/sys
mount --bind /tmp /mnt/arch32/tmp
#comment the following line if you do not use the same home folder
mount --bind /home /mnt/arch32/home

You can then type in a terminal:

$ xhost +localhost
$ sudo chroot /mnt/arch32 su your32bitusername /opt/openoffice/program/soffice

Can I build 32-bit packages for i686 inside Arch64?

Yes. You can either use

  • the multilib versions of the relevant packages from the [multilib] repository or
  • an i686 chroot.

Multilib Repository

To use the [multilib] repository, edit your /etc/pacman.conf and uncomment following lines:

[multilib]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

upgrade your system with pacman -Syu and install the gcc-multilib package.

Note: If the system has the base-devel package group installed, users must replace the [extra] versions with the [mutlilib] versions as shown below.
Note: gcc-multilib is capable of building 32-bit and 64-bit code. You can safely install multilib-devel to replace the packages shown below, but you still need base-devel for the other packages it includes. See https://bbs.archlinux.org/viewtopic.php?id=102828 for more information.
# pacman -S gcc-multilib
resolving dependencies...
warning: dependency cycle detected:
warning: lib32-gcc-libs will be installed before its gcc-libs-multilib dependency
looking for inter-conflicts...
:: gcc-libs-multilib and gcc-libs are in conflict. Remove gcc-libs? [y/N] y
:: binutils-multilib and binutils are in conflict. Remove binutils? [y/N] y
:: gcc-multilib and gcc are in conflict. Remove gcc? [y/N] y
:: libtool-multilib and libtool are in conflict. Remove libtool? [y/N] y

Remove (4): gcc-libs-4.6.1-1  binutils-2.21.1-1  gcc-4.6.1-1  libtool-2.4-4

Total Removed Size:   87.65 MB

Targets (7): lib32-glibc-2.14-4  lib32-gcc-libs-4.6.1-1  gcc-libs-multilib-4.6.1-1  binutils-multilib-2.21.1-1
             gcc-multilib-4.6.1-1  lib32-libtool-2.4-2  libtool-multilib-2.4-2

Total Download Size:    25.04 MB
Total Installed Size:   108.27 MB

Proceed with installation? [Y/n]

Compiling packages on x86_64 for i686 is as easy as adding the following lines to an alternate configuration file (e.g. ~/.makepkg.i686.conf)

CARCH="i686"
CHOST="i686-pc-linux-gnu"
CFLAGS="-m32 -march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
CXXFLAGS="${CFLAGS}"

and invoking makepkg via the following

$ linux32 makepkg -src --config ~/.makepkg.i686.conf

Chroot

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: This sections mentions the "linux32" package which does not exist. (Discuss in Talk:64-bit FAQ#)

To use an i686 chroot (installation with i686 ISO "quickinstall" is recommended for the quick way to install it inside Arch64 or see Arch64 Install bundled 32bit system), install "linux32" wrapper pkg from current to make the chroot behave like a real i686 system. Then use this script to login into the chroot environment as root:

#!/bin/bash
mount --bind /dev /path-to-your-chroot/dev
mount --bind /dev/pts /path-to-your-chroot/dev/pts
mount --bind /dev/shm /path-to-your-chroot/dev/shm
mount -t proc none /path-to-your-chroot/proc
mount -t sysfs none /path-to-your-chroot/sys
linux32 chroot /path-to-your-chroot

If you keep the sources on the x86_64 host system, you can add

"mount --bind /path-to-your-stored-sources /path-to-your-chroot/path-to-your-stored-sources" 

to share sources from host to chroot system for pkg building used in /etc/makepkg.conf.

Can I upgrade/switch my system from i686 to x86_64 without reinstalling?

No. However a forum thread has been created here which outlines steps taken to successfully migrate an install from 32 to 64 bit without losing any configs/settings/data. Note: A large external hard drive was used for the transfer.

However, you can also start the system with the Arch64 installation CD, mount the disk, backup anything you may want to keep that is not a 32-bit binary (e.g: /home & /etc), and install.

You may also want to read Migrating Between Architectures Without Reinstalling.