昨天,今天,明天,每天的每天,你是否都多懂得一点点...

星期五, 五月 25, 2018

(翻墙VPS)谷歌云一年免费帐户申请+架设ShadowSocksR服务器+客户端设置


利用谷歌云提供的300美元一年的免费试用, 可以架设个SSR的翻墙服务器用很久, 看YOUTUBE高清无压力.



用到的命令:

//先跟着这个页面的1,2,3,4步添加docker repository
//安装docker
sudo apt-get update && sudo apt-get install docker-ce
//单命令架设SSR
sudo docker run -d --rm --name ssr -p 81:81 malaohu/ssr-with-net-speeder -s 0.0.0.0 -p 81 -k P@ssw0rd -m rc4-md5 -o http_simple


推荐的协议和混淆参数看这里

不是所有的参数都能在这个教程里用, 比如chacha20的加密算法就用不了, 因为这个docker image 的作者没有加libsodium 的包. 我有空会定制一个新的docker image, 把这些加进去.

对原理有兴趣的请看这里:

这里分享一个ShadowSocksR 服务器
ShadowSocks R


server: 35.229.147.33
port: 81
protocol: origin
password: 看视频最后几分钟
method: rc4-md5
obfs: http_simple



--
Feng

星期四, 五月 24, 2018

Git - Reapply changes that were accidentally rollback

Here is the scenario

I made some changes and commit the file
I accidentally undo the change in my editor then made some more changes and commit
Now I realized the first change has been rollback.


Here is what I did

Find the finger print of my first change  a6dfb30, and find the original finger print  7c54b25, use the following command to generate the patch file


git diff  7c54b25 a6dfb30 -- src/app/dashboard/dashboard.component.html > 1.patch

Then apply the patch

git apply 1.patch

Done

--
Feng

星期二, 五月 22, 2018

Docker nginx doesn't work with angular route

If you are serving angular app with nginx docker image, you will notice that your cannot directly access your app route Url directly from browser's address bar.  You will get 404 file not found error. 

To resolve this, you need to edit the default.conf file to tell nginx how to find files.

// Copy your conf.d directory out to your current dir 
docker cp columnConcator:/etc/nginx/conf.d .
// Stop the container
docker stop columnConcator
// Edit the default.conf file in conf.d dir
// Update your location block as following:

location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
try_files $uri $uri/ /index.html;

    }

// copy modified directory back
sudo docker cp conf.d/ columnConcator:/etc/nginx
// restart the docker
docker start columnConcator

Done!


--
Feng

星期一, 五月 21, 2018

Dropbox selective sync on Ubuntu using Dropbox CLI

To install dropbox cli, run

sudo apt-get install nautilus-dropbox

To login to your dropbox

dropbox start -i

Now a url will be provided, paste this url to your favorite browser and allow the sync.

Now start the dropbox deamon by
dropbox start

Your dropbox account are now linked to your ubuntu.

Now enter your dropbox folder
cd Dropbox
Then run this command to exclude all the folders
dropbox exclude add *

This will exclude all the folders to be sync, except files under Dropbox root folder.

Now start including your selective sync folders.

dropbox exclude remove fengubuntu

Hint: You can use --help to get help of a sub command, for example, dropbox exclude --help will show your how to use dropbox exclude command.


--
Feng

星期五, 五月 18, 2018

Use Kdiff3 for git diff

​​
Firstly, put kdiff3 into the path

 set path=%path%;C:\Program Files\KDiff3

Then run 

git difftool --tool=kdiff3

You can calso config kdiff3 as the default diff tool

git config --global diff.tool kdiff3

Then you can just run 

git difftool

use -y if you don't have to see prompts

git difftool  -y

In Kdiff3's Config, you may would like to enable "Quit also via Esacpe key" to be able to quick exit kdiff3 for next file.

--
Feng

星期二, 五月 15, 2018

Use SASS .scss style sheet with Angular 2+

SCSS is build in with angular 2+.

To use SCSS in your project, 

change the style.css file to style.scss

then change style.css to style.scss in your .angular-cli.json file.

All done.

--
Feng

星期一, 五月 14, 2018

Use font awesome with angular2+ material

npm install font-awesome --save

Then 

Import css from .angular-cli.json

"styles": [
        "styles.css",
        "../node_modules/font-awesome/css/font-awesome.css"
      ],



Add the following style to style.css

.fontawesome {
    display: inline-block;
    font: normal normal normal 14px/1 FontAwesome;
    font-size: 24px;
    text-rendering: auto;
    -webkit-font-smoothing: antialiased;
    text-align: center;
}

​use 

<mat-icon color="primary" fontSet="fontawesome" fontIcon="fa-thumb-tack"></mat-icon>​




--
Feng

星期五, 五月 11, 2018

TextArea in Draggable container doesn't work well with firefox 60.0

I used the following module in my angular project.


It works fine on google chrome.

Whereas on Firefox, the textarea inside a draggble container cannot get focus from mouse click. And it always scroll to top when typing.

--
Feng

星期四, 五月 10, 2018

Use docker ps --format to get pretty output


fengnz@mac:~ > docker ps --format '{{.Names}} {{.Image}}'
jh-mysql mysql
test_sshd rastasheep/ubuntu-sshd
ubuntu ubuntu
wp wordpress
wp-mysql mysql

--
Feng

MYBB enable HTTPS

I built a forum and enabled HTTPS for it though nginx_proxy and it's companion.

But certificate was not working. 

I stop and rm the companion docker container and recreate it again.

sudo docker run \
--name companion \
-v /home/fennng/certs:/etc/nginx/certs:rw \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--volumes-from nginx-proxy \
jrcs/letsencrypt-nginx-proxy-companion

Problem resolved. 

But with HTTPS, I got following error:





​To fix this 

remove http: from Board URL


​Problem solved 


​ Mixed content issue will come back if someone post images or medias​ with HTTP. I will leave it for now.


--
Feng

星期三, 五月 09, 2018

Shadowsocks 服务器的架设与使用

需要一台安装有docker 的 虚拟机

运行如下命令架设好服务器, 只需一条命令, 确保端口公共

​docker run -d --rm --name ssr -p 81:81 malaohu/ssr-with-net-speeder -s 0.0.0.0 -p 81 -k your-password rc4-md5 -o http_simple
查看参数

root@fengUbuntu:~# docker logs ssr
 * Restarting OpenBSD Secure Shell server sshd
   ...done.
