From c40dae3ce994dcfd980e8c38721afa68ef339bab Mon Sep 17 00:00:00 2001 From: philemon Date: Mon, 31 Mar 2014 23:55:44 +0400 Subject: [PATCH] Bugfixes, documentation update --- README.md | 4 +- __init__.py | 0 doc/MMGenBuildBitcoindMSWin.md | 134 +++++++++++++++++++++++++++ doc/MMGenEditPathMSWin.md | 16 ++++ doc/MMGenGetMSYS_Archives.md | 47 ++++++++++ doc/MMGenGetMinGW_Archives.md | 67 ++++++++++++++ doc/MMGenInstallDependenciesMSWin.md | 61 ++++++++++++ doc/MMGenInstallLinux.md | 74 +++++++++++++++ doc/MMGenInstallMSWin.md | 54 +++++++++++ doc/MMGenInstallMinGW_MSYS.md | 85 +++++++++++++++++ doc/MMGenLinuxInstall.md | 78 ---------------- doc/MMGenWindowsInstall.md | 22 ----- setup.py | 6 +- tests/__init__.py | 0 14 files changed, 544 insertions(+), 104 deletions(-) create mode 100644 __init__.py create mode 100644 doc/MMGenBuildBitcoindMSWin.md create mode 100644 doc/MMGenEditPathMSWin.md create mode 100644 doc/MMGenGetMSYS_Archives.md create mode 100644 doc/MMGenGetMinGW_Archives.md create mode 100644 doc/MMGenInstallDependenciesMSWin.md create mode 100644 doc/MMGenInstallLinux.md create mode 100644 doc/MMGenInstallMSWin.md create mode 100644 doc/MMGenInstallMinGW_MSYS.md delete mode 100644 doc/MMGenLinuxInstall.md delete mode 100644 doc/MMGenWindowsInstall.md create mode 100644 tests/__init__.py diff --git a/README.md b/README.md index 72086597..d17237cf 100644 --- a/README.md +++ b/README.md @@ -61,9 +61,9 @@ mnemonic. ### Download/Install -> #### [Install on Microsoft Windows](doc/MMGenWindowsInstall.md) +> #### [Install on Microsoft Windows](doc/MMGenInstallMSWin.md) -> #### [Install on Debian/Ubuntu Linux](doc/MMGenLinuxInstall.md) +> #### [Install on Debian/Ubuntu Linux](doc/MMGenInstallLinux.md) ### Using MMGen diff --git a/__init__.py b/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/doc/MMGenBuildBitcoindMSWin.md b/doc/MMGenBuildBitcoindMSWin.md new file mode 100644 index 00000000..3a3fe8bb --- /dev/null +++ b/doc/MMGenBuildBitcoindMSWin.md @@ -0,0 +1,134 @@ +MMGen = Multi-Mode GENerator +============================ +##### a Bitcoin cold storage solution for the command line + +Build Bitcoind on Microsoft Windows +----------------------------------- + +#### Build the Berkeley Database (v5.0): + +Grab the [v5.0 tarball][01], or browse the [download page][02] for different +versions. Unpack the archive to `C:\` and execute the following from your MSYS +shell: + + $ cd /c/db-5.0.32/build_unix + $ ../dist/configure --enable-mingw --enable-cxx --disable-replication + +Edit the source file `db.h` in the `build_unix` directory, moving to line 113 +and replacing the statement `typedef pthread_t db_threadid_t;` with `typedef +u_int32_t db_threadid_t;`. + +Since the script creates the file, this must be done **after** the configure +script is run. Now execute: + + $ make + $ make install + +#### Install the MASM assembler (optional but recommended): + +Get the file [MASMsetup.exe][03] from the Microsoft website. With a tool +like 7zip, open the cab file inside and the file inside it, which begins with +`FL_ml_exe`. Copy this file to your path, renaming it to `ml.exe`. + +#### Build the Boost libraries: + +Browse the [download page][06], or get the [tarball][04] from sourceforge. +Unpack `boost_1_55_0.tar.gz` to `C:\`, and type the following from your DOS +prompt: + + cd \boost_1_55_0 + boostrap.bat + bjam toolset=gcc link=static threading=single --build-type=minimal stage --with-system --with-filesystem --with-program_options --with-chrono --with-test + bjam toolset=gcc link=static threading=multi --build-type=minimal stage --with-thread + +These commands build just the few libraries we need, avoiding the time-consuming +process of building the whole boost package. + +#### Build Bitcoind: + +Download Sipa's watchonly bitcoind [tarball][05] from GitHub and unzip it +to `C:\`. + +From the MSYS prompt: + + $ cd /c/bitcoin-watchonly + +Add the following lines to the end of `src/leveldb/build_detect_platform`: + + $ echo "DIRS=$DIRS" >> $OUTPUT + $ echo "PORT_FILE=$PORT_FILE" >> $OUTPUT + +Make the following changes to `src/leveldb/Makefile`: + +> After the line `include build_config.mk` add the following line: + + SOURCES=$(shell for i in $(DIRS); do echo $$i/*.cc; done) + +> Change the line `LIBOBJECTS = $(SOURCES:.cc=.o)` +> to read `LIBOBJECTS = $(SOURCES:.cc=.o) $(PORT_FILE:.cc=.o)` + +> Change the line `all: $(SHARED) $(LIBRARY)` +> to read `all: $(LIBRARY)` + +For each of the following files: + + src/rpcdump.cpp + src/rpcnet.cpp + src/rpcwallet.cpp + src/wallet.cpp + src/walletdb.cpp + +add the line `#include ` at the beginning, before the first +`#include` statement. + +In the following files: + + src/leveldb/db/db_test.cc + src/leveldb/db/db_bench.cc + src/leveldb/db/autocompact_test.cc + src/leveldb/db/leveldb_main.cc + +delete everything from `int main(int argc,..` to the end of the file. + +Do the following file-copying operations (needs to be done just once): + + $ cp /mingw/bin/autoreconf-2.68 /mingw/bin/autoreconf + $ cp /mingw/bin/autoconf-2.68 /mingw/bin/autoconf + $ cp /mingw/bin/automake-1.11 /mingw/bin/automake + $ cp /mingw/bin/aclocal-1.11 /mingw/bin/aclocal + +Generate the `configure` script: + + $ sh autogen.sh + +Edit the just-created `configure` script: + +> After the line: + + LIBS="$LIBS $BOOST_LIBS $BOOST_CHRONO_LIB" + +> add the line: + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + +Export variables for `configure` to pass to the preprocessor and linker: + + $ export CPPFLAGS="-I/usr/local/BerkeleyDB.5.0/include -I/usr/local/ssl/include" + $ export LDFLAGS="-static -L/usr/local/BerkeleyDB.5.0/lib -L/usr/local/ssl/lib" + $ export BOOST_ROOT=/c/boost_1_55_0 + +Run `configure` and then `make`: + + $ ./configure --without-qt --with-incompatible-bdb + $ make src/bitcoind.exe + +Strip the executable (`strip src/bitcoind.exe`), copy it to your path and test +by running `bitcoind`. You may need to supply an argument to the `-datadir` +option so the daemon can find your wallet and configuration file. + +[01]: http://download.oracle.com/berkeley-db/db-5.0.32.tar.gz +[02]: http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index-082944.html +[03]: http://www.microsoft.com/en-gb/download/details.aspx?id=12654 +[04]: http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/download +[05]: https://codeload.github.com/sipa/bitcoin/zip/watchonly +[06]: http://www.boost.org/users/download/ diff --git a/doc/MMGenEditPathMSWin.md b/doc/MMGenEditPathMSWin.md new file mode 100644 index 00000000..0d3a40ef --- /dev/null +++ b/doc/MMGenEditPathMSWin.md @@ -0,0 +1,16 @@ +MMGen = Multi-Mode GENerator +============================ +##### a Bitcoin cold storage solution for the command line + +### Editing the user path in Windows: + + 1. Right-click on your "My Computer" icon and select "Properties". + 2. Click on the "Advanced" tab, then on the "Environment Variables" button. + 3. A dialogue window will pop up. Edit the path variable in the **top** text + box, adding your entry (`c:\mingw\bin`, for example) to the end. If there + is no PATH variable listed there, create it. Path entries are separated + by semicolons in Windows, so if the PATH variable already exists and has + entries, you must separate your entry from the preceding one with a + semicolon. As a guide for the format, you may examine the **system** PATH + variable in the **bottom** text box. **Do not** edit the system PATH, + however, as this can lead to unintended consequences for your computer. diff --git a/doc/MMGenGetMSYS_Archives.md b/doc/MMGenGetMSYS_Archives.md new file mode 100644 index 00000000..0b6d9c8e --- /dev/null +++ b/doc/MMGenGetMSYS_Archives.md @@ -0,0 +1,47 @@ +MMGen = Multi-Mode GENerator +============================ +##### a Bitcoin cold storage solution for the command line + +### Required MSYS Archives: + + * [msysCORE-bin][] + * [msysCORE-doc][] + * [msysCORE-ext][] + * [libtermcap-dll][] + * [bash-bin][] + * [libiconv-dll][] + * [less-bin][] + * [make-bin][] + * [tar-bin][] + * [libregex-dll][] + * [coreutils-bin][] + * [sed-bin][] + * [grep-bin][] + * [gzip-bin][] + * [termcap-bin][] + * [gawk-bin][] + * [perl-bin][] + * [m4-bin][] + * [libcrypt-dll][] + * [libintl-dll][] + +[msysCORE-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.18-1/msysCORE-1.0.18-1-msys-1.0.18-bin.tar.lzma +[msysCORE-doc]: http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.18-1/msysCORE-1.0.18-1-msys-1.0.18-doc.tar.lzma +[msysCORE-ext]: http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.18-1/msysCORE-1.0.18-1-msys-1.0.18-ext.tar.lzma +[libtermcap-dll]: http://sourceforge.net/projects/mingw/files/MSYS/Base/termcap/termcap-0.20050421_1-2/libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma +[bash-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/bash/bash-3.1.17-4/bash-3.1.17-4-msys-1.0.16-bin.tar.lzma +[libiconv-dll]: http://sourceforge.net/projects/mingw/files/MSYS/Base/libiconv/libiconv-1.14-1/libiconv-1.14-1-msys-1.0.17-dll-2.tar.lzma +[less-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/less/less-436-2/less-436-2-msys-1.0.13-bin.tar.lzma +[make-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/make/make-3.81-3/make-3.81-3-msys-1.0.13-bin.tar.lzma +[tar-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/tar/tar-1.23-1/tar-1.23-1-msys-1.0.13-bin.tar.lzma +[libregex-dll]: http://sourceforge.net/projects/mingw/files/MSYS/Base/regex/regex-1.20090805-2/libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma +[coreutils-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/coreutils/coreutils-5.97-3/coreutils-5.97-3-msys-1.0.13-bin.tar.lzma +[sed-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/sed/sed-4.2.1-2/sed-4.2.1-2-msys-1.0.13-bin.tar.lzma +[grep-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/grep/grep-2.5.4-2/grep-2.5.4-2-msys-1.0.13-bin.tar.lzma +[gzip-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/gzip/gzip-1.3.12-2/gzip-1.3.12-2-msys-1.0.13-bin.tar.lzma +[termcap-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/termcap/termcap-0.20050421_1-2/termcap-0.20050421_1-2-msys-1.0.13-bin.tar.lzma +[gawk-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Base/gawk/gawk-3.1.7-2/gawk-3.1.7-2-msys-1.0.13-bin.tar.lzma +[perl-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Extension/perl/perl-5.8.8-1/perl-5.8.8-1-msys-1.0.17-bin.tar.lzma +[m4-bin]: http://sourceforge.net/projects/mingw/files/MSYS/Extension/m4/m4-1.4.16-2/m4-1.4.16-2-msys-1.0.17-bin.tar.lzma +[libcrypt-dll]: http://sourceforge.net/projects/mingw/files/MSYS/Extension/crypt/crypt-1.1_1-3/libcrypt-1.1_1-3-msys-1.0.13-dll-0.tar.lzma +[libintl-dll]: http://sourceforge.net/projects/mingw/files/MSYS/Base/gettext/gettext-0.18.1.1-1/libintl-0.18.1.1-1-msys-1.0.17-dll-8.tar.lzma diff --git a/doc/MMGenGetMinGW_Archives.md b/doc/MMGenGetMinGW_Archives.md new file mode 100644 index 00000000..b41fb4d1 --- /dev/null +++ b/doc/MMGenGetMinGW_Archives.md @@ -0,0 +1,67 @@ +MMGen = Multi-Mode GENerator +============================ +##### a Bitcoin cold storage solution for the command line + +### Required MinGW Archives: + + * [bsdtar][] + * [gcc-core-bin][] + * [gcc-core-dev][] + * [gcc-core-dll][] + * [gcc-c++-bin][] + * [gcc-c++-dev][] + * [gcc-c++-dll][] + * [binutils-bin][] + * [binutils-dev][] + * [gettext-dev][] + * [gettext-dll][] + * [libintl-dll][] + * [gmp-dev][] + * [gmp-dll][] + * [libiconv-dev][] + * [libiconv-dll][] + * [mingwrt-dev][] + * [mingwrt-dll][] + * [mpc-dev][] + * [mpc-dll][] + * [mpfr-dev][] + * [mpfr-dll][] + * [pthreads-w32-dev][] + * [pthreads-w32-dll][] + * [w32api-dev][] + * [zlib-dev][] + * [zlib-dll][] + * [gettext-bin][] + * [autoconf2.5-bin][] + * [automake1.11-bin][] + +[bsdtar]: http://sourceforge.net/projects/mingw/files/MinGW/Extension/bsdtar/basic-bsdtar-2.8.3-1/basic-bsdtar-2.8.3-1-mingw32-bin.zip +[gcc-core-bin]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-core-4.8.1-4-mingw32-bin.tar.lzma +[gcc-core-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-core-4.8.1-4-mingw32-dev.tar.lzma +[gcc-core-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-core-4.8.1-4-mingw32-dll.tar.lzma +[gcc-c++-bin]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-c++-4.8.1-4-mingw32-bin.tar.lzma +[gcc-c++-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-c++-4.8.1-4-mingw32-dev.tar.lzma +[gcc-c++-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-c++-4.8.1-4-mingw32-dll.tar.lzma +[binutils-bin]: http://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/binutils-2.24/binutils-2.24-1-mingw32-bin.tar.xz +[binutils-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/binutils-2.24/binutils-2.24-1-mingw32-dev.tar.xz +[gettext-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gettext/gettext-0.18.3.1-1/gettext-0.18.3.1-1-mingw32-dev.tar.lzma +[gettext-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gettext/gettext-0.18.3.1-1/gettext-0.18.3.1-1-mingw32-dll.tar.lzma +[libintl-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gettext/gettext-0.18.1.1-2/libintl-0.18.1.1-2-mingw32-dll-8.tar.lzma +[gmp-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gmp/gmp-5.1.2/gmp-5.1.2-1-mingw32-dev.tar.lzma +[gmp-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gmp/gmp-5.1.2/gmp-5.1.2-1-mingw32-dll.tar.lzma +[libiconv-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/libiconv/libiconv-1.14-3/libiconv-1.14-3-mingw32-dev.tar.lzma +[libiconv-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/libiconv/libiconv-1.14-3/libiconv-1.14-3-mingw32-dll.tar.lzma +[mingwrt-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/mingw-rt/mingwrt-4.0.3/mingwrt-4.0.3-1-mingw32-dev.tar.lzma +[mingwrt-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/mingw-rt/mingwrt-4.0.3/mingwrt-4.0.3-1-mingw32-dll.tar.lzma +[mpc-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/mpc/mpc-1.0.1-2/mpc-1.0.1-2-mingw32-dev.tar.lzma +[mpc-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/mpc/mpc-1.0.1-2/mpc-1.0.1-2-mingw32-dll.tar.lzma +[mpfr-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/mpfr/mpfr-3.1.2-2/mpfr-3.1.2-2-mingw32-dev.tar.lzma +[mpfr-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/mpfr/mpfr-3.1.2-2/mpfr-3.1.2-2-mingw32-dll.tar.lzma +[pthreads-w32-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/pthreads-w32-2.9.1/pthreads-w32-2.9.1-1-mingw32-dev.tar.lzma +[pthreads-w32-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/pthreads-w32-2.9.1/pthreads-w32-2.9.1-1-mingw32-dll.tar.lzma +[w32api-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/w32api/w32api-4.0.3/w32api-4.0.3-1-mingw32-dev.tar.lzma +[zlib-dev]: http://sourceforge.net/projects/mingw/files/MinGW/Base/zlib/zlib-1.2.8/zlib-1.2.8-1-mingw32-dev.tar.lzma +[zlib-dll]: http://sourceforge.net/projects/mingw/files/MinGW/Base/zlib/zlib-1.2.8/zlib-1.2.8-1-mingw32-dll.tar.lzma +[gettext-bin]: http://sourceforge.net/projects/mingw/files/MinGW/Base/gettext/gettext-0.18.3.1-1/gettext-0.18.3.1-1-mingw32-bin.tar.lzma +[autoconf2.5-bin]: http://sourceforge.net/projects/mingw/files/MinGW/Extension/autoconf/autoconf2.5/autoconf2.5-2.68-1/autoconf2.5-2.68-1-mingw32-bin.tar.lzma +[automake1.11-bin]: http://sourceforge.net/projects/mingw/files/MinGW/Extension/automake/automake1.11/automake1.11-1.11.1-1/automake1.11-1.11.1-1-mingw32-bin.tar.lzma diff --git a/doc/MMGenInstallDependenciesMSWin.md b/doc/MMGenInstallDependenciesMSWin.md new file mode 100644 index 00000000..e7e7b6d3 --- /dev/null +++ b/doc/MMGenInstallDependenciesMSWin.md @@ -0,0 +1,61 @@ +MMGen = Multi-Mode GENerator +============================ +##### a Bitcoin cold storage solution for the command line + +Install MMGen and Its Dependencies on Microsoft Windows +------------------------------------------------------- + +#### Install the Python interpreter: + +Grab the [Windows 32-bit +installer](https://www.python.org/ftp/python/2.7.6/python-2.7.6.msi) +and run it, accepting the defaults. Make sure the Python base directory is in +your [path](MMGenEditPathMSWin.md). + +#### Build the Scrypt Python module: + +Grab the [latest tarball](https://pypi.python.org/pypi/scrypt/) +from python.org. Unpack to `C:\`, start the DOS prompt and run: + + cd \scrypt-0.6.1 + python setup.py build --compiler=mingw32 + python setup.py install + +#### Build OpenSSL: + +Grab the [latest tarball](http://www.openssl.org/source/openssl-1.0.1f.tar.gz) +from the [openssl.org download page](http://www.openssl.org/source/). Unpack +to `C:\`, start your MSYS shell and run: + + $ cd /c/openssl-1.0.1f + $ ./config + $ make + $ make install + +#### Install the Pycrypto Python module: + +Source code is available from the +[Pycrypto home page](https://www.dlitz.net/software/pycrypto/), +but it appears to build only with MS Visual Studio, not MinGW. +Until this situation is fixed, you can install the precompiled binaries +available from +[Voidspace](http://www.voidspace.org.uk/python/modules.shtml#pycrypto). +Download and run the +[Windows installer](http://www.voidspace.org.uk/downloads/pycrypto26/pycrypto-2.6.win32-py2.7.exe), +accepting the defaults. + +#### Install the ecdsa Python module: + +Grab the [tarball](https://pypi.python.org/pypi/ecdsa), unpack it, `cd` to the +archive root and run `python setup.py install`. + +#### Install the bitcoin-python Python module: + +Grab the [tarball](https://pypi.python.org/pypi/bitcoin-python/0.3), +unpack it, start your MSYS shell, `cd` to the archive root and run the command: + + $ cp -a src/bitcoinrpc /c/Python27/Lib/site-packages + +This is a workaround for the standard setup command, which fails here +due to a dependency problem. If your Python is installed in a different +location, you'll have to adjust the destination path accordingly. diff --git a/doc/MMGenInstallLinux.md b/doc/MMGenInstallLinux.md new file mode 100644 index 00000000..33ea47e4 --- /dev/null +++ b/doc/MMGenInstallLinux.md @@ -0,0 +1,74 @@ +MMGen = Multi-Mode GENerator +============================ +##### a Bitcoin cold storage solution for the command line + +Install on Debian/Ubuntu Linux: +---------------------------------------- + +**Perform the following steps on both your online and offline computers:** + +Install the pip Python installer: + + $ sudo apt-get install python-pip + +Install required Python modules: + + $ sudo pip install ecdsa scrypt pycrypto bitcoin-python + +Install MMGen: + + $ git clone https://github.com/mmgen/mmgen.git + $ cd mmgen; sudo ./setup.py install + +Install vanitygen (optional but recommended): + + $ git clone https://github.com/samr7/vanitygen.git + (build and put the "keyconv" executable in your path) + +At this point you can begin trying out MMgen, creating a test wallet and +generating keys as described in **Using MMGen** below. To be able to track +addresses and create and sign transactions, however, you'll need to have +bitcoin daemons installed on your online and offline machines. + +#### Bitcoind installation + +The bitcoin daemon on the **offline machine** is used solely for signing +transactions and is therefore run without a blockchain. The version bundled +with the prebuilt Bitcoin-QT is just fine for this purpose. It can be obtained +here: + + https://bitcoin.org/en/download + +After installation, locate the bitcoind executable and start it up: + + $ bitcoind -daemon -maxconnections=0 + +Note that in the absence of a blockchain the daemon starts very quickly and +uses practically no CPU once running. Thus a low-powered computer such as a +netbook can serve quite nicely as an offline signing machine. + +On the **online machine**, the bitcoin daemon is used for tracking addresses +and requires a full, updated blockchain. For this a more powerful computer is +needed, especially when importing addresses. Plenty of free disk space is also +required to accommodate the rapidly-growing blockchain (20GB in size at the time +of writing). + +The standard bitcoin daemon at present lacks the watch-only address support we +need, so we must get and compile the special watch-only enabled version created +by Bitcoin core developer Pieter Wuille, aka Sipa. If you have the necessary +dependencies installed, the build process is surprisingly painless. + + $ curl -O https://codeload.github.com/sipa/bitcoin/zip/watchonly + $ unzip watchonly + $ cd bitcoin-watchonly + $ ./autogen.sh + $ ./configure + $ make -j4 + (You may have to install the libboost-all-dev package for the build to succeed) + +With your online machine connected to the Internet, start the freshly compiled +daemon and let it synchronize the blockchain, taking care to **move any +existing wallet.dat out of harm's way** beforehand. The daemon will create a +new wallet upon startup, which you'll use as your **tracking wallet**. + +Congratulations! Your MMGen installation is now complete. diff --git a/doc/MMGenInstallMSWin.md b/doc/MMGenInstallMSWin.md new file mode 100644 index 00000000..00e63d4f --- /dev/null +++ b/doc/MMGenInstallMSWin.md @@ -0,0 +1,54 @@ +MMGen = Multi-Mode GENerator +============================ +##### a Bitcoin cold storage solution for the command line + +Install on Microsoft Windows +---------------------------- + +The installation process on Windows can be divided into three steps: + + 1. [Install MinGW and MSYS][01], if you haven't already; + 2. [Build MMGen's dependencies (excluding the watch-only bitcoind) and + install MMGen itself][02]; and + 3. [Build the watch-only bitcoind][03]. + +After the second step you'll be able to use many of MMGen's features. You +must complete step 3 to be able to track addresses and create transactions, +however. + +Getting MMGen up and running on MS Windows requires more work than with Linux, +but your patience will be rewarded with success in the end. Detailed, +step-by-step instructions for installing and building each component and +dependency have been provided to make the process go as smoothly as possible. + +The instructions are designed for a computer not connected to the Internet. +They've been tested on the author's build machine running 32-bit Windows XP. + +#### A word on text editors: + +The installation process involves some editing of source code and configuration +files. Windows Notepad is a bad choice for this, because it doesn't handle +the line endings in Unix text files properly. Therefore, it's recommended you +install a file format-aware text editor like one of the following: + +For an easy-to-use editor, try [nano][], available [here][04] as a +precompiled Windows binary. Just extract `nano.exe` from the archive and copy +it to your path. + +For advanced users with some knowledge of vi commands, [Vim][], a full-featured +editor with advanced text highlighting capabilities, will be a better choice. +Grab the Windows installer [here][05] and run it, accepting the defaults. + +After installing Vim, you should add its executable directory `C:\Program +Files\Vim\vim74` (the version number may change) to your user path. +Editing paths is explained [here][06]. + +[01]: MMGenInstallMinGW_MSYS.md +[02]: MMGenInstallDependenciesMSWin.md +[03]: MMGenBuildBitcoindMSWin.md +[06]: MMGenEditPathMSWin.md + +[04]: http://mingw-and-ndk.googlecode.com/files/win-mingw-nano.7z +[05]: http://www.vim.org/download.php +[nano]: http://www.nano-editor.org/ +[vim]: http://www.vim.org/ diff --git a/doc/MMGenInstallMinGW_MSYS.md b/doc/MMGenInstallMinGW_MSYS.md new file mode 100644 index 00000000..53903a70 --- /dev/null +++ b/doc/MMGenInstallMinGW_MSYS.md @@ -0,0 +1,85 @@ +MMGen = Multi-Mode GENerator +============================ +##### a Bitcoin cold storage solution for the command line + +Install MinGW and MSYS on Microsoft Windows +------------------------------------------- + +MinGW (Minimal GNU for Windows) provides the gcc compiler and related tools for +compiling source code into Windows binaries. MSYS provides a Unix-like +environment with basic Unix shell commands. MinGW and MSYS are part of the +same project and are designed to be used together. + +Complete hypertexed lists of the required MinGW and MSYS archive files are +provided below for convenient downloading. Save the archives into two separate +temporary directories (`mingw` and `msys`, for example). Note: these archives +were up-to-date at the time of writing (April 2014); if you have time to spare +and want to hunt for more recent versions on the [MinGW repository][01], feel +free to do so. + + * [MinGW archive list][02] + * [MSYS archive list][03] + +Open the basic-bsdtar archive (in the MinGW list) and copy the executable to +your path (e.g. C:\WINDOWS\system32). + +From the DOS prompt, run `mkdir C:\mingw` to create the directory `C:\mingw`. +Move to this directory with the `cd` command and unpack each of the MinGW +archives (excepting the already-unpacked basic-bsdtar archive) there as +follows: + + basic-bsdtar -xf + +Create a `C:\msys` directory the same way, move to it and repeat the above +unpacking procedure with the MSYS archives. + +Add `C:\mingw\bin` to your user path. +Consult [this page](MMGenEditPathMSWin.md) +for instructions on editing your user path. + +Close the command prompt window and open a new one. Launch the MSYS shell with +the command `C:\msys\bin\bash.exe --login`. You'll now be in the home +directory of your MSYS environment. + +Run the command `mount c:/mingw /mingw` to include your MinGW installation in +the MSYS tree. So you won't have to run this command every time you log in to +MSYS, open the file `/etc/fstab` in your text editor and add the line `c:/mingw +/mingw` (if it's not already there). + +If you want be able to launch MSYS from an icon, make a copy of the "Command +Line" icon on your desktop, rename it to your taste, right click on it, select +"Properties" and change the highlighted path to `c:\msys\bin\bash.exe --login`. +You may also want to change the "Home Folder" field to your MSYS home +directory, `C:\msys\home\Admin` for the Admin user. + +#### Unix commands and environment: + +If you're new to Unix, you should learn a few key commands: + + * `ls` - view directory contents (`ls -l` for a long view) + * `rm` - remove files (`rm -r` to remove entire directory trees) + * `rmdir` - remove an empty directory + * `cp` - copy a file (`cp -a` to copy directory trees) + * `mv` - move a file or directory + * `cat` - output a file to screen + * `less` - view a file page-by-page, with scrollback + +Command help texts can be accessed with the `--help` switch. The MSYS root +directory is `/`. Drive letter `C:` can be accessed as `/c/`. + +Environmental variables may be viewed with the `env` command. Individual +variables may be displayed like this: + + $ echo $PAGER + +and set like this: + + $ set PAGER=/bin/less + +Sometimes variables must be exported to be visible to called programs: + + $ export PATH + +[01]: http://sourceforge.net/projects/mingw/files/ +[02]: MMGenGetMinGW_Archives.md +[03]: MMGenGetMSYS_Archives.md diff --git a/doc/MMGenLinuxInstall.md b/doc/MMGenLinuxInstall.md deleted file mode 100644 index 67489afb..00000000 --- a/doc/MMGenLinuxInstall.md +++ /dev/null @@ -1,78 +0,0 @@ -MMGen = Multi-Mode GENerator ----------------------------- -##### a Bitcoin cold storage solution for the command line - -### Download/Install on Debian/Ubuntu Linux: - -**Perform the following steps on both your online and offline -computers:** - -Install the pip Python installer: - - $ sudo apt-get install python-pip - -Install required Python modules: - - $ sudo pip install ecdsa scrypt pycrypto bitcoin-python - -Install MMGen: - - $ git clone https://github.com/mmgen/mmgen.git - $ cd mmgen; sudo ./setup.py install - -Install vanitygen (optional but recommended): - - $ git clone https://github.com/samr7/vanitygen.git - (build and put the 'keyconv' executable in your path) - -At this point you can begin trying out MMgen, creating a test wallet -and generating keys as described in **Using MMGen** below. To be -able to track addresses and create and sign transactions, however, -you'll need to have bitcoin daemons installed on your online and -offline machines. - -**Bitcoind installation** - -The bitcoin daemon on the **offline machine** is used solely for -signing transactions and is therefore run without a blockchain. -The version bundled with the prebuilt Bitcoin-QT is just fine for this -purpose. It can be obtained here: - - https://bitcoin.org/en/download - -After installation, locate the bitcoind executable and start it up: - - $ bitcoind -daemon -maxconnections=0 - -Note that in the absence of a blockchain the daemon starts very quickly -and uses practically no CPU once running. -Thus a low-powered computer such as a netbook can serve quite nicely -as an offline signing machine. - -On the **online machine**, the bitcoin daemon is used for tracking -addresses and requires a full, updated blockchain. For -this a more powerful computer is needed, especially when importing -addresses. Plenty of free disk space is also required to accomodate -the rapidly-growing blockchain (20GB in size at the time of writing). - -The standard bitcoin daemon at present lacks the watch-only address -support we need, so we must get and compile the special watch-only -enabled version created by Bitcoin core developer Pieter Wuille, aka -sipa. If you have the necessary dependencies installed, this process -is surprisingly painless. - - $ curl -O https://codeload.github.com/sipa/bitcoin/zip/watchonly - $ unzip watchonly - $ cd bitcoin-watchonly - $ ./autogen.sh - $ ./configure - $ make -j4 - (You may have to install the libboost-all-dev package for the build to succeed) - -With your online machine connected to the Internet, start the freshly -compiled daemon and let it synchronize the blockchain, **taking care -to move any existing wallet.dat out of harm's way** beforehand. -The daemon will create a new wallet upon startup, which you'll use -as your **tracking wallet**. - -Congratulations! Your MMGen installation is now complete. diff --git a/doc/MMGenWindowsInstall.md b/doc/MMGenWindowsInstall.md deleted file mode 100644 index cd1cb8aa..00000000 --- a/doc/MMGenWindowsInstall.md +++ /dev/null @@ -1,22 +0,0 @@ -MMGen = Multi-Mode GENerator ----------------------------- -##### a Bitcoin cold storage solution for the command line - -### Download/Install on Microsoft Windows - - Compiling the watch-only bitcoind and the python scrypt module are the - main challenges for Windows installation. - To compile bitcoind, MinGW must first be installed - and the Berkeley DB and Boost libraries built from source. - The Python interpeter is required for building the python scrypt - module and installing the other python modules. - - The build process involves some editing of source code and configuration - files, so it's useful to have a good text editor installed on the system. - - MMGen's remaining components either require no compilation (the ecdsa and - bitcoin-python modules and MMGen itself) or can be found online in - precompiled form (the Python interpeter, pycrypto Python module and - vanitygen) - -##### (to be continued...) diff --git a/setup.py b/setup.py index 48c26fe6..3442a9c6 100755 --- a/setup.py +++ b/setup.py @@ -8,6 +8,8 @@ setup( author_email = 'mmgen-py@yandex.com', url = 'https://github.com/mmgen/mmgen', py_modules = [ + '__init__', + 'mmgen.__init__', 'mmgen.addr', 'mmgen.bitcoin', @@ -29,6 +31,7 @@ setup( 'mmgen.rpc.proxy', 'mmgen.rpc.util', + 'tests.__init__', 'tests.addr', 'tests.bitcoin', 'tests.mn_electrum', @@ -38,10 +41,9 @@ setup( 'tests.utils', 'tests.walletgen' ], - data_files=[('/usr/local/bin', [ + data_files=[('bin', [ 'mmgen-addrgen', 'mmgen-addrimport', - 'mmgen-keygen', 'mmgen-passchg', 'mmgen-walletchk', 'mmgen-walletgen', diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b