2018-05-09 01:42:45 INFO     util.py:85 loading libcrypto from libcrypto.so.1.0.0
2018-05-09 01:42:45 INFO     shell.py:72 ShadowsocksR 3.4.0 2017-07-27
2018-05-09 01:42:45 INFO     server.py:46 current process RLIMIT_NOFILE resource: soft 1048576 hard 1048576
2018-05-09 01:42:45 INFO     asyncdns.py:324 dns server: [('168.63.129.16', 53)]
2018-05-09 01:42:45 INFO     server.py:106 server start with protocol[origin] password [your-password] method [rc4-md5] obfs [http_simple] obfs_param []
2018-05-09 01:42:45 INFO     server.py:142 starting server at 0.0.0.0:81

安装客户端


按参数填就是了

​不想要了就 docker stop ssr 删掉​

用 Azure container instance 的话, 连虚拟机都不要, 一条命令架设

az container create --name ssr --image  malaohu/ssr-with-net-speeder --resource-group testACI --ip-address public --port 81 --command-line "/usr/local/bin/entrypoint.sh -s 0.0.0.0 -p 81 -k your-password -m rc4-md5 -o http_simple



查看状态
az container show --resource-group testACI --name ssr

查看参数
az container logs --resource-group testACI --name ssr
 * Restarting OpenBSD Secure Shell server sshd
   ...done.
2018-05-09 03:57:11 INFO     util.py:85 loading libcrypto from libcrypto.so.1.0.0
2018-05-09 03:57:11 INFO     shell.py:72 ShadowsocksR 3.4.0 2017-07-27
2018-05-09 03:57:11 INFO     server.py:46 current process RLIMIT_NOFILE resource: soft 1048576 hard 1048576
2018-05-09 03:57:11 INFO     asyncdns.py:324 dns server: [('168.63.129.16', 53)]
2018-05-09 03:57:11 INFO     server.py:106 server start with protocol[origin] password [your-password] method [rc4-md5] obfs [http_simple] obfs_param []
2018-05-09 03:57:11 INFO     server.py:142 starting server at 0.0.0.0:81


删了
az container delete --resource-group testACI --name ssr





--
Feng

星期五, 五月 04, 2018

Compile gcc 2.95.3 with docker gcc

I tried to compile GCC 2.95.3 in docker. 

Although I have solved so many issues, but still failed.

For getting GCC 2.95.3 in a docker container, here is the shortcut:


//Pull this docker image

docker pull lpenz/debian-etch-i386 

//Create an docker container with this image and bash into it, run following command to install

docker run -v $PWD:/root -p 8202:8202 -it lpenz/debian-etch-i386 bash

apt-get update && apt-get install gcc-2.95 

You will get gcc-2.95.4


If you are interested in building your own gcc 2.95.3 in docker ubuntu, the attach full story can be useful for you. I believe that I am quite close now. I have spent 3 days on this. It's enough for me. 


=======================

Some useful commands

apt-get update && apt-get install gcc-4.9 flex gcc-multilib g++-multilib gperf autoconf make

rm /usr/bin/gcc
rm /usr/bin/cc
ln -s /usr/bin/gcc-5 /usr/bin/gcc
ln -s /usr/bin/gcc-5 /usr/bin/cc
linux32 bash
time ../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix
rm -rf texinfo
cp ../Makefile gcc/Makefile
time make bootstrap CC="gcc -std=gnu89"


export LIBRARY_PATH=/usr/lib/i386-linux-gnu
time make bootstrap CC="gcc -I /data/gcc-2.95.3 -std=gnu89"
make bootstrap CC="gcc -I /data/gcc-2.95.3 -std=gnu89 -B/usr/lib/i386-linux-gnu/"
make bootstrap CC="gcc -I /data/gcc-2.95.3 -std=gnu89 -I../glibc-2.10.1"

export C_INCLUDE_PATH=/data/gcc-2.95.3/glibc-workaround/include
export INCLUDE_PATH=/data/gcc-2.95.3/glibc-workaround/include


This is the step which I failed.
/data/gcc-build/gcc/xgcc -B/data/gcc-build/gcc/ -B/opt/gcc-2.95.3/i686-pc-linux-gnu/bin/ -c -g -O2 -I. -I../../../gcc-2.95.3/libio -I/data/gcc-2.95.3/include -D_IO_MTSAFE_IO -fpic ../../../gcc-2.95.3/libio/iogetline.c -o pic/iogetline.o



=========================================


Full story of fighting GCC 2.95.3 on docker containers
run gcc in docker, and map the source code folder as volume



unzip the source code
install patch 
patch the code


​root@33077097f066:/data/gcc-2.95.3# patch -Np1 -i ../gcc-2.95.3-2.patch
patching file gcc/c-common.c
patching file gcc/config/alpha/crtbegin.asm
patching file gcc/config/i386/i386.c
patching file gcc/config/i386/linux.h
patching file gcc/config/rs6000/rs6000.md
patching file gcc/config.in
patching file gcc/configure
patching file gcc/configure.in
patching file gcc/crtstuff.c
patching file gcc/cse.c
patching file gcc/cstamp-h.in
patching file gcc/function.c
patching file gcc/rtl.h
patching file gcc/rtlanal.c
patching file gcc/stor-layout.c
patching file gcc/toplev.c
patching file gcc/varasm.c
root@33077097f066:/data/gcc-2.95.3# patch -Np1 -i ../gcc-2.95.3-no-fixinc.patch
patching file gcc/Makefile.in
root@33077097f066:/data/gcc-2.95.3# patch -Np1 -i ../gcc-2.95.3-returntype-fix.patch
patching file gcc/toplev.c
root@33077097f066:/data/gcc-2.95.3#

You can do above steps using any linux system.

configure failed

root@33077097f066:/data/gcc-build# ../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix
Configuring for a x86_64-pc-linux-gnuoldld host.
Invalid configuration `x86_64-pc-linux-gnuoldld': machine `x86_64-pc' not recognized
Invalid configuration `x86_64-pc-linux-gnuoldld': machine `x86_64-pc' not recognized
Unrecognized host system name x86_64-pc-linux-gnuoldld.
root@33077097f066:/data/gcc-build#

​change the config.sub file to add x86_64*​ |


​../gcc-2.95.3/configure: 7: /tmp/cONf193.pos: cc: not found​

​*** The command 'cc -o conftest -g   conftest.c' failed.​

​To build a gcc, you need to have a gcc first.... chicken first​

A prebuild gcc needs to be installed.

So you need to has a linux with gcc

docker run -it -v %cd%:/data gcc:4 bash 

better, but got this error:

Configuration x86_64-unknown-linux-gnu not supported
Configure in /data/gcc-build/gcc failed, exiting.
root@a77b0f2253d5:/data/gcc-build#

root@a77b0f2253d5:/data/gcc-build# cp /usr/share/libtool/config/config.{guess,sub} ../gcc-2.95.3

same error, doesn't help

Then used this command

../gcc-2.95.3/configure --prefix=/opt/i386/gcc/gcc-2.95.3 --enable-languages=c,c++ --enable-threads=posix --enable-shared --host i386-pc-linux-gnu 

Or great, worked!!!
 


Then I do:

root@cfb1e30f20ef:/data/gcc-build# make bootstrap

Got error:

checking lex output file root... configure: error: cannot find output from lex; giving up
Makefile:1188: recipe for target 'config.status' failed
make[1]: *** [config.status] Error 1
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1493: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2

It seems that I need to install flex


Not very confident with alpine, I then used another ubuntu docker and rollback config.sub and config.guess file. Same issue, I had to add x86_64* as well.

Then still got the same flex not found error. But his time it happen with the config command, not the make command.

Then I installed flex:

root@fb7cba64b1ba:/data/gcc-build# apt-get install flex

I got this error again:

Configuration x86_64-unknown-linux-gnu not supported
Configure in /data/gcc-build/gcc failed, exiting.

(this problem is solved using newer config.sub and config.guess file, I rolled back the file)


​​I had resolved above error with gcc:4, then this error happen again in ubuntu. 

So, I may just need to install flex in gcc:4

I couldn't find apk in this container... strange

root@cfb1e30f20ef:/data/gcc-build# cat /proc/version
Linux version 4.9.87-linuxkit-aufs (root@95fa5ec30613) (gcc version 6.4.0 (Alpine 6.4.0) ) #1 SMP Wed Mar 14 15:12:16 UTC 2018

It looked like a alpine.

But ...

root@cfb1e30f20ef:/data/gcc-build# cat /etc/*release   
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"              
NAME="Debian GNU/Linux"                                
VERSION_ID="8"                                         
VERSION="8 (jessie)"                                   
ID=debian                                              
HOME_URL="http://www.debian.org/"                      
SUPPORT_URL="http://www.debian.org/support"            
BUG_REPORT_URL="https://bugs.debian.org/"              
root@cfb1e30f20ef:/data/gcc-build# cat /etc/*issue*    
Debian GNU/Linux 8 \n \l                               
                                                       
Debian GNU/Linux 8                  


It's actually a Debian                   

That's better, I can use apt-get update && apt-get install flex to install flex

run make bootstrap again 


Got error:

Bootstrapping the compiler
make[1]: Entering directory '/data/gcc-build/gcc'
make[1]: *** No rule to make target 'bootstrap'.  Stop.
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1490: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2


I tried to run:

../gcc-2.95.3/configure --prefix=/opt/i386/gcc/gcc-2.95.3 --enable-languages=c,c++ --enable-threads=posix --enable-shared --host i386-pc-linux-gnu

again, but it stopped working.

with this error again:

Configuration x86_64-unknown-linux-gnu not supported
Configure in /data/gcc-build/gcc failed, exiting.




I reset the source code

Run 

cp /usr/share/libtool/config/config.{guess,sub} ../gcc-2.95.3
 ../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix
../gcc-2.95.3/configure --prefix=/opt/i386/gcc/gcc-2.95.3 --enable-languages=c,c++ --enable-threads=posix --enable-shared --host i386-pc-linux-gnu

Then succeed again

Links are now set up to build a native compiler for i386-pc-linux-gnu
updating cache ../config.cache
creating ./config.status
creating Makefile
creating intl/Makefile
creating po/Makefile.in
creating fixinc/Makefile
creating cp/Makefile
creating auto-host.h
linking ../../gcc-2.95.3/gcc/intl/libgettext.h to intl/libintl.h
creating libintl.h
Configuring etc...
loading cache ../config.cache
checking for a BSD compatible install... (cached) /usr/bin/install -c
creating ./config.status
creating Makefile


​Then much better!!! 

Next time, I will install flex in the very beginning. It may need to be installed before config .​

make bootstrap

Now we have different error:

In file included from /usr/include/stdlib.h:24,
                 from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/features.h:374: sys/cdefs.h: No such file or directory
/usr/include/features.h:398: gnu/stubs.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/stdlib.h:41: bits/waitflags.h: No such file or directory
/usr/include/stdlib.h:42: bits/waitstatus.h: No such file or directory
/usr/include/stdlib.h:314: sys/types.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/stdlib.h:955: bits/stdlib-float.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:42:
/usr/include/unistd.h:202: bits/posix_opt.h: No such file or directory
/usr/include/unistd.h:206: bits/environments.h: No such file or directory
/usr/include/unistd.h:217: bits/types.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:42:
/usr/include/unistd.h:609: bits/confname.h: No such file or directory
Makefile:1422: recipe for target 'libgcc2.a' failed
make[2]: *** [libgcc2.a] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3299: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1493: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2
root@a3b750f09d90:/data/gcc-build#


Install more lib

​apt-get install build-essential libc6-dev libc6-dev-i386​ 

make bootstrap

In file included from /usr/include/sys/types.h:270,
                 from /usr/include/stdlib.h:314,
                 from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/bits/pthreadtypes.h:122: warning: unnamed struct/union that defines no instances
/tmp/cccmbriC.s: Assembler messages:
/tmp/cccmbriC.s:310: Error: invalid instruction suffix for `push'
/tmp/cccmbriC.s:313: Error: invalid instruction suffix for `push'
/tmp/cccmbriC.s:314: Error: invalid instruction suffix for `push'
/tmp/cccmbriC.s:333: Error: invalid instruction suffix for `pop'
/tmp/cccmbriC.s:334: Error: invalid instruction suffix for `pop'
Makefile:1422: recipe for target 'libgcc2.a' failed
make[2]: *** [libgcc2.a] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3299: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1493: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2
root@a3b750f09d90:/data/gcc-build#


Still no luck.

Then I tried to use linux32 to enter 32bit emu

linux32 bash
../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix

Great, works with the original config command.

The linux32 command will cheat bash to run in 32bit mode. 

But still same error when run make bootstrap

I reset the source code again and start again, see what happen with linx32

../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix
Works, don't need to copy the new config.sub and config.guess files.
make bootstrap

This error again:

In file included from /usr/include/stdlib.h:24,
                 from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/features.h:374: sys/cdefs.h: No such file or directory
/usr/include/features.h:398: gnu/stubs.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/stdlib.h:41: bits/waitflags.h: No such file or directory
/usr/include/stdlib.h:42: bits/waitstatus.h: No such file or directory
/usr/include/stdlib.h:314: sys/types.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/stdlib.h:955: bits/stdlib-float.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:42:
/usr/include/unistd.h:202: bits/posix_opt.h: No such file or directory
/usr/include/unistd.h:206: bits/environments.h: No such file or directory
/usr/include/unistd.h:217: bits/types.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:42:
/usr/include/unistd.h:609: bits/confname.h: No such file or directory
Makefile:1422: recipe for target 'libgcc2.a' failed
make[2]: *** [libgcc2.a] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3299: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1493: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2



​root@a3b750f09d90:/data/gcc-build# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-linux-gnu/4.9.4/lto-wrapper
Target: x86_64-linux-gnu
Configured with: /usr/src/gcc/configure --build=x86_64-linux-gnu --disable-multilib --enable-languages=c,c++,fortran,go
Thread model: posix
gcc version 4.9.4 (GCC)​

Then I installed gcc-multilib with following command

apt-get install gcc-multilib g++-multilib

make bootstrap


​/tmp/ccFsRsnm.s: Assembler messages:
/tmp/ccFsRsnm.s:310: Error: invalid instruction suffix for `push'
/tmp/ccFsRsnm.s:313: Error: invalid instruction suffix for `push'
/tmp/ccFsRsnm.s:314: Error: invalid instruction suffix for `push'
/tmp/ccFsRsnm.s:333: Error: invalid instruction suffix for `pop'
/tmp/ccFsRsnm.s:334: Error: invalid instruction suffix for `pop'
/tmp/ccFsRsnm.s:336: Error: invalid instruction suffix for `pop'
Makefile:1422: recipe for target 'libgcc2.a' failed
make[2]: *** [libgcc2.a] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3299: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1493: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2​

​...No clue


 I will try 32bit ubuntu 

docker pull 32bit/ubuntu:16.04

docker run --name 32bit-ubuntu -v $PWD:/data -w /data -p 8201:8201 -it 32bit/ubuntu:16.04 bash

apt-get update && apt-get install gcc-4.9 flex

root@ea0cdd18affd:/data# alias gcc=gcc-4.9
root@ea0cdd18affd:/data# gcc -v
Using built-in specs.
COLLECT_GCC=gcc-4.9
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.9/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.9.3-13ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.9.3 (Ubuntu 4.9.3-13ubuntu2)

Check the system, it looks like a 64bit ubuntu....not sure

root@ea0cdd18affd:/data/gcc-build# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3

root@ea0cdd18affd:/data/gcc-build# uname -m
x86_64

root@ea0cdd18affd:/data/gcc-build# file -L /sbin/init
/sbin/init: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=65f768924762c6f25e2e92d1ae907196a5f2344d, stripped


​From the last command, it looks like it's a 32bit system. Then all the outputs of other commands are not reliable.

​I tried the above command in a x64 system, got this.

root@cfb1e30f20ef:/data/gcc-build# file -L /sbin/init
/sbin/init: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=297641215ac3a7482d3f2cfeb38782a5c70e4b33, stripped


​arch will become i686 ​if running linux32

root@ea0cdd18affd:/data/gcc-build# ../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix
Config.guess failed to determine the host type.  You need to specify one.

​This linux doesn't have sub and guess file, I copied the one from gcc:4​

​root@ea0cdd18affd:/data/gcc-build# ../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix
Configuring for a x86_64-unknown-linux-gnu host.
Created "Makefile" in /data/gcc-build using "mt-frag"
../gcc-2.95.3/configure: 7: /tmp/cONf165.pos: cc: not found
*** The command 'cc -o conftest -g   conftest.c' failed.
*** You must set the environment variable CC to a working compiler.​

​​
From another linux, we can see cc is just soft link of gcc

root@a3b750f09d90:/data/gcc-build# which cc
/usr/bin/cc
root@a3b750f09d90:/data/gcc-build# ls -l /usr/bin/cc
lrwxrwxrwx 1 root root 20 Sep 13  2017 /usr/bin/cc -> /etc/alternatives/cc
root@a3b750f09d90:/data/gcc-build# ls -l /etc/alternatives/cc
lrwxrwxrwx 1 root root 18 Sep 14  2017 /etc/alternatives/cc -> /usr/local/bin/gcc
root@a3b750f09d90:/data/gcc-build# ls -l /usr/bin/gcc
ls: cannot access /usr/bin/gcc: No such file or directory
root@a3b750f09d90:/data/gcc-build# which gcc
/usr/local/bin/gcc

​So, I create a alias for it

​root@ea0cdd18affd:/data/gcc-build# alias gcc=gcc-4.9
root@ea0cdd18affd:/data/gcc-build# alias cc=gcc-4.9

not working

root@ea0cdd18affd:/data/gcc-build# ../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix
Configuring for a x86_64-unknown-linux-gnu host.
Created "Makefile" in /data/gcc-build using "mt-frag"
../gcc-2.95.3/configure: 7: /tmp/cONf510.pos: cc: not found
*** The command 'cc -o conftest -g   conftest.c' failed.
*** You must set the environment variable CC to a working compiler.


​Remove alias
root@ea0cdd18affd:/data/gcc-build# unalias gcc cc

Create symbolic link
​root@ea0cdd18affd:/data/gcc-build# ln -s /usr/bin/gcc-4.9 /usr/bin/gcc
root@ea0cdd18affd:/data/gcc-build# ln -s /usr/bin/gcc-4.9 /usr/bin/cc


​run config again

root@ea0cdd18affd:/data/gcc-build# ../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix 

Exactly same error:

Configuration x86_64-unknown-linux-gnu not supported
Configure in /data/gcc-build/gcc failed, exiting.
  ​
​​root@ea0cdd18affd:/data/gcc-build# linux32 bash
root@ea0cdd18affd:/data/gcc-build# ../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix 


​Good


root@ea0cdd18affd:/data/gcc-build# make bootstrap
bash: make: command not found​

​root@ea0cdd18affd:/data/gcc-build# apt-get install make​

root@ea0cdd18affd:/data/gcc-build# make bootstrap

​​/usr/include/features.h:367: sys/cdefs.h: No such file or directory
/usr/include/features.h:391: gnu/stubs.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/stdlib.h:41: bits/waitflags.h: No such file or directory
/usr/include/stdlib.h:42: bits/waitstatus.h: No such file or directory
/usr/include/stdlib.h:314: sys/types.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:41:
/usr/include/stdlib.h:954: bits/stdlib-float.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:42:
/usr/include/unistd.h:205: bits/posix_opt.h: No such file or directory
/usr/include/unistd.h:209: bits/environments.h: No such file or directory
/usr/include/unistd.h:220: bits/types.h: No such file or directory
In file included from ../../gcc-2.95.3/gcc/libgcc2.c:42:
/usr/include/unistd.h:612: bits/confname.h: No such file or directory
Makefile:1422: recipe for target 'libgcc2.a' failed
make[2]: *** [libgcc2.a] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3299: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1493: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2

​Same error as before​

apt-get install gcc-multilib g++-multilib

Let's install the libs

root@ea0cdd18affd:/data/gcc-build# make bootstrap

Now we have a different error:

/usr/include/bits/pthreadtypes.h:123: warning: unnamed struct/union that defines no instances
../../gcc-2.95.3/gcc/frame.c:55: extra brace group at end of initializer
../../gcc-2.95.3/gcc/frame.c:55: (near initialization for `object_mutex.__data')
../../gcc-2.95.3/gcc/frame.c:55: extra brace group at end of initializer
../../gcc-2.95.3/gcc/frame.c:55: (near initialization for `object_mutex.__data')
../../gcc-2.95.3/gcc/frame.c:55: warning: excess elements in struct initializer
../../gcc-2.95.3/gcc/frame.c:55: warning: (near initialization for `object_mutex.__data')
Makefile:1422: recipe for target 'libgcc2.a' failed
make[2]: *** [libgcc2.a] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3299: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1493: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2


​Accidentally ​upgraded gcc to 5.4 
 got a different error


More patch 



​../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared --enable-languages=c,c++ --enable-threads=posix​

​make bootstrap CC="gcc -std=gnu89"​
​ Back to ​  [libgcc2.a] Error 1


Tried the same thing on Azure VM with docker,

run 32bit/ubuntu, install gcc, flex, multilibs, git pull modified source code.

run linux32 bash

run config and make

make bootstrap CC="gcc -std=gnu89"


Got this error:

gperf -L C -F ', 0, 0' -p -j1 -i 1 -g -o -t -G -N is_reserved_word \
   -k1,3,$ ../../gcc-2.95.3/gcc/c-parse.gperf >tmp-gperf.h
/bin/sh: 1: gperf: not found
Makefile:2741: recipe for target '../../gcc-2.95.3/gcc/c-gperf.h' failed
make[2]: *** [../../gcc-2.95.3/gcc/c-gperf.h] Error 127
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:4349: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1490: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2
root@9963ba3cce19:/data/gcc-build#

apt-get install gperf

and try again

Got error:

gcc -std=gnu89 -c  -DIN_GCC     -g  -DHAVE_CONFIG_H    -I. -I../../gcc-2.95.3/gcc -I../../gcc-2.95.3/gcc/config -I../../gcc-2.95.3/gcc/../include ../../gcc-2.95.3/gcc/function.c
../../gcc-2.95.3/gcc/function.c:61:23: fatal error: protector.h: No such file or directory
compilation terminated.
Makefile:627: recipe for target 'function.o' failed
make[2]: *** [function.o] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:4349: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1490: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2

I made a mistake. I rolled back the patched, but only applied 4 more. I should applied the total 7 patches.


I reset the source code and reapply all 7 patches

retry

Got error:

/bin/sh: 1: autoheader: not found
Makefile:2223: recipe for target '../../gcc-2.95.3/gcc/cstamp-h.in' failed
make[2]: *** [../../gcc-2.95.3/gcc/cstamp-h.in] Error 127
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:4349: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1490: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2

apt-get install autoconf

try again and got this error

makeinfo: Removing output file `cpp.info' due to errors; use --force to preserve.
Makefile:3676: recipe for target 'cpp.info' failed
make[2]: *** [cpp.info] Error 2
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:4349: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1490: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2

Someone proved that cpp-2.95.3 can be built from Ubuntu 14.1 

To fix the error message from the question above: I commented out all the sections of the Makefiles of gcc-2.95.3 that compiled or installed texinfo or cpp.info.

I remove info and texinfo things from both Makefile and Makefile.in, ./gcc/Makefile

rerun config, and remove generated texinfo folder

make again

/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
Makefile:1786: recipe for target 'gencheck' failed
make[2]: *** [gencheck] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3267: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1471: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2
root@9963ba3cce19:/data/gcc-build#

use find command to find that crt1.o is in /usr/lib32 folder

make bootstrap CC="gcc -I /data/gcc-2.95.3 -std=gnu89 -B/usr/libx32/"

/usr/bin/ld: skipping incompatible /usr/libx32/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/libx32/libc.a when searching for -lc
/usr/bin/ld: i386:x64-32 architecture of input file `/usr/libx32/crt1.o' is incompatible with i386 output
/usr/bin/ld: i386:x64-32 architecture of input file `/usr/libx32/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x64-32 architecture of input file `/usr/libx32/crtn.o' is incompatible with i386 output
/usr/bin/ld: BFD (GNU Binutils for Ubuntu) 2.26.1 assertion fail ../../bfd/elf32-i386.c:3598
/usr/bin/ld: /usr/libx32/crt1.o(.text+0x23): reloc against `__libc_start_main@@GLIBC_2.0': error 4
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
Makefile:1786: recipe for target 'gencheck' failed
make[2]: *** [gencheck] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3267: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1471: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2

Then noticed another folder that contains this file

make bootstrap CC="gcc -I /data/gcc-2.95.3 -std=gnu89 -B/usr/lib/i386-linux-gnu/"

strange, same not found dissue


/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory

treid

export LIBRARY_PATH=/usr/lib/i386-linux-gnu
make bootstrap CC="gcc -I /data/gcc-2.95.3 -std=gnu89"

/data/gcc-build/gcc/xgcc -B/data/gcc-build/gcc/ -B/opt/gcc-2.95.3/i686-pc-linux-gnu/bin/ -c -g -O2 -I. -I../../../gcc-2.95.3/libio -D_IO_MTSAFE_IO -fpic ../../../gcc-2.95.3/libio/iogetline.c -o pic/iogetline.o
In file included from ../../../gcc-2.95.3/libio/iogetline.c:26:
../../../gcc-2.95.3/libio/libioP.h:38: bits/libc-lock.h: No such file or directory
In file included from ../../../gcc-2.95.3/libio/iolibio.h:1,
                 from ../../../gcc-2.95.3/libio/libioP.h:47,
                 from ../../../gcc-2.95.3/libio/iogetline.c:26:
../../../gcc-2.95.3/libio/libio.h:167: bits/stdio-lock.h: No such file or directory
Makefile:264: recipe for target 'iogetline.o' failed
make[2]: *** [iogetline.o] Error 1
make[2]: Leaving directory '/data/gcc-build/i686-pc-linux-gnu/libio'
Makefile:1363: recipe for target 'all-target-libio' failed
make[1]: *** [all-target-libio] Error 2
make[1]: Leaving directory '/data/gcc-build'
Makefile:1471: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2





tar xzf glibc-2.10.1.tar.gz
mkdir -p gcc-2.95.3/glibc-workaround/include/bits
cp glibc-2.10.1/bits/stdio-lock.h gcc-2.95.3/glibc-workaround/include/bits
cp glibc-2.10.1/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h gcc-2.95.3/glibc-workaround/include/bits
sed -i -n '1h;1!H;${;g;s/\(__pthread_slist_t __list;\n[ \t]*}\)/\1 __gcc_295_workaround__/g;p;}' gcc-2.95.3/glibc-workaround/include/bits/pthreadtypes.h


doesn't help, 

found out where gcc search for headers

root@9963ba3cce19:/data/gcc-build# `gcc -print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/5/../../../../i686-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/5
 /usr/include/i386-linux-gnu/c++/5
 /usr/include/c++/5/backward
 /usr/lib/gcc/i686-linux-gnu/5/include
 /usr/local/include
 /usr/lib/gcc/i686-linux-gnu/5/include-fixed
 /usr/include
End of search list.

Add to include path
export C_INCLUDE_PATH=/data/glibc-2.10.1

root@9963ba3cce19:/data/gcc-build# cpp -v
Using built-in specs.
COLLECT_GCC=cpp
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.9' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=i686'
 /usr/lib/gcc/i686-linux-gnu/5/cc1 -E -quiet -v -imultiarch i386-linux-gnu - -mtune=generic -march=i686 -fstack-protector-strong -Wformat -Wformat-security
ignoring nonexistent directory "/usr/local/include/i386-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/5/../../../../i686-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /data/glibc-2.10.1
 /usr/lib/gcc/i686-linux-gnu/5/include
 /usr/local/include
 /usr/lib/gcc/i686-linux-gnu/5/include-fixed
 /usr/include/i386-linux-gnu
 /usr/include
End of search list.


make bootstrap CC="gcc -I /data/gcc-2.95.3 -std=gnu89"

/data/glibc-2.10.1/bits/wordsize.h:1: #error "This file must be written based on the data type sizes of the target"
Makefile:1418: recipe for target 'libgcc2.a' failed
make[2]: *** [libgcc2.a] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3267: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1471: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2


Which means the files in C_INCLUDE_PATH take higher priority

So I set 

export C_INCLUDE_PATH=/data/gcc-2.95.3/glibc-workaround/include

Still error, the pthreadtypes.h file copied from lib doesn't work. I removed it. 


try agian

Got:


/usr/include/bits/pthreadtypes.h:123: warning: unnamed struct/union that defines no instances
../../gcc-2.95.3/gcc/frame.c:55: extra brace group at end of initializer
../../gcc-2.95.3/gcc/frame.c:55: (near initialization for `object_mutex.__data')
../../gcc-2.95.3/gcc/frame.c:55: extra brace group at end of initializer
../../gcc-2.95.3/gcc/frame.c:55: (near initialization for `object_mutex.__data')
../../gcc-2.95.3/gcc/frame.c:55: warning: excess elements in struct initializer
../../gcc-2.95.3/gcc/frame.c:55: warning: (near initialization for `object_mutex.__data')
Makefile:1432: recipe for target 'libgcc2.a' failed
make[2]: *** [libgcc2.a] Error 1
make[2]: Leaving directory '/data/gcc-build/gcc'
Makefile:3313: recipe for target 'bootstrap' failed
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory '/data/gcc-build/gcc'
Makefile:1468: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2


Open /usr/include/bits/pthreadtypes.h and give a name



Try again

  /data/gcc-build/gcc/xgcc -B/data/gcc-build/gcc/ -B/opt/gcc-2.95.3/i686-pc-linux-gnu/bin/ -c -g -O2 -I. -I../../../gcc-2.95.3/libio -D_IO_MTSAFE_IO -fpic ../../../gcc-2.95.3/libio/iogetline.c -o pic/iogetline.o
In file included from ../../../gcc-2.95.3/libio/iogetline.c:26:
../../../gcc-2.95.3/libio/libioP.h:38: bits/libc-lock.h: No such file or directory
In file included from ../../../gcc-2.95.3/libio/libio.h:167,
                 from ../../../gcc-2.95.3/libio/iolibio.h:1,
                 from ../../../gcc-2.95.3/libio/libioP.h:47,
                 from ../../../gcc-2.95.3/libio/iogetline.c:26:
/data/gcc-2.95.3/glibc-workaround/include/bits/stdio-lock.h:23: bits/libc-lock.h: No such file or directory
/data/gcc-2.95.3/glibc-workaround/include/bits/stdio-lock.h:31: #error libio needs recursive mutexes for _IO_MTSAFE_IO
Makefile:264: recipe for target 'iogetline.o' failed
make[2]: *** [iogetline.o] Error 1
make[2]: Leaving directory '/data/gcc-build/i686-pc-linux-gnu/libio'
Makefile:1363: recipe for target 'all-target-libio' failed
make[1]: *** [all-target-libio] Error 2
make[1]: Leaving directory '/data/gcc-build'
Makefile:1471: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2

Funny, libc-lock.h can't find itself.

I can see the xgcc command will search gcc-2.95.3/libio  folder. Then I copied the bits folder into libi
cp -R glibc-workaround/include/bits libio/

try again

Same

checking whether the C compiler (/data/gcc-build/gcc/xgcc -B/data/gcc-build/gcc/ -B/opt/gcc-2.95.3/i686-pc-linux-gnu/bin/ -g -O2 ) works... no
configure: error: installation or configuration problem: C compiler cannot create executables.
make[2]: Entering directory '/data/gcc-build/i686-pc-linux-gnu/libio'
test x"yes" != xyes ||\
  /data/gcc-build/gcc/xgcc -B/data/gcc-build/gcc/ -B/opt/gcc-2.95.3/i686-pc-linux-gnu/bin/ -c -g -O2 -I. -I../../../gcc-2.95.3/libio -D_IO_MTSAFE_IO -fpic ../../../gcc-2.95.3/libio/iogetline.c -o pic/iogetline.o
In file included from ../../../gcc-2.95.3/libio/iogetline.c:26:
../../../gcc-2.95.3/libio/libioP.h:38: bits/libc-lock.h: No such file or directory
In file included from ../../../gcc-2.95.3/libio/libio.h:167,
                 from ../../../gcc-2.95.3/libio/iolibio.h:1,
                 from ../../../gcc-2.95.3/libio/libioP.h:47,
                 from ../../../gcc-2.95.3/libio/iogetline.c:26:
../../../gcc-2.95.3/libio/bits/stdio-lock.h:23: bits/libc-lock.h: No such file or directory
../../../gcc-2.95.3/libio/bits/stdio-lock.h:31: #error libio needs recursive mutexes for _IO_MTSAFE_IO
Makefile:264: recipe for target 'iogetline.o' failed
make[2]: *** [iogetline.o] Error 1
make[2]: Leaving directory '/data/gcc-build/i686-pc-linux-gnu/libio'
Makefile:1363: recipe for target 'all-target-libio' failed
make[1]: *** [all-target-libio] Error 2
make[1]: Leaving directory '/data/gcc-build'
Makefile:1471: recipe for target 'bootstrap' failed
make: *** [bootstrap] Error 2


Check if xgcc is working, yes

root@9963ba3cce19:/data/gcc-build# /data/gcc-build/gcc/xgcc -v
Using builtin specs.
gcc version 2.95.3 20010315 (release)

I copied the libc-lock.h to /usr/include/bits/

root@9963ba3cce19:/data/gcc-2.95.3# cp glibc-workaround/include/bits/* /usr/include/bits/

try again
same error

export INCLUDE_PATH=/data/gcc-2.95.3/glibc-workaround/include

try again

same

can use this command to reproduce the issue, don't need to make everytime

root@9963ba3cce19:/data/gcc-build/i686-pc-linux-gnu/libio# /data/gcc-build/gcc/xgcc -B/data/gcc-build/gcc/ -B/opt/gcc-2.95.3/i686-pc-linux-gnu/bin/ -c -g -O2 -I. -I../../../gcc-2.95.3/libio -D_IO_MTSAFE_IO -fpic ../../../gcc-2.95.3/libio/iogetline.c -o pic/iogetline.o
In file included from ../../../gcc-2.95.3/libio/iogetline.c:26:
../../../gcc-2.95.3/libio/libioP.h:38: bits/libc-lock.h: No such file or directory
In file included from ../../../gcc-2.95.3/libio/libio.h:167,
                 from ../../../gcc-2.95.3/libio/iolibio.h:1,
                 from ../../../gcc-2.95.3/libio/libioP.h:47,
                 from ../../../gcc-2.95.3/libio/iogetline.c:26:
../../../gcc-2.95.3/libio/bits/stdio-lock.h:23: bits/libc-lock.h: No such file or directory
../../../gcc-2.95.3/libio/bits/stdio-lock.h:31: #error libio needs recursive mutexes for _IO_MTSAFE_IO



check cpp0's include 

root@9963ba3cce19:/data/gcc-build/i686-pc-linux-gnu/libio# ../../gcc/cpp0 -v
GNU CPP version 2.95.3 20010315 (release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /data/gcc-2.95.3/glibc-workaround/include
 /usr/local/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /opt/gcc-2.95.3/lib/gcc-lib/i686-pc-linux-gnu/2.95.3/../../../../include/g++-3
 /opt/gcc-2.95.3/lib/gcc-lib/i686-pc-linux-gnu/2.95.3/../../../../i686-pc-linux-gnu/include
 /opt/gcc-2.95.3/lib/gcc-lib/i686-pc-linux-gnu/2.95.3/include
End of omitted list.


...

Then I noticed that there is another patch file I need to use the workround


follow this page:


Still failing...

../../gcc-2.95.3/gcc/frame                                                                               │ #define TOOLDIR_BASE_PREFIX "/usr/local/"
../../gcc-2.95.3/gcc/frame.c:55: `__PTHREAD_SPINS' undeclared here (not in a function)                   │diff --git a/gcc-2.95.3/libio/config/mtsafe.mt b/gcc-2.95.3/libio/config/mtsafe.mt
../../gcc-2.95.3/gcc/frame.c:55: initializer element is not constant                                     │index 5848851..987a880 100755
../../gcc-2.95.3/gcc/frame.c:55: (near initialization for `object_mutex.__data.__gcc_295_workaround__.__s│--- a/gcc-2.95.3/libio/config/mtsafe.mt
pins')


rm ../gcc-2.95.3/glibc-workaround/include/bits/pthreadtypes.h
time make bootstrap CC="gcc -std=gnu89"

`if [ -f /data/gcc-build/gcc/../texinfo/makeinfo/Makefile ] ; then echo /data/gcc-build/gcc/../texinfo/ma│index 5848851..987a880 100755
keinfo/makeinfo ; else echo makeinfo ; fi`  -I../../gcc-2.95.3/gcc -o cpp.info ../../gcc-2.95.3/gcc/cpp.t│--- a/gcc-2.95.3/libio/config/mtsafe.mt
exi                                                                                                      │+++ b/gcc-2.95.3/libio/config/mtsafe.mt
/bin/sh: 1: /data/gcc-build/gcc/../texinfo/makeinfo/makeinfo: not found

Ok, seem the new patch does fix this one, I fixed with my previous solution.

Now

stage1/xgcc -Bstage1/ -B/opt/gcc-2.95.3/i686-pc-linux-gnu/bin/ -c  -DIN_GCC     -O2 -g -O2 -m32  -DHAVE_C│index 5848851..987a880 100755
ONFIG_H    -I. -I../../gcc-2.95.3/gcc -I../../gcc-2.95.3/gcc/config -I../../gcc-2.95.3/gcc/../include \  │--- a/gcc-2.95.3/libio/config/mtsafe.mt
  ../../gcc-2.95.3/gcc/gencheck.c                                                                        │+++ b/gcc-2.95.3/libio/config/mtsafe.mt
cc1: Invalid option `32'                                                                                 │@@ -1,2 +1,2 @@
Makefile:1790: recipe for target 'gencheck.o' failed                                                     │ # tell we want the mt-safe version
make[2]: *** [gencheck.o] Error 1                                                                        │-MT_CFLAGS = -D_IO_MTSAFE_IO
make[2]: Leaving directory '/data/gcc-build/gcc'                                                         │+MT_CFLAGS = -D_IO_MTSAFE_IO -D__extern_inline='extern __inline' -I${srcdir}/../glibc-workaround/include
Makefile:3267: recipe for target 'bootstrap' failed                                                      │diff --git a/gcc-2.95.3/libstdc++/config/linux.mt b/gcc-2.95.3/libstdc++/config/linux.mt
make[1]: *** [bootstrap] Error 2                                                                         │index 5848851..987a880 100755
make[1]: Leaving directory '/data/gcc-build/gcc'                                                         │--- a/gcc-2.95.3/libstdc++/config/linux.mt
Makefile:1472: recipe for target 'bootstrap' failed                                                      │+++ b/gcc-2.95.3/libstdc++/config/linux.mt
make: *** [bootstrap] Error 2





exit linux32 mode
 doesn't help

I then removed the -m32 added by the patch in Makefile.in


Now 

gencheck.o ` case "obstack.o" in ?*) echo obstack.o ;; esac ` ` case "" in ?*) echo  ;; esac ` ` case ""│
 in ?*) echo  ;; esac `  ` case "" in ?*) echo  ;; esac ` ` case "" in ?*) echo  ;; esac `               │INSTALL_DOSREL = install-dosrel-fake
/usr/bin/ld: cannot find crt1.o: No such file or directory                                               │
/usr/bin/ld: cannot find crti.o: No such file or directory                                               │AS = as
collect2: ld returned 1 exit status                                                                      │AR = ar
Makefile:1786: recipe for target 'gencheck' failed                                                       │AR_FLAGS = rc
make[2]: *** [gencheck] Error 1                                                                          │CC = cc
make[2]: Leaving directory '/data/gcc-build/gcc'                                                         │
Makefile:3267: recipe for target 'bootstrap' failed                                                      │# Special variables passed down in EXTRA_GCC_FLAGS.  They are defined
make[1]: *** [bootstrap] Error 2                                                                         │# here so that they can be overridden by Makefile fragments.
make[1]: Leaving directory '/data/gcc-build/gcc'                                                         │HOST_CC = $(CC_FOR_BUILD)
Makefile:1472: recipe for target 'bootstrap' failed                                                      │HOST_PREFIX =
make: *** [bootstrap] Error 2


Ok, forgot to back to linux32 mode 

linux32 bash
export LIBRARY_PATH=/usr/lib/i386-linux-gnu
time make bootstrap CC="gcc -I /data/gcc-2.95.3 -std=gnu89"


back to the same error

 /data/gcc-build/gcc/xgcc -B/data/gcc-build/gcc/ -B/opt/gcc-2.95.3/i686-pc-linux-gnu/bin/ -c -g -O2 -I. │# INSTALL_PROGRAM_ARGS is changed by configure.in to use -x for a
-I../../../gcc-2.95.3/libio -D_IO_MTSAFE_IO -D__extern_inline='extern __inline' -I../../../gcc-2.95.3/lib│# cygwin32 host.
io/../glibc-workaround/include -fpic ../../../gcc-2.95.3/libio/iogetline.c -o pic/iogetline.o            │INSTALL_PROGRAM_ARGS =
In file included from ../../../gcc-2.95.3/libio/iogetline.c:26:                                          │
../../../gcc-2.95.3/libio/libioP.h:38: bits/libc-lock.h: No such file or directory                       │INSTALL = $(SHELL) $$s/install-sh -c
In file included from ../../../gcc-2.95.3/libio/libio.h:167,                                             │INSTALL_PROGRAM = $(INSTALL) $(INSTALL_PROGRAM_ARGS)
                 from ../../../gcc-2.95.3/libio/iolibio.h:1,                                             │INSTALL_SCRIPT = $(INSTALL)
                 from ../../../gcc-2.95.3/libio/libioP.h:47,                                             │INSTALL_DATA = $(INSTALL) -m 644
                 from ../../../gcc-2.95.3/libio/iogetline.c:26:                                          │
../../../gcc-2.95.3/libio/../glibc-workaround/include/bits/stdio-lock.h:23: bits/libc-lock.h: No such fil│INSTALL_DOSREL = install-dosrel-fake
e or directory                                                                                           │
../../../gcc-2.95.3/libio/../glibc-workaround/include/bits/stdio-lock.h:31: #error libio needs recursive │AS = as
mutexes for _IO_MTSAFE_IO                                                                                │AR = ar
Makefile:264: recipe for target 'iogetline.o' failed                                                     │AR_FLAGS = rc
make[2]: *** [iogetline.o] Error 1                                                                       │CC = cc
make[2]: Leaving directory '/data/gcc-build/i686-pc-linux-gnu/libio'                                     │
Makefile:1364: recipe for target 'all-target-libio' failed                                               │# Special variables passed down in EXTRA_GCC_FLAGS.  They are defined
make[1]: *** [all-target-libio] Error 2                                                                  │# here so that they can be overridden by Makefile fragments.
make[1]: Leaving directory '/data/gcc-build'                                                             │HOST_CC = $(CC_FOR_BUILD)
Makefile:1472: recipe for target 'bootstrap' failed                                                      │HOST_PREFIX =
make: *** [bootstrap] Error 2

Gave up!!!!



Try to get working binary directory:
I found the deb version from:



ennng@fengUbuntu:~/deb$ sudo apt install ./gcc_2.95.2-13.1_i386.deb
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'gcc:i386' instead of './gcc_2.95.2-13.1_i386.deb'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 gcc:i386 : Depends: libc6:i386 (>= 2.1.2) but it is not installable
            Depends: cpp:i386 (>= 1:2.95.2-10) but it is not installable
            Depends: cpp:i386 (< 1:2.95.3) but it is not installable
            Depends: binutils:i386 (>= 2.9.5.0.12) but it is not installable
            Recommends: libc-dev:i386 but it is not installable
E: Unable to correct problems, you have held broken packages.




I tried the following compiling sequences:

4.3.2 build 2.95.2 --- failed

4.3.2->3.3.6->2.7.2.3 --- success.

4.3.2 -> 2.7.2.3 --- success

3.3.6 -> 2.95.2 --- failed


Tried the following method and get gcc-3.4 installed successfully on ubuntu docker.

https://askubuntu.com/questions/39628/old-version-of-gcc-for-new-ubuntu

edit

/etc/apt/sources.list

for breezy, dapper, edgy, feisty, gutsy, hardy etc

    deb     http://old-releases.ubuntu.com/ubuntu/ hardy universe

    deb-src http://old-releases.ubuntu.com/ubuntu/ hardy universe

apt update

    apt install gcc-3.4


root@072407a24838:/# gcc-3.4 -v

Reading specs from /usr/lib/gcc/x86_64-linux-gnu/3.4.6/specs

Configured with: ../src/configure -v --enable-languages=c,c++,f77,pascal --prefix=/usr --libexecdir=/usr/lib --with-gxx-include-dir=/usr/include/c++/3.4 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --program-suffix=-3.4 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug x86_64-linux-gnu

Thread model: posix

gcc version 3.4.6 (Ubuntu 3.4.6-6ubuntu3)

root@072407a24838:/#


Successfully got gcc-3.4 installed. But it doesn't seem to work well becuase a lot of dependent libs are missing.



docker pull lpenz/debian-etch-i386 

apt-get update && apt-get install gcc-2.95 

41bc3f4f5cb1:/# gcc-2.95 -v

Reading specs from /usr/lib/gcc-lib/i486-linux-gnu/2.95.4/specs

gcc version 2.95.4 20011002 (Debian prerelease)

Success.


Other Refs:



--
Feng

其它博客地址

此博客的同步博客地址: http://fengnz.wordpress.com
这里进入我的MSN SPACE.