FastDFS图片服务器(分布式文件系统)学习。
参考:https://blog.csdn.net/hiqingtian/article/details/79413471
https://blog.csdn.net/sinat_40399893/article/details/80548374
1、什么是FastDFS。
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
2、FastDFS架构
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。
如下图:
2.1、Tracker 集群。
FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。
2.2、Storage集群。
Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。
2.3、Storage状态收集。
Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。
2.4、文件上传流程。
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
a、组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
b、虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
c、数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
d、文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
2.5、文件下载流程。
tracker根据请求的文件路径即文件ID 来快速定义文件。
比如请求下边的文件:
a、通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。
b、存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。
3、FastDFS+Nginx实现文件服务器。搭建小型的,简单的fastdfs图片服务器,不是高可用的。
aaarticlea/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAABE8AAAKkCAYAAADx8RFsAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElEQVR4nOzdeZiXdb3/8dfMwAAjILHIpqBCLhhuKIimuR6ztERN0aP+8KinNJcyE1xaDFPzqGF59GTmrkesTCEW9wWXXHAJ9wAFxEAQEBEFZvn9wWFyhLkZFB3Ax+O6znUx931/7/v9reTA0/v+3CU1NTU1AQAAAGCFSht7AAAAAIA1mXgCAAAAUEA8AQAAACggngAAAAAUEE8AAAAACognAAAAAAXEEwAAAIAC4gkAAABAAfEEAAAAoIB4AgAAAFBAPAEAAAAoIJ4AAAAAFBBPAAAAAAqIJwAAAAAFxBMAAACAAuIJAAAAQAHxBAAAAKCAeAIAAABQQDwBAAAAKCCeAAAAABQQTwAAAAAKiCcAAAAABcQTAAAAgALiCQAAAEAB8QQAAACggHgCAAAAUEA8AQAAACggngAAAAAUEE8AAAAACognAAAAAAXEEwAAAIAC4gkAAABAAfEEAAAAoIB4AgAAAFBAPAEAAAAoIJ4AAAAAFBBPAAAAAAqIJwAAAAAFxBMAAACAAuIJAAAAQAHxBAAAAKCAeAIAAABQQDwBAAAAKCCeAAAAABQQTwAAAAAKiCcAAAAABcQTAAAAgALiCQAAAEAB8QQAAACggHgCAAAAUEA8AQAAACggngAAAAAUEE8AAAAACognAAAAAAXEEwAAAIAC4gkAAABAAfEEAAAAoIB4AgAAAFBAPAEAAAAoIJ4AAAAAFBBPAAAAAAqIJwAAAAAFxBMAAACAAuIJAAAAQAHxBAAAAKCAeAIAAABQQDwBAAAAKCCeAAAAABQQTwAAAAAKiCcAAAAABcQTAAAAgALiCQAAAEAB8QQAAACggHgCAAAAUEA8AQAAACggngAAAAAUEE8AAAAACognAAAAAAXEEwAAAIAC4gkAAABAAfEEAAAAoIB4AgAAAFBAPAEAAAAoIJ4AAAAAFBBPAAAAAAqIJwAAAAAFxBMAAACAAuIJAAAAQAHxBAAAAKCAeAIAAABQQDwBAAAAKCCeAAAAABQQTwAAAAAKiCcAAAAABcQTAAAAgALiCQAAAEAB8QQAAACggHgCAAAAUEA8AQAAACggngAAAAAUEE8AAAAACognAAAAAAXEEwAAAIAC4gkAAABAAfEEAAAAoIB4AgAAAFBAPAEAAAAoIJ4AAAAAFBBPAAAAAAqIJwAAAAAFxBMAAACAAuIJAAAAQIEmjT0AAKw+f2zsAQBoBIsXL85777VLu3Zfb+xRgHWUO08AAIC13pQpD+edd8Y29hjAOko8AQAA1gE1AgrwmRFPAACAdYSAAnw2xBMAAGAdIqAAq594AgAArGMEFGD1Ek8AAIB1kIACrD7iCQAAsI4SUIDVQzwBAADWYQIK8OmJJwAAwDpOQAE+HfEEAAD4AhBQgE9OPAEAAL4gBBTgkxFPAACALxABBVh14gkAQD1qahp7gjVDdXVNHnzwH6mqqm7sUWA1EVCAVdOksQcAAFgTzZq1IIMH/yUHHNA7AwZsW7t98eLKVFY2PCJUVJSvcHtVVXWmTJmT1157O/PmLczAgTvkjjueb9A5e/TokN69uyRJ5s//MM8//+Zyx2y6aft07dom//znu5k9+/2VnnOjjb6UNm1arHDf8OHjc/HF9+ZHP9orRxyxY4NmXJE33nin3n0dO7ZOixZNM3/+h5kzZ8XzlpSUpHv3tp/4+lDX0oCSJO3afb2RZwHWdOIJAMAKtG7dPAsWLMpFF92TXr06Z/PNOyZJTjvtz3n88dcbfJ7x44ckSSZNmp1bbnkqs2a9lzffnJfp0+fVRpiNNvpSBg7cIUOHjmnQOQ8/fIfaeDJ58uz84Ad/Wu6YH/xgjxx1VL/cfPNT+d//fXql5/zVrw7M3ntvsdz26dPn5corx6WiojwtWzbL6NEvrvRcLVs2y2679ayzraqqOgcf/Pt6PzNs2CHZddeeuf325/Lb3z64wmNKS0vy1FODV3p9aDgBBWgY8QQAYAWaNWuS88//do466roMGXJHbr75mFRUlOfQQ/tk1117rvwEH9O+/Xp588156dixVZo2LcuUKXPyy19+K337bpy2bStqjzvyyL754Q/3rPc8ffpcuMLtv/vd4enVq3OSZNddL11u/403Dlrh5157bWaGDh2TVq2aL7dv8eLK/PjHf8n77y9Kkpx77uh65/qo7t3bLhdPljnjjH1y2GF9an+eNm1uDjzwd3WOKS8vy+OP//hj8z+R3/zmwQZdny+e8vLybL/99p/iDFWrbRZg3SSeAADUo2fPDvne93bNb37zYH73u0fywx/uWW8UWJn112+R3/3u8CTJvfe+kgcf/Ee22qpznXDyaTRr1rTeR4SSpFevTivc/uabc/9vvrrxpLKyOoMH35F//OPtdOjQMhUV5bn66iPrnXfGjPk55ZTbMmnS7Bx1VN9P+C0AYM0kngAAFDjqqH6prKzOwIF9Vn7wWmDKlDlZb73ytGrVPPPmLczw4eNTXl6W7t3b1R6zZElVzjlnZB5+eGLOPHPf9OnTLf/xHzfmP/7jxgwbdkg23rhdnXM+8MBrGTp0TBYsWJSf/GS/HHjgNvVef86c9+usfTJjxvzljqmpWX59lLlzP/ikXxkAPjXxBACgQGlpSY49dudPfZ5Jk2bl9deXBoEJE95Kkjz22OS0a7dektSuN3LTTU/mppue/NTXq89llz2Qhx76R51tJ5ywW1q0aJpk6QK0P/rRn/PMM9Ny8sm755BDtkuS/M//HJ5TTvlj/v3fr8tJJ30thx66faZNm5vf/ObBPPTQP9KpU+tcfPFB2X77jQqvf/XVj+Xqqx8rPGbJkqoVro9SWlqyKl8VAFYb8QQAoAGqqqrTt+9Fn+iz1113dB588LVcd93f6my/6KJ7an+9bGHZnXbaJPvss/zCrcvUt6jsoEE3NGiW//f/+qVv342zeHFlyspK07t3l2y9ddfa/YsWVWbevA9y9tlfz0EH/estQ5tv3jE33TQo5547KhdffG9uuOGJzJ69IKWlJTnyyL75z//cJeut16ze65aUlGSDDVrlxBN3ywEH9K7d/s477+f888dm+vR38z//My6dO6+fvffeImecsU+GDLkjBx64Tb75za/krrtezp///GyDviMArG7iCQDAx9xyy1O55JL7an8+9NDtc8YZ/5YTTtitdtsjj0zMhAlv1dl25ZUPZ6utOme33b5c53wdO7bK97//tZx44tJjjzrq+rz66szcfvt/ZsMN29Qet99+W+WrX+2Rr3+9V72zPf301NqFYT/qggu+nc022yBJCt9qs802G2abbTasd3+HDi3zv//7H2nSpLTO9tdffyf33/9q3n77vSTJrFnvpaZm6cK6b7/9Xh5+eGK23XbDdO68/grPW1pakjFjvr/c9nbt1ssllxycSy65L3fc8Xzuv//UfPvbW+fDD5ekf/9Nc+GFd+exxybnl7/8Vvbdd8t65waAz5J4AgDwMV/5SpfaR3X+8Ielj5iUlCTHHfevx3dmz16Ql16aUWfblVc+nC226FhnW10lmTlzfl59dWaSpUGhrGxppHj00cm1cWDcuIn1zlZfQOjcef3l1iL5qPre0rPMv/3blrnggm8vnbJk6WNGEya8leefn54nn3yjdm2SXr06ZfDgf8vXv94rL7zwVv785+fy4IOv5e67X06StG1bkU02aZ+NNvpS2rdvma226pxddtm0wXft7LTTfy23bezYlzJ27Eu1P99yyzG1r44GgM+DeAIA8DFbb9219lGWZfHk4xYvrkyzZqv+R6kxY/4VAS6//KFst92GGThwh5x++p+zeHHDX5e67DGfhvrjH4/Lv//7dTnmmJ3yb//2rwDz3HNvZujQMbV3wPz0p3/N3Xe/nCVLls7SqlXzbLfdhjn66H7Zffcv5ze/eTCLFi1J69bNs/POm2bnnTfNwoWL87e/vZ6nn56a5557M88992bGj5+akpLk6quPTGlpaYYOPWCFcy1cuDhXXPFwPvhgcY46ql/+8IfHstVWnTNw4A71fpf67m4BgM+KeAIA8Am8++6HWW+9+l8NvCI1Nclf/vJcttyyU15+eUZmzXovF198bzp0aJWxY09KTU3d4y+44K7ce+8rue++Uz/1vJtu2j5bbtkpU6bMqXOHyl/+8nyS5KtfXfoK5oMO2jbrrVeeLbbolF69OqVHjw61C7UuXLg4Y8e+lNat677WuKKiPHvuuXn23HPzJEsXfJ06dW7mzVuYbbdd+ojQN76xVZ3PvPHGO7nnnlfyxz8+k8WLK3PBBd/O7rtvlpYtm+W3v30wI0b8Pccdt3O2376bhWIBaHTiCQDAJzBp0qxssEGrwmMWLFiUyy57IP/xH/3TufP6ue++V/LWW+/m1FO3z8svz8jZZ++X888fm5/8ZGT++Mfj0rVrmzqfb9q0LEnSpk2Llc7TkAVjv/rVHrnmmseycOHiVFSUp7KyOqNHv5Du3dvW3mmz7bYbZtNN2+fOO5/P3/72ev72t9drP7/sdcHTp8/LjTc+Ue91unRpk7322rz252nT5mbSpNl5/fXZeeWVmZkwYXpmznwvzZo1yX77bZXjjtu59m6So4/ul2222TD//d8P5bvf/d+0bVuRrbfumu7d26Vdu/VSUdE0PXp0qLPILQB81sQTAIBV9Pzz0zNt2twcdVS/wuPmzl2Y229/Ljvu2D0bbNAqV131SHbdtWc6dWqdJCkvL8ullx6cv/71hXTt2iZvvfVunc9/8MGSJFlue2lpSe05av7vdpVf/erA9OzZIUn9C8buu++WufLKh3P77c/lyCP75o47ns+cOQvz3e/umpKP3NwxZ877GTbsgXq/16OPTs6jj06ud/+ee25eJ548+OBrGTbsgZSWlmSTTdpl5517pF+/jbPLLpumomL5u3e22aZrrrrqiEyZMicPPfSPPPvstNx110uZOXN+amqSP/zhyHqvDQCfBfEEAGAVLFy4OOefPzZNm5blkEO2W25/VdW/nr2ZOXPpIqtdu7bJLbc8lUmTZucnP/lG7fYkWX/9Fvn3f98xSXLAAVeu8Jof396iRdM88siP/m+epYFlo42+VLhg7LI59txz81x77ePZeedN87vfjcumm7bPgAHb1Dlu443brXBNlTPPvDP33fdq7r33lOUe3Vmmb9+L0qpV3VcWH3bYDtlhh+458sjrMmnS7EyaNDt/+ctzdY655JKDsvvumy33pqOP++tfT7DmCQCfO/EEAKCBZsyYnzPO+EsmTpyVH/5wzzqvGU6WPl7zyCOT8sc/PpOystKMGvVCKirK07Nnh4wa9UL23nuL9O7dpU48+aiP31Hx+98/mr/97fXltn90DZD585c+SlNfzPi4E0/cLQMHXpOjjro+lZVV+fWvD6l940+R119/J/fd92p23bVHvdd6//1FqaqqTuvWdR8zKi8vy5ZbdkqSHHNM/+y//1dq97399ns54YRblzvXn/98fJ2f//rXF3LttY8LJwA0CvEEAKAeEyfOSpJUVlanpiYZPPiOvPzyjJx88u458si+yx3//e9/LcOGPZALL7w7SdKxY6ucdda+adasSQ4/fIe0aNG08HrLFldd5ktfqljh9o964413UlZWutL1V5bp3r1tdtihWx57bHL69OmWXr06r/Qz7733YQYPviMlJcn3vrdrvce9887C/5u7/jVa2ratqHOHTHn5iv84+vG7aNq2rVjpnADwWRFPAABW4NFHJ2fIkDvStGlZRo6ckO222yjnn/+tvP32e9luu41W+JmDDto2Bx207Qr3bbTRlz6TOZ96amp69uzQoLtHliypyoUX3p3HHpucDTdsk/Hjp+b73x+en/3sG7VrqHzctGlzc8YZf8mkSbPy4x/vky9/eYN6z//mm3OTJB06NCzkAMDaQjwBAPiYe+55JWeddWc6d14/V1wxMBdccFd+8pOR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qU+fPtlhhx2y99575xe/+EXee++92mOW7e/Tp88Kz33yySfnhhtuqPP9VnSNxYsXr/4vBmuQ6urqnHbaaRk6dGieeeYZ4QTqUV1dnTfeeCNjxozJd77znTz55JONPRIAK+HOE2C1+fDDD3PiiSempqYmp59+enr37p3KyspMmDAhLVq0yJIlS2qP7dixY+64447Vdu2pU6fm1FNPzfDhw1NeXr7c/pEjR2bDDTfMyJEjc8QRRyy3f9y4cWnevHmmTJmSc889Nz/72c9y6aWXJkmuu+66DBo0KI8//vgKr/vss8/ml7/8ZaZMmfKpZl3Zd4A13YgRIzJu3Lj07NkzQ4YMyWabbZb11luvsceCNU5VVVVmz56d0aNH5/LLL895552X2267Lc2bN2/s0QCohztPgNXm8ssvz6JFi/K73/0uffr0SXl5eSoqKtKvX7907979M732u+++m6lTp65w3/z58/Pwww9nyJAhmThxYl599dUVHldaWppNNtkk3/3ud/PII4806K6Y4cOHZ7/99kvr1q0/9axF3wHWBqNGjUqSDBkyJNttt51wAvUoKytLx44dc8wxx2SXXXbJ9OnT8/zzzzf2WAAUEE+A1aKysjJ33nlnjj/++AbdNfHxR1wWL16ciy66KHvssUe++tWv5qyzzsqCBQvqHPvEE0/kiCOOyE477ZRDDz00L7/8cu35Bg0alCTp37//co/XjBkzJptsskn69++fHXfcMSNHjiycbdGiRWnRokVKS4t/i1y4cGFGjhyZgQMHrvT7flR9s65o+7Lv/uijj+aQQw5J//79c8opp3gcgjXS5MmTkySbbbZZI08Ca4+ePXsm+dc/PwCsmcQTYLWYOnVqFi5cmN69e3+iz5933nl55ZVXcuutt+avf/1r5s6dm0suuaTOMbfffnt+85vf5O67706nTp0ydOjQ2n3XXXddkuTxxx/P+PHj63xu5MiR+eY3v5kk+eY3v5mxY8emsrJyuRmqq6vz0ksv5Yorrshhhx220plHjBiRXr16pUePHqv0Xeubteg7jBgxIldddVXuvPPOzJ49O//1X/+1SteEz8OyqOeOE2i4ioqKJMncuXMbeRIAiognwGqxbD2TJk1WfSmluXPnZvTo0RkyZEg6duyYNm3a5Mgjj8x9991X57iTTjop7du3T+vWrTNw4MC89tprK320ZtKkSXn11Vfz9a9/PUmy55575sMPP8wjjzxS57hdd901/fr1yznnnJMBAwbkhBNOKDxvTU1NbrvtthXedbLrrrvWWWR22R0ln8YJJ5yQtm3bZoMNNsigQYPy8MMPf+pzAgAADWPBWGC16Ny5c0pKSjJx4sR630pTnxkzZqSmpiaHH374cvs+ushsu3btan/dqlWr1NTUpLKysvAxoREjRqSmpiYHH3xw7bZFixZl5MiR2X333Wu3jRs3rvbf/jXE448/niVLlmS33XZbbt/HzzVhwoRPHVA22GCD2l936NAhCxcuTHV19UofLQIAAD498QRYLVq3bp1+/frl+uuvX+V40rZt2yRLF5vs1KnTapupqqoqY8aMyY9+9KN87Wtfq93+97//PT/72c8+1S3St956aw499NDPLV4sWLCgNshMmTIlG2ywgXACAACfE3/yBlabwYMH58UXX8wZZ5yRiRMnpqqqKvPnz88DDzyQSZMm1fu5jh07Zvvtt8/FF1+cmTNnpqqqKq+99lqefPLJBl972dtunnvuucyfPz9J8thjj+Xdd9/N/vvvny5dutT+3z777JNWrVplzJgxn+h7Tps2Lc8++2wOPPDAT/T5Fc1atD1Z+iaj999/P1OmTMk111yTAw444BNdGwAAWHXiCbDadOvWLTfffHNatmyZk046KTvttFP233//3HzzzStdC+VXv/pVSktLc8ghh2SXXXbJz3/+89TU1DT42t27d89BBx2UU089tfYRnZEjR6Zfv35p1apVnWPLysqy9957r/StO8t89C04yb9eT/zx836aWYu2J8nWW2+dAw88MEcddVT69++f448//hNdGwAAWHUlNavytxM+U8sedfj4WzZYu5x55pm5++67c/7552ffffdt7HFYzRYuXJj99tsv11xzzSq/ZeeTWLZeyqquybIyfr/hs+B/V7Dqrr766lx55ZU59thjc+KJJzb2OAD1+qL/fmXNE4BVUFFRkYceeqixxwAAAD5HHtsBAAAAKODOE4A1WO/evT0CAQAAjcydJwAAAAAFxBMAAACAAuIJAAAAQAHxBAAAAKCAeAIA8AXWp0+ffPvb327sMQBgjeZtOwAAn7E+ffo06Dhv1wKANZN4AgAkSaqrqzNr1qx07NixsUdZ5xx66KF1fh49enQWLFiw3HYAYM0kngAASZLKysp84xvfSO/evbPXXntlzz33TNeuXRt7rHXC4MGD6/z82GOPZcGCBcttBwDWTOIJAFDHhAkTMmHChAwbNiybb7559tprr+y1117ZeOONG3u0L6zq6uqUlq79S9WtK98DgC8e/98LAKjXq6++miuuuCIHH3xwvvOd7+TKK6/Ma6+9lpqamsYebZ21bAHXGTNm5Pjjj8+OO+6Y3//+97X7x48fnxyrWzQAACAASURBVB/96EfZe++9069fv3zrW9/KTTfdtMJzvfTSSxkyZEj23Xff9O3bN3vttVeD7nYZO3Zs+vTpkwMOOCDvvPNOnX1//etfc8QRR6R///7Za6+9cs4552TmzJmr/D0AYG3izhMAoEEmT56cyZMn5+qrr85GG22UPffcM3vttVd69eqVkpKSxh5vnXPWWWeluro6BxxwQDp06FC7/YQTTkibNm3St2/flJeX56GHHsqvf/3rNG/ePIccckjtcXfeeWfOO++8JEnfvn3TpUuXzJw5Mw8++GDhdV988cWce+65ad26dX7729+mXbt2tfuGDRuWG2+8MV26dMk3vvGNvP322xk7dmyeeeaZ3HLLLWnTpk2DvwcArE3EE+AL59xzz82IESMae4w1QkPfAAIfN23atFx//fW5/vrr06lTp+y5556NPdI65Z///Gd69eqV888/f7kw9f3vfz9HHHFEmjZtmmRp7Dj66KNz++2318aTf/zjHzn//POz/vrr57e//W223HLLOueuz6xZs/KjH/0oSXLppZfWeVTrySefzI033pj+/fvn0ksvTXl5eZLkT3/6Uy644IJcd911+cEPftDg7wEAaxOP7QBfOE899VRjjwDrHH8xXr2qqqpywgknrPA/1//3//5fbThJkq222ipt27bNG2+8UbvtpptuSmVlZQYPHlwnnCRJ586dV3jNRYsW5bTTTsvs2bPzi1/8Itttt12d/cOHD09paWnOPvvs2nCSJAcddFBatGiRRx55ZJW+BwCsTdx5AnxhjRw5Ml26dGnsMRrFsjtOxo8f38iTsCZZvHhx+vfv36BjN9poo9o38ix7bOfmm2/+jCf84lh//fXTrVu3Fe6rrKzM3/72t7zwwguZNm1apk6dmnfffTdVVVW1xzz99NNp1qxZ9thjjwZf8xe/+EVeeuml/PCHP8w+++yz3P6///3vadasWW644Ybl9pWUlGT69Omr9D0AYG0ingAADdKjR4/adU569uzpboLPUMuWLVe4/c0338zJJ5+cqVOnpkOHDtl0003zla98JW+++Wbmz59fe9zs2bPToUOHNGnSsD/qzZ49O/fcc09atWqVb3zjGys8Zlmgue222z719wCAtY14AgDUa4sttqh9VXH37t0be5wvjPrC1IUXXpipU6fmvPPOy3777Ve7/dFHH60TT5o1a5b58+enpqamQZGrffv2OeKII3LRRRflBz/4Qa666qo0b968zjEtWrRIixYtMnbs2E/9PQBgbSOeAAB1bL311tlrr72yxx57pGvXro09Dh/xzDPPpF27dnXCycKFC/P222/XOW7LLbfM008/nWeffTbbb799g8592GGHZeLEibn99ttz1lln5eKLL05p6b+Wx+vZs2eee+65zJgxI506dVo9XwgA1hIWjAUAkiRNmjTJ6NGjc+211+bII48UTtZAZWVlmT9/fmbNmlW77X/+53+yZMmSOscte+vOeeedl5kzZ9bZN3HixHrPP3jw4PTp0ycPPfRQLr744jr7lgWb888/P4sWLaqz78UXX8zUqVNX/QsBwFrCnScAQJKktLQ0HTt2bOwxKLDHHntk1KhROeqoo7Lzzjvn9ddfT1VVVTp37lznFcT77LNPnnjiifzlL3/JgAED0r9//7Rt2zZTpkzJM888k6effnqF52/SpEkuuuiiHH300Rk+fHg6d+6co446KkkyYMCA3HXXXXn00UfzrW99K/369UvTpk3z2muv5aWXXspVV11lcVgA1lnuPAEAWEsMHjw4+++/fz744IPcc8892WCDDXLZZZelrKxsuWPPOeecnHvuudl8883zxBNPZMSIEZkzZ06OO+64wmu0adMmv/71r1NRUZHLLrss9957b5Kld71cfvnlOf7441NRUZG77rord999d5o0aZIzzzwz22677WfynQFgTeDOEwCAz9mdd95Z776iV4ivt956Offccxt8vv333z/7779/4Swrul6PHj0ybty45bY3a9Ys3/ve9/K9732v8Jz1nRcA1lbuPAEAAAAoIJ4AAAAAFBBPAAAAAAqIJwAAAAAFxBMAAACAAuIJAAAAQAHxBAAAAKCAeAIAAABQQDwBAAAAKCCeAAAAABQQTwAAAAAKiCcAAAAABcQTAGC1KC1d+seKqqqqRp4E1h7L/nlp0qRJI08CQBHxBABYLbp165YkmT17diNPAmuPOXPmJPnXPz8ArJnEEwBgtdhyyy2TJKNHj27kSWDtsGDBgjz44INJks0337xxhwGgkPsDAYDV4oQTTsj999+fyy+/PM8++2x69uyZioqKxh4L1jhVVVWZM2dOHnzwwcyePTsDBgzIJpts0thjAVBAPAEAVouuXbtm2LBhOe+88/Loo4/m0UcfbeyRYI03YMCAnHbaaY09BgArIZ4AAKtN3759c9ttt+X555/P5MmTM3fu3MYeif9TXV1du6gvjatJkybp1q1bNt98c3ecAKwlxBMAYLVq3rx5+vXrl379+jX2KPyf0047LQ899FAuueSS7L777o09DgCsdfzrBwCAddy8efOSJDU1NY08CQCsncQTAIB13KxZs5Ikb731ViNPAgBrJ/EEAGAdVl1dXRtNRowY0cjTAMDaSTwBAFiH/f3vf6/99bI7UACAVSOeAACsw+67777aX7/77ruZPHlyI04DAGsn8QQAYB1VU1NTJ54kWe5nAGDlxBMAgHXUSy+9lJkzZ9bZJp4AwKoTTwAA1lErCiX/+Mc/MnXq1EaYBgDWXuIJAMA6qKamJvfee+8K991///2f8zQAsHYTTwAA1kGvvfZapk+fvsJ9Ht0BgFUjngAArIOK7i556aWX8s9//vNznAYA1m7iCQDAOqi+R3aWcfcJADSceAIAsI6ZPHly3njjjcJjrHsCAA0nngAArGMaEkaef/75zJo163OYBgDWfuIJAMA6pqF3lTzwwAOf8SQAsG5o0tgDAACwet1yyy11ft53330ze/bsHHPMMTnppJMaaSoAWHu58wQAAACggHgCAAAAUEA8AQAAACggngAAAAAUEE8AAAAACognAAAAAAXEEwAAAIAC4gkAAABAAfEEAAAAoIB4AgAAAFBAPAEAAAAoIJ4AAAAAFBBPAAAAAAqIJwAAAAAFxBMAAACAAuIJAAAAQAHxBAAAAKCAeAIAAABQQDwBAAAAKCCeAAAAABQQTwAAAAAKiCcAAAAABcQTAAAAgALiCQAAAEAB8QQAAACggHgCAAAAUEA8AQAAACjQpLEHAABgbfDHxh6AdcDMmQvTocNhKS1t3tijAKwSd54AAACfi/nzp2fy5P9OdfWHjT0KwCoRTwAAgM/N/PmzBRRgrSOeAAAAnysBBVjbiCcAAMDnTkAB1ibiCQAA0CgEFGBtIZ4AAACNRkAB1gbiCQAA0KgEFGBNJ54AAACNTkAB1mTiCQAAsEYQUIA1lXgCAACsMQQUYE0kngAAAGsUAQVY04gnAADAGkdAAdYk4gkAALBGElCANYV4AgAArLEEFGBNIJ4AAABrNAEFaGxNGnsAAADgi+HLX/7ypzzDu0mar45RAFaJO08AAAAACognAAAAAAXEEwAAAIAC4gkAAABAAfEEAAAAoIB4AgAAAFDAq4oBAOBj+vS5sN5948cPSZIsWVKVW299OqNHv5gpU+akuromnTu3zgUXfDtLllRn0KAbkiQlJUmbNhXZbbee+eEP90yrVsu/avfkk2/Ljjt2z9FH96tz7fHjh2TChLdW6VwArH7iCQAAfMyyQLIsXDz++OkpL//XH50//HBJTjxxeGpqanL66Xund+8uqayszoQJb6VFi/IsWfJhkmTcuNPSvHnTTJkyJ+eeOyo/+9moXHrpwXWuNXXq3Dz77LT88pffSpJcd93Rtdf8qIacC4DPhsd2AABgFV1++UNZtKgyv/vdEenTp1vKy5ukoqI8/fptnO7d29Y5trS0JJts0i7f/e6ueeSRSamurqmzf/jwp7PffluldeuV30WysnMB8NkQTwAAYBVUVlbnzjv/nuOP3yXl5WUN/tyiRZVp0aJpSktLarctXLg4I0e+kIEDd1ilGVZ0LgA+Ox7bAQCAVTB16pwsXLg4vXt3adDx1dU1eeWVmbniiody2GF96uwbMWJCevXqlB492n/qcwHw2RFPAABgFSxZUpUkadJk5Tdx77rrpSktLclGG30p3/nO9nXuMKmpSW67bXxOOWWPBl236FwAfLbEEwAAWAWdO6+fkpJk4sRZ6dOnW+Gx48adloqK8hXue/zxyVmypCq77dazQdctOhcAny1rngAAwCpo3bp5+vXbJNdf/8SnOs+tt47PoYdub90SgLWAeAIAAKto8OB/y4svvpUzzvhLJk6claqq6syf/2EeeOC1TJo0e6WfnzZt6euJDzxwm89hWgA+LfEEAABWUbduX8rNNx+Tli2b5aSThmennf4r++9/ZW6++akGrYUyfPj47Ldfr7RqtfzriQcNuiFJ0r//xat9bgA+GWueAABAPXr37pLx44escF+nTq3z059+o97P1ve5pa8nnpBrrjmqQZ8rmgGAz4d4AgAAn6OKivI89NAPG3sMAFaBx3YAAAAACognAAAAAAXEEwAAAIAC4gkAAABAAfEEAAAAoIB4AgAAAFBAPAEAAAAoIJ4AAAAAFBBPAAAAAAqIJwAAAAAFxBMAAACAAuIJAAAAQAHxBAAAAKCAeAIAAABQQDwBAAAAKCCeAAAAABQQTwAAAAAKiCcAAAAABcQTAAAAgALiCQAAAEAB8QQAAACgQJPGHgAAgLXBAY09ACQpb+wBgC8o8QQAgAZo3tgDAECj8dgOAAAAQAHxBAAAAKCAeAIAsI6rrq5u7BEAYK0mngAArOPmzJnT2CMAwFpNPGGNcNttt2XevHkNPv7DDz/MiSeemLfeeqveY6699tp6z3nEEUes8owAsLb7yle+0tgjAMBaSTz5AliyZEluvPHGHH744dl5552z0047ZcCAAXnllVcyYcKE9OnTJwsXLszMmTNz4IEHNsqtvW+99VauuuqqBh/fvHnzbLHFFrn88svrPeb999/Pr3/969qfTznllNpfz5gxo/bX3//+91dxWgBYO+2+++6NPQIArJW8qngdt+wOjZqampx++unp3bt3KisrM2HChLRo0SJLliypPbZjx4654447Vtu1p06dmlNPPTXDhw9PeXl57fYdd9wxm2yySZKksrIyZWVlKSkpSZIceuihtce9/vrreeqpp2p/7t+/f1q2bFnnGjU1Ndlnn31qf16wYEEeffTRlJaW5thjj83QoUNTXV2d0tLSTJ48eYVz1rcdAAAAEvFknXf55Zdn0aJFufbaa2sDRnl5efr165ckmTBhwmd27XfffTdTp05dbntFRUVuu+221NTU5Oc//3k23HDDHH/88csd97Wvfa3Oz4sXL87YsWNTVlZW7zX79OmTmpqaOhFm4MCBOfnkk9OqVascfvjhSZaGomW/BgAAgCLiyTqssrIyd955Z4YOHVrnzo/6TJgwIYMGDcq4ceNSUVGRxYsXZ9iwYRkzZkyWLFmS3XbbLWeddVZatmxZe+wVV1yRyy67LJMnT063bt1y7rnnZsstt0ySDBo0KMnSO0aSZPz48UmSc845J4sXL87QoUMzZsyYbLrpprnnnntq55g1a1Y6d+6cM8888xN/93PPPTdf/vKX06RJkzz44IPZdddds+uuu67w2D//+c+f+DorM3To0M/s3Hxy//znPxt7BAAAYC0inqzDpk6dmoULF6Z3796f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n//85xx66KEf5YgAwC4QTwCAJMn8+fNz/fXXp2PHjhk2bFiGDh2aI444Qkj5HzzzzDNp3759g3CSJB06dPjI56mtrU2zZi55BwC7SzwBAOpZsWJF7rrrrtx1113p3LlzhgwZkiFDhqRfv35eeO+mqqqqrFmzJmvXrs1+++23w/0GDBhQd3vJkiV1Hz///PP19nvssccyefLkvPzyy3nvvffStWvXnH766Tn33HPTvHnzBvd56KGH5s4778x3v/vdzJkzJ5deemkuv/zyuvueOHFi5s6dm3Xr1qVjx445++yzc8EFFzSY73e/+12mTJmS119/Pa1bt86JJ56Yq666KoMHD86hhx6aadOm1dv/oYceysSJE/P666+npqYmgwYNyujRo9OxY8fd+wYCQCMhngAAO/TPf/4z9913X+677760b98+gwcPztChQ9O/f/8GL9Zp6MQTT8zvf//7XHnllbnhhhvStWvX7e539tlnJ0kmT56ctm3bZtiwYQ32GTduXO69997sv//+OeGEE1JdXZ1nn302t912W1588cXccsst2z1K6Prrr09tbW1OP/30tG/fvm591KhROeCAA3LMMcekRYsW+dOf/pTbbrstrVq1yplnnlm3309+8pNMmjQp++23XwYPHpzq6uo8+eSTWbBgwXYfy7Y5O3funGHDhuWNN97II488khdeeCETJ07MAQccsFvfQwBoDMQT4GNr0aJFee211yo9RkV93B8/9a1YsaK4feXKlZk8eXImT56cfffdN8ccc0yOO+64nHrqqdlnn30+oin3Ltdcc01ee+21zJs3L2eddVaGDx+eSy65pF7ESJIxY8Yk2RpPDjjggLqPt3nqqady7733pnfv3rnjjjvqjmLZtGlTRo8enVmzZmX69Ok57bTT6n3esmXLcuSRR+amm25qEFa++tWv5rzzzqv7t5s/f34uvPDCTJ06tS6ePPPMM5k0aVJ69uyZO++8MwceeGCS5J133snXvva1Bo/32Wefzb333ptBgwbl1ltvTYsWLZIk999/f370ox/l7rvvzje+8Y0P9L0EgEoST4CPtW3/2/tx9XF//Hxw69aty8yZMzNz5syMGzcun/3sZys9UqN04IEH5te//nV++ctf5r777suUKVMybdq0XHTRRbn00kt3+eidKVOmJNkaWf7z9J+WLVvmmmuuyXnnnZcHH3ywQTzZvHlzRo0atd0jUr785S/X+/ioo45Ku3btsnDhwrq1be/6881vfrMunCRJmzZtMmbMmJx//vn17mPSpElp1qxZxo4dWxdOkmTEiBEZN25cnnzySfEEgL2SeAJ87HTu3DnHH398li9fXulRKmbbESc9e/as8CQ0JuvXr9/p0SfbM3To0AwdOjQPPfTQhzDV3q9FixYZNWpUzjrrrNx111357W9/mwkTJmTOnDm5/fbb60WGHZk3b15qampy9NFHN9jWu3fvtG3bNq+88kqDbfvvv/8OTxV6//338/TTT+evf/1r/vGPf2Tx4sVZs2ZNNm/eXO/rtmrVKp/+9KcbjzYpcQAADBdJREFUfP7hhx/eYO0vf/lLWrZsmXvuuafBtqqqqixdurT4OAGgsRJPgI+dFi1a5Oc//3mlx6iobRejnDx5coUnoTGZMWNGrr/++p3ud/DBB9dd++RTn/qUa5/sooMPPjjXXnttzjrrrFx99dV1p7hccsklO/3cNWvWpGPHjjt856N99903b7zxRoP1tm3bbnf/JUuWZPTo0Vm8eHHat2+fHj16pG/fvlmyZEnWrl1bt9+bb76Z9u3bb/dCwdtb2xZfPLcA0NSIJwDATh1yyCF1R5h4153/Tffu3XPTTTfl/PPPz6xZs3YpnrRp06Ze1Phv69aty/77799gfUex5eabb87ixYtz44035pRTTqlbnz17dr2vU11dnXfeeWe797Fhw4YGa61bt07r1q3zyCOP7HBWANgbiScAwHZ17do1Q4YMydChQ9OnT58dvhBn93Xv3j3J1lNn/tuWLVsarPXp0yfPPPNM5s+fn6OOOqretldffTXr16/frevOvPDCCznooIPqhZMNGzY0OHqle/fuefnll/P3v/89vXv3rrftueeea3C/vXr1ypw5c7J8+fIccsghuzwPADR2/tsIAKjTs2fPjBw5MpMmTcrUqVMzevToHHnkkcLJB3TzzTfnzTffbLC+7UKs/fv3r7deU1OT1atX57333qu3PmLEiCTJj370o6xbt65u/d13383PfvazJLt3AejmzZtn7dq1WblyZd3aHXfc0eDrnnzyyUmSH//4x9m4cWPd+htvvJFbb721wf1uizE33XRTNm3aVG/b/Pnzs3jx4l2eEQAaE0eeAABJtl749XOf+1ylx2hSpkyZkqlTp6Zv377p3r17qqqq8sorr+Rvf/tbunTpkksvvbTe/kcffXSefvrpXHbZZWnXrl1doDjppJNy+umn58EHH8wZZ5yR4447Ls2bN8+zzz6bFStW5IILLsixxx67y3MNHjw406dPz5e+9KUcd9xxef3117N58+Z06tQpy5Ytq9vvvPPOy4wZMzJ37twMHz48xx57bDZt2pQnn3wyw4YNy/33318vrA0fPjwzZszI7Nmz84UvfCEDBw7MPvvsU/eYJ0yYsMML2AJAY+bIEwAgydbrW7BnXXvttfnMZz6TpUuX5sEHH8yMGTOyefPmjBw5MhMnTky7du3q7f+tb30rRxxxRF566aUGR2l8//vfz9ixY9OpU6fMnDkzjz32WDp27Jj/+7//y1VXXbVbc40ZMyannXZaNm7cmEcffTQdOnTI7bff3uDivy1atMidd96Zs88+O1u2bMnDDz+cl156KSNHjsw111xTt882zZs3z/jx43PZZZelpqYmM2bMyB/+8IdUV1fn29/+dj75yU/u1pwA0Fj4KwkA4ENyzjnn5Jxzztnl/bt165bf/OY3291WVVWVESNG1J3CszPPP//8Dre1adMmP/jBDxqsT5s2rcHafvvtlzFjxmTMmDH11re97fDBBx9cb71ly5a54oorcsUVV+zSnACwN3DkCQAAu+2Pf/xjkq2nGgFAUyeeAACwXYsWLcoLL7zQYH3u3LmZMGFCWrRokS9+8YsVmAwAPlpO2wEAYLuWL1+er3zlK+nWrVv69u2bffbZJwsXLszcuXNTVVWV733ve+nUqVOlxwSAD514AgDAdg0cOLB47RQA+Lhw2g4AAABAgXgCfKTmzZuXAQMGZMOGDdtdf/fddys0GQAAwPaJJ0CjtHjx4gwfPrxBTNnROgAAwIdFPAEapTVr1mTx4sW7vA4AAPBhEU+ARumiiy5KkgwaNCgDBgworm875Wf27Nk588wzM2jQoFx55ZV5++23P+qxAQCAJkg8ARqlu+++O0ny1FNP1Xunhx2tJ8kDDzyQCRMmZNq0aVm1alV++tOfflTjAgAATZi3KgYq4oQTTtjj9zlq1Ki0a9cuydYjVH74wx/u8a8BAAB8/IgnQEU88cQTqampqft43rx5dafkfFAdOnSou92+ffts2LAhtbW1adbMQXYAAMAH5xUF0GSsX7++7vaiRYvSoUMH4QQAAPifeVUBNEr77bdfkmTOnDlZu3btTteTZPz48XnnnXeyaNGi/OpXv8rpp5/+0Q0M1MXKzZs3V3gS2Hts+3mprnZAOEBj5lkaaJS6deuWESNG5Otf/3ratm2bRx99tLieJEcffXTOOOOMbNq0Kaecckouu+yySo0PH0tdu3bNwoULs2rVqnTs2LHS48BeYfXq1Um2/vwA0HiJJ8BHql+/fg3eJWdH62PHjs3YsWMb7Luj9WHDhuXMM8/cc8MCu6VPnz5ZuHBhHn744Vx88cWVHgcavfXr12fWrFlJkt69e1d2GACKxBMAYI8YNWpUHn/88YwfPz4vvvhievXqVe/C0MBWmzdvzurVqzNr1qysWrUqw4cPz2GHHVbpsQAoEE8AgD2iS5cuGTduXG688cbMnj07s2fPrvRI0OgNHz48V199daXHAGAnxBNgr7ejU4GAj94xxxyTyZMnZ+7cuVmwYEHeeuutSo8EjU51dXW6du2a3r17O+IEYC8hngAAe1SrVq0ycODADBw4sNKjAADsEd6qGAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxBAAAAKBAPAEAAAAoEE8AAAAACsQTAAAAgALxpBFp3bp1kmTTpk0VnoT/xbvvvpskadOmTYUngR3zfAMAwO7Y9jqnpqamwpNUhnjSiPTo0SNJsmTJkgpPwge1ZcuWLF26NEly2GGHVXga2DHPNwAA7I5tr3O2/R35cSOeNCKDBg1KkvziF7/I+vXrKzwNu6u2tjZTp07Nq6++mm7duqVTp06VHgl2yPMNAAC76rnnnstjjz2WNm3apF+/fpUepyKqtmzZsqXSQ7DVpk2bcu6552bRokVp2bJlOnXqlLZt21Z6LHbBe++9lxUrVuTtt99Os2bNMmHChPTv37/SY8EOeb4BAGBnNm/enFWrVmXlypVJku985zsZPnx4haeqDPGkkVm3bl3Gjx+f6dOnZ+PGjZUeh93QrFmz9OvXL2PGjEnv3r0rPQ7slOcbAAB2Rbdu3XLNNdfk+OOPr/QoFSOeNFK1tbVZtmxZVq9eXelR2AUtW7ZM9+7d06JFi0qPArvN8w0AANtTXV2drl27ejOMiCcAAAAARS4YCwAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQIF4AgAAAFAgngAAAAAUiCcAAAAABeIJAAAAQMH/A+84dHIdh6C/AAAAAElFTkSuQmCC" alt="" />
3.1、FastDFS--tracker安装。
3.1.1、tracker和storage使用相同的安装包,下载地址:http://sourceforge.net/projects/FastDFS/ 或https://github.com/happyfish100/FastDFS(推荐)。本教程下载:FastDFS_v5.05.tar.gz 。
3.1.2、FastDFS安装环境。
FastDFS是C语言开发,建议在linux上运行,本教程使用Centos6.4作为安装环境。
安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++。
[root@localhost ~]# yum install gcc-c++
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.njupt.edu.cn
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package gcc-c++.i686 :4.4.-.el6 will be installed
--> Processing Dependency: libstdc++-devel = 4.4.-.el6 for package: gcc-c++-4.4.-.el6.i686
--> Processing Dependency: libstdc++ = 4.4.-.el6 for package: gcc-c++-4.4.-.el6.i686
--> Processing Dependency: gcc = 4.4.-.el6 for package: gcc-c++-4.4.-.el6.i686
--> Running transaction check
---> Package gcc.i686 :4.4.-.el6 will be updated
---> Package gcc.i686 :4.4.-.el6 will be an update
--> Processing Dependency: libgomp = 4.4.-.el6 for package: gcc-4.4.-.el6.i686
--> Processing Dependency: cpp = 4.4.-.el6 for package: gcc-4.4.-.el6.i686
--> Processing Dependency: libgcc >= 4.4.-.el6 for package: gcc-4.4.-.el6.i686
---> Package libstdc++.i686 :4.4.-.el6 will be updated
---> Package libstdc++.i686 :4.4.-.el6 will be an update
---> Package libstdc++-devel.i686 :4.4.-.el6 will be installed
--> Running transaction check
---> Package cpp.i686 :4.4.-.el6 will be updated
---> Package cpp.i686 :4.4.-.el6 will be an update
---> Package libgcc.i686 :4.4.-.el6 will be updated
---> Package libgcc.i686 :4.4.-.el6 will be an update
---> Package libgomp.i686 :4.4.-.el6 will be updated
---> Package libgomp.i686 :4.4.-.el6 will be an update
--> Finished Dependency Resolution Dependencies Resolved ================================================================================================================================================================================================================================
Package Arch Version Repository Size
================================================================================================================================================================================================================================
Installing:
gcc-c++ i686 4.4.-.el6 base 4.3 M
Installing for dependencies:
libstdc++-devel i686 4.4.-.el6 base 1.6 M
Updating for dependencies:
cpp i686 4.4.-.el6 base 3.4 M
gcc i686 4.4.-.el6 base 8.2 M
libgcc i686 4.4.-.el6 base k
libgomp i686 4.4.-.el6 base k
libstdc++ i686 4.4.-.el6 base k Transaction Summary
================================================================================================================================================================================================================================
Install Package(s)
Upgrade Package(s) Total download size: M
Is this ok [y/N]: y
Downloading Packages:
(/): cpp-4.4.-.el6.i686.rpm | 3.4 MB :
(/): gcc-4.4.-.el6.i686.rpm | 8.2 MB :
(/): gcc-c++-4.4.-.el6.i686.rpm | 4.3 MB :
(/): libgcc-4.4.-.el6.i686.rpm | kB :
(/): libgomp-4.4.-.el6.i686.rpm | kB :
(/): libstdc++-4.4.-.el6.i686.rpm | kB :
(/): libstdc++-devel-4.4.-.el6.i686.rpm | 1.6 MB :
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 1.6 MB/s | MB :
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
Userid : CentOS- Key (CentOS Official Signing Key) <centos--key@centos.org>
Package: centos-release--.el6.centos..i686 (@anaconda-CentOS-.i386/6.4)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : libgcc-4.4.-.el6.i686 /
Updating : libstdc++-4.4.-.el6.i686 /
Installing : libstdc++-devel-4.4.-.el6.i686 /
Updating : libgomp-4.4.-.el6.i686 /
Updating : cpp-4.4.-.el6.i686 /
Updating : gcc-4.4.-.el6.i686 /
Installing : gcc-c++-4.4.-.el6.i686 /
Cleanup : gcc-4.4.-.el6.i686 /
Cleanup : libstdc++-4.4.-.el6.i686 /
Cleanup : libgcc-4.4.-.el6.i686 /
Cleanup : cpp-4.4.-.el6.i686 /
Cleanup : libgomp-4.4.-.el6.i686 /
Verifying : libgcc-4.4.-.el6.i686 /
Verifying : cpp-4.4.-.el6.i686 /
Verifying : libgomp-4.4.-.el6.i686 /
Verifying : libstdc++-4.4.-.el6.i686 /
Verifying : libstdc++-devel-4.4.-.el6.i686 /
Verifying : gcc-4.4.-.el6.i686 /
Verifying : gcc-c++-4.4.-.el6.i686 /
Verifying : libstdc++-4.4.-.el6.i686 /
Verifying : libgomp-4.4.-.el6.i686 /
Verifying : cpp-4.4.-.el6.i686 /
Verifying : libgcc-4.4.-.el6.i686 /
Verifying : gcc-4.4.-.el6.i686 / Installed:
gcc-c++.i686 :4.4.-.el6 Dependency Installed:
libstdc++-devel.i686 :4.4.-.el6 Dependency Updated:
cpp.i686 :4.4.-.el6 gcc.i686 :4.4.-.el6 libgcc.i686 :4.4.-.el6 libgomp.i686 :4.4.-.el6 libstdc++.i686 :4.4.-.el6 Complete!
[root@localhost ~]#
3.1.3、安装libevent。
FastDFS依赖libevent库,需要安装:yum -y install libevent
[root@localhost ~]# yum -y install libevent
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.njupt.edu.cn
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libevent.i686 :1.4.-.el6 will be installed
--> Finished Dependency Resolution Dependencies Resolved ================================================================================================================================================================================================================================
Package Arch Version Repository Size
================================================================================================================================================================================================================================
Installing:
libevent i686 1.4.-.el6 base k Transaction Summary
================================================================================================================================================================================================================================
Install Package(s) Total download size: k
Installed size: k
Downloading Packages:
libevent-1.4.-.el6.i686.rpm | kB :
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : libevent-1.4.-.el6.i686 /
Verifying : libevent-1.4.-.el6.i686 / Installed:
libevent.i686 :1.4.-.el6 Complete!
[root@localhost ~]#
3.1.4、安装libfastcommon。
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
将libfastcommonV1.0.7.tar.gz拷贝至/usr/local/下
cd /usr/local
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install
注意:libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
要拷贝的文件如下:
[root@localhost local]# tar -zxvf libfastcommonV1.0.7.tar.gz
[root@localhost libfastcommon-1.0.7]# ./make.sh
[root@localhost libfastcommon-1.0.7]# ./make.sh install
[root@localhost lib64]# cp libfastcommon.so /usr/lib
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
bin etc games include lib libexec libfastcommonV1.0.7.tar.gz sbin share src
[root@localhost local]# tar -zxvf libfastcommonV1.0.7.tar.gz
libfastcommon-1.0./
libfastcommon-1.0./HISTORY
libfastcommon-1.0./INSTALL
libfastcommon-1.0./README
libfastcommon-1.0./libfastcommon.spec
libfastcommon-1.0./make.sh
libfastcommon-1.0./src/
libfastcommon-1.0./src/Makefile.in
libfastcommon-1.0./src/_os_bits.h
libfastcommon-1.0./src/avl_tree.c
libfastcommon-1.0./src/avl_tree.h
libfastcommon-1.0./src/base64.c
libfastcommon-1.0./src/base64.h
libfastcommon-1.0./src/chain.c
libfastcommon-1.0./src/chain.h
libfastcommon-1.0./src/common_define.h
libfastcommon-1.0./src/connection_pool.c
libfastcommon-1.0./src/connection_pool.h
libfastcommon-1.0./src/fast_link_library.sh
libfastcommon-1.0./src/fast_mblock.c
libfastcommon-1.0./src/fast_mblock.h
libfastcommon-1.0./src/fast_task_queue.c
libfastcommon-1.0./src/fast_task_queue.h
libfastcommon-1.0./src/fast_timer.c
libfastcommon-1.0./src/fast_timer.h
libfastcommon-1.0./src/hash.c
libfastcommon-1.0./src/hash.h
libfastcommon-1.0./src/http_func.c
libfastcommon-1.0./src/http_func.h
libfastcommon-1.0./src/ini_file_reader.c
libfastcommon-1.0./src/ini_file_reader.h
libfastcommon-1.0./src/io_opt.c
libfastcommon-1.0./src/io_opt.h
libfastcommon-1.0./src/ioevent.c
libfastcommon-1.0./src/ioevent.h
libfastcommon-1.0./src/ioevent_loop.c
libfastcommon-1.0./src/ioevent_loop.h
libfastcommon-1.0./src/local_ip_func.c
libfastcommon-1.0./src/local_ip_func.h
libfastcommon-1.0./src/logger.c
libfastcommon-1.0./src/logger.h
libfastcommon-1.0./src/md5.c
libfastcommon-1.0./src/md5.h
libfastcommon-1.0./src/process_ctrl.c
libfastcommon-1.0./src/process_ctrl.h
libfastcommon-1.0./src/pthread_func.c
libfastcommon-1.0./src/pthread_func.h
libfastcommon-1.0./src/pthread_pool.c
libfastcommon-1.0./src/pthread_pool.h
libfastcommon-1.0./src/sched_thread.c
libfastcommon-1.0./src/sched_thread.h
libfastcommon-1.0./src/shared_func.c
libfastcommon-1.0./src/shared_func.h
libfastcommon-1.0./src/sockopt.c
libfastcommon-1.0./src/sockopt.h
[root@localhost local]# cd libfastcommon
libfastcommon-1.0./ libfastcommonV1.0.7.tar.gz
[root@localhost local]# cd libfastcommon-1.0./
[root@localhost libfastcommon-1.0.]# ls
HISTORY INSTALL libfastcommon.spec make.sh README src
[root@localhost libfastcommon-1.0.]# ./make.sh
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o hash.lo hash.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o chain.lo chain.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o shared_func.lo shared_func.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ini_file_reader.lo ini_file_reader.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o logger.lo logger.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o sockopt.lo sockopt.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o base64.lo base64.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o sched_thread.lo sched_thread.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o http_func.lo http_func.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o md5.lo md5.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o pthread_func.lo pthread_func.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o local_ip_func.lo local_ip_func.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o avl_tree.lo avl_tree.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ioevent.lo ioevent.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ioevent_loop.lo ioevent_loop.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o fast_task_queue.lo fast_task_queue.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o fast_timer.lo fast_timer.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o process_ctrl.lo process_ctrl.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o fast_mblock.lo fast_mblock.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o connection_pool.lo connection_pool.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o libfastcommon.so -shared hash.lo chain.lo shared_func.lo ini_file_reader.lo logger.lo sockopt.lo base64.lo sched_thread.lo http_func.lo md5.lo pthread_func.lo local_ip_func.lo avl_tree.lo ioevent.lo ioevent_loop.lo fast_task_queue.lo fast_timer.lo process_ctrl.lo fast_mblock.lo connection_pool.lo
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o hash.o hash.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o chain.o chain.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o shared_func.o shared_func.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ini_file_reader.o ini_file_reader.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o logger.o logger.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o sockopt.o sockopt.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o base64.o base64.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o sched_thread.o sched_thread.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o http_func.o http_func.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o md5.o md5.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o pthread_func.o pthread_func.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o local_ip_func.o local_ip_func.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o avl_tree.o avl_tree.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ioevent.o ioevent.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ioevent_loop.o ioevent_loop.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fast_task_queue.o fast_task_queue.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fast_timer.o fast_timer.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o process_ctrl.o process_ctrl.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fast_mblock.o fast_mblock.c
cc -Wall -D_FILE_OFFSET_BITS= -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o connection_pool.o connection_pool.c
ar rcs libfastcommon.a hash.o
[root@localhost libfastcommon-1.0.]# ./make.sh install
mkdir -p /usr/lib64
install -m libfastcommon.so /usr/lib64
mkdir -p /usr/include/fastcommon
install -m common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_bits.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h /usr/include/fastcommon
[root@localhost libfastcommon-1.0.]# cd /usr/lib64/
[root@localhost lib64]# ls
libfastcommon.so
[root@localhost lib64]# ll
total
-rwxr-xr-x. root root Aug : libfastcommon.so
[root@localhost lib64]# cp libfastcommon.so /usr/lib
lib/ lib64/ libexec/
[root@localhost lib64]# cp libfastcommon.so /usr/lib
lib/ lib64/ libexec/
[root@localhost lib64]# cp libfastcommon.so /usr/lib
[root@localhost lib64]# ls
libfastcommon.so
[root@localhost lib64]# ll
total
-rwxr-xr-x. root root Aug : libfastcommon.so
[root@localhost lib64]#
3.1.5、tracker编译安装
将FastDFS_v5.05.tar.gz拷贝至/usr/local/下
tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh
./make.sh install
安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下。
[root@localhost local]# tar -zxvf FastDFS_v5.05.tar.gz
[root@localhost local]# cd FastDFS
[root@localhost FastDFS]# ./make.sh
[root@localhost FastDFS]# ./make.sh install
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
bin etc FastDFS_v5..tar.gz games include lib libexec libfastcommon-1.0. libfastcommonV1.0.7.tar.gz sbin share src
[root@localhost local]# tar -zxvf FastDFS_v5..tar.gz
FastDFS/
FastDFS/tracker/
FastDFS/tracker/tracker_global.c
FastDFS/tracker/tracker_http_check.c
FastDFS/tracker/tracker_http_check.h
FastDFS/tracker/tracker_types.h
FastDFS/tracker/tracker_service.h
FastDFS/tracker/tracker_relationship.h
FastDFS/tracker/tracker_service.c
FastDFS/tracker/tracker_dump.h
FastDFS/tracker/tracker_func.c
FastDFS/tracker/tracker_dump.c
FastDFS/tracker/tracker_relationship.c
FastDFS/tracker/tracker_proto.c
FastDFS/tracker/tracker_nio.h
FastDFS/tracker/tracker_mem.c
FastDFS/tracker/tracker_mem.h
FastDFS/tracker/fdfs_shared_func.c
FastDFS/tracker/tracker_global.h
FastDFS/tracker/tracker_func.h
FastDFS/tracker/tracker_status.h
FastDFS/tracker/fdfs_shared_func.h
FastDFS/tracker/fdfs_trackerd.c
FastDFS/tracker/tracker_status.c
FastDFS/tracker/Makefile.in
FastDFS/tracker/tracker_proto.h
FastDFS/tracker/tracker_nio.c
FastDFS/make.sh
FastDFS/common/
FastDFS/common/linux_stack_trace.h
FastDFS/common/mime_file_parser.h
FastDFS/common/linux_stack_trace.c
FastDFS/common/mime_file_parser.c
FastDFS/common/fdfs_http_shared.c
FastDFS/common/fdfs_global.h
FastDFS/common/fdfs_global.c
FastDFS/common/fdfs_define.h
FastDFS/common/_os_bits.h
FastDFS/common/fdfs_http_shared.h
FastDFS/common/Makefile
FastDFS/INSTALL
FastDFS/test/
FastDFS/test/test_download.sh
FastDFS/test/dfs_func.h
FastDFS/test/test_upload.c
FastDFS/test/test_delete.sh
FastDFS/test/dfs_func.c
FastDFS/test/test_types.h
FastDFS/test/test_delete.c
FastDFS/test/common_func.h
FastDFS/test/common_func.c
FastDFS/test/dfs_func_pc.c
FastDFS/test/gen_files.c
FastDFS/test/combine_result.c
FastDFS/test/test_download.c
FastDFS/test/test_upload.sh
FastDFS/test/Makefile
FastDFS/conf/
FastDFS/conf/http.conf
FastDFS/conf/client.conf
FastDFS/conf/anti-steal.jpg
FastDFS/conf/storage_ids.conf
FastDFS/conf/mime.types
FastDFS/conf/tracker.conf
FastDFS/conf/storage.conf
FastDFS/fastdfs.spec
FastDFS/client/
FastDFS/client/fdfs_upload_file.c
FastDFS/client/fdfs_delete_file.c
FastDFS/client/fdfs_client.h
FastDFS/client/fdfs_upload_appender.c
FastDFS/client/fdfs_appender_test1.c
FastDFS/client/storage_client.h
FastDFS/client/tracker_client.h
FastDFS/client/client_global.c
FastDFS/client/test/
FastDFS/client/test/fdfs_monitor.c
FastDFS/client/test/fdfs_test.c
FastDFS/client/test/fdfs_test1.c
FastDFS/client/test/Makefile.in
FastDFS/client/storage_client1.h
FastDFS/client/fdfs_monitor.c
FastDFS/client/fdfs_file_info.c
FastDFS/client/storage_client.c
FastDFS/client/client_func.c
FastDFS/client/fdfs_appender_test.c
FastDFS/client/fdfs_append_file.c
FastDFS/client/fdfs_link_library.sh.in
FastDFS/client/fdfs_test.c
FastDFS/client/fdfs_download_file.c
FastDFS/client/tracker_client.c
FastDFS/client/fdfs_test1.c
FastDFS/client/fdfs_crc32.c
FastDFS/client/Makefile.in
FastDFS/client/client_func.h
FastDFS/client/client_global.h
FastDFS/init.d/
FastDFS/init.d/fdfs_trackerd
FastDFS/init.d/fdfs_storaged
FastDFS/stop.sh
FastDFS/README.md
FastDFS/php_client/
FastDFS/php_client/fastdfs_appender_test1.php
FastDFS/php_client/fastdfs_client.ini
FastDFS/php_client/fastdfs_callback_test.php
FastDFS/php_client/fastdfs_client.spec.in
FastDFS/php_client/fastdfs_test.php
FastDFS/php_client/fastdfs_test1.php
FastDFS/php_client/fastdfs_test_slave.php
FastDFS/php_client/README
FastDFS/php_client/config.m4
FastDFS/php_client/fastdfs_client.c
FastDFS/php_client/fastdfs_client.h
FastDFS/php_client/fastdfs_appender_test.php
FastDFS/restart.sh
FastDFS/COPYING-3_0.txt
FastDFS/HISTORY
FastDFS/storage/
FastDFS/storage/tracker_client_thread.c
FastDFS/storage/storage_func.c
FastDFS/storage/storage_service.c
FastDFS/storage/storage_ip_changed_dealer.h
FastDFS/storage/fdht_client/
FastDFS/storage/fdht_client/fdht_define.h
FastDFS/storage/fdht_client/fdht_global.h
FastDFS/storage/fdht_client/fdht_proto.c
FastDFS/storage/fdht_client/fdht_func.c
FastDFS/storage/fdht_client/fdht_proto_types.h
FastDFS/storage/fdht_client/fdht_func.h
FastDFS/storage/fdht_client/fdht_client.c
FastDFS/storage/fdht_client/fdht_global.c
FastDFS/storage/fdht_client/fdht_types.h
FastDFS/storage/fdht_client/fdht_proto.h
FastDFS/storage/fdht_client/fdht_client.h
FastDFS/storage/storage_sync.h
FastDFS/storage/storage_disk_recovery.c
FastDFS/storage/storage_func.h
FastDFS/storage/storage_global.c
FastDFS/storage/storage_dump.h
FastDFS/storage/storage_dump.c
FastDFS/storage/storage_dio.c
FastDFS/storage/storage_param_getter.c
FastDFS/storage/storage_nio.c
FastDFS/storage/trunk_mgr/
FastDFS/storage/trunk_mgr/trunk_sync.h
FastDFS/storage/trunk_mgr/trunk_sync.c
FastDFS/storage/trunk_mgr/trunk_free_block_checker.c
FastDFS/storage/trunk_mgr/trunk_free_block_checker.h
FastDFS/storage/trunk_mgr/trunk_mem.c
FastDFS/storage/trunk_mgr/trunk_shared.c
FastDFS/storage/trunk_mgr/trunk_mem.h
FastDFS/storage/trunk_mgr/trunk_client.c
FastDFS/storage/trunk_mgr/trunk_shared.h
FastDFS/storage/trunk_mgr/trunk_client.h
FastDFS/storage/storage_param_getter.h
FastDFS/storage/storage_sync.c
FastDFS/storage/storage_service.h
FastDFS/storage/storage_dio.h
FastDFS/storage/storage_nio.h
FastDFS/storage/storage_ip_changed_dealer.c
FastDFS/storage/fdfs_storaged.c
FastDFS/storage/storage_disk_recovery.h
FastDFS/storage/Makefile.in
FastDFS/storage/tracker_client_thread.h
FastDFS/storage/storage_global.h
[root@localhost local]# cd FastDFS
[root@localhost FastDFS]# ls
client common conf COPYING-3_0.txt fastdfs.spec HISTORY init.d INSTALL make.sh php_client README.md restart.sh stop.sh storage test tracker
[root@localhost FastDFS]# ll
total
drwxr-xr-x. users Dec client
drwxr-xr-x. users Dec common
drwxr-xr-x. users Dec conf
-rw-r--r--. users Dec COPYING-3_0.txt
-rw-r--r--. users Dec fastdfs.spec
-rw-r--r--. users Dec HISTORY
drwxr-xr-x. users Dec init.d
-rw-r--r--. users Dec INSTALL
-rwxr-xr-x. users Dec make.sh
drwxr-xr-x. users Dec php_client
-rw-r--r--. users Dec README.md
-rwxr-xr-x. users Dec restart.sh
-rwxr-xr-x. users Dec stop.sh
drwxr-xr-x. users Dec storage
drwxr-xr-x. users Dec test
drwxr-xr-x. users Dec tracker
[root@localhost FastDFS]# ./make.sh
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_proto.o tracker_proto.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_mem.o tracker_mem.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_service.o tracker_service.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_status.o tracker_status.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_global.o tracker_global.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_func.o tracker_func.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fdfs_shared_func.o fdfs_shared_func.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_nio.o tracker_nio.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_relationship.o tracker_relationship.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_dump.o tracker_dump.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/linux_stack_trace.o ../common/linux_stack_trace.c -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_trackerd fdfs_trackerd.c ../common/fdfs_global.o tracker_proto.o tracker_mem.o tracker_service.o tracker_status.o tracker_global.o tracker_func.o fdfs_shared_func.o tracker_nio.o tracker_relationship.o tracker_dump.o ../common/linux_stack_trace.o -L/usr/local/lib -lpthread -ldl -rdynamic -lfastcommon -I../common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_client_thread.o tracker_client_thread.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_global.o storage_global.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_func.o storage_func.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_service.o storage_service.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_sync.o storage_sync.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_nio.o storage_nio.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_dio.o storage_dio.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_ip_changed_dealer.o storage_ip_changed_dealer.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_param_getter.o storage_param_getter.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_disk_recovery.o storage_disk_recovery.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o trunk_mgr/trunk_mem.o trunk_mgr/trunk_mem.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o trunk_mgr/trunk_shared.o trunk_mgr/trunk_shared.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o trunk_mgr/trunk_sync.o trunk_mgr/trunk_sync.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o trunk_mgr/trunk_client.o trunk_mgr/trunk_client.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o trunk_mgr/trunk_free_block_checker.o trunk_mgr/trunk_free_block_checker.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../client/client_global.o ../client/client_global.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../client/tracker_client.o ../client/tracker_client.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../client/storage_client.o ../client/storage_client.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../client/client_func.o ../client/client_func.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fdht_client/fdht_proto.o fdht_client/fdht_proto.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fdht_client/fdht_client.o fdht_client/fdht_client.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fdht_client/fdht_func.o fdht_client/fdht_func.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fdht_client/fdht_global.o fdht_client/fdht_global.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_dump.o storage_dump.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_storaged fdfs_storaged.c ../common/fdfs_global.o ../tracker/fdfs_shared_func.o ../tracker/tracker_proto.o tracker_client_thread.o storage_global.o storage_func.o storage_service.o storage_sync.o storage_nio.o storage_dio.o storage_ip_changed_dealer.o storage_param_getter.o storage_disk_recovery.o trunk_mgr/trunk_mem.o trunk_mgr/trunk_shared.o trunk_mgr/trunk_sync.o trunk_mgr/trunk_client.o trunk_mgr/trunk_free_block_checker.o ../client/client_global.o ../client/tracker_client.o ../client/storage_client.o ../client/client_func.o fdht_client/fdht_proto.o fdht_client/fdht_client.o fdht_client/fdht_func.o fdht_client/fdht_global.o storage_dump.o ../common/linux_stack_trace.o -L/usr/local/lib -lpthread -ldl -rdynamic -lfastcommon -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/fdfs_http_shared.o ../common/fdfs_http_shared.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/mime_file_parser.o ../common/mime_file_parser.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ../common/fdfs_global.lo ../common/fdfs_global.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ../common/fdfs_http_shared.lo ../common/fdfs_http_shared.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ../common/mime_file_parser.lo ../common/mime_file_parser.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ../tracker/tracker_proto.lo ../tracker/tracker_proto.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ../tracker/fdfs_shared_func.lo ../tracker/fdfs_shared_func.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ../storage/trunk_mgr/trunk_shared.lo ../storage/trunk_mgr/trunk_shared.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o tracker_client.lo tracker_client.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o client_func.lo client_func.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o client_global.lo client_global.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o storage_client.lo storage_client.c -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_monitor fdfs_monitor.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_test fdfs_test.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_test1 fdfs_test1.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_crc32 fdfs_crc32.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_upload_file fdfs_upload_file.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_download_file fdfs_download_file.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_delete_file fdfs_delete_file.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_file_info fdfs_file_info.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_appender_test fdfs_appender_test.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_appender_test1 fdfs_appender_test1.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_append_file fdfs_append_file.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_upload_appender fdfs_upload_appender.c ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o -lpthread -ldl -rdynamic -lfastcommon -I../common -I../tracker -I/usr/include/fastcommon
ar cru libfdfsclient.a ../common/fdfs_global.o ../common/fdfs_http_shared.o ../common/mime_file_parser.o ../tracker/tracker_proto.o ../tracker/fdfs_shared_func.o ../storage/trunk_mgr/trunk_shared.o tracker_client.o client_func.o client_global.o storage_client.o
cc -Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o libfdfsclient.so -shared ../common/fdfs_global.lo ../common/fdfs_http_shared.lo ../common/mime_file_parser.lo ../tracker/tracker_proto.lo ../tracker/fdfs_shared_func.lo ../storage/trunk_mgr/trunk_shared.lo tracker_client.lo client_func.lo client_global.lo storage_client.lo -lpthread -ldl -rdynamic -lfastcommon
[root@localhost FastDFS]# ./make.sh install
mkdir -p /usr/bin
mkdir -p /etc/fdfs
cp -f fdfs_trackerd /usr/bin
if [ ! -f /etc/fdfs/tracker.conf.sample ]; then cp -f ../conf/tracker.conf /etc/fdfs/tracker.conf.sample; fi
mkdir -p /usr/bin
mkdir -p /etc/fdfs
cp -f fdfs_storaged /usr/bin
if [ ! -f /etc/fdfs/storage.conf.sample ]; then cp -f ../conf/storage.conf /etc/fdfs/storage.conf.sample; fi
mkdir -p /usr/bin
mkdir -p /etc/fdfs
mkdir -p /usr/lib64
cp -f fdfs_monitor fdfs_test fdfs_test1 fdfs_crc32 fdfs_upload_file fdfs_download_file fdfs_delete_file fdfs_file_info fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_upload_appender /usr/bin
if [ -eq ]; then cp -f libfdfsclient.a /usr/lib64; fi
if [ -eq ]; then cp -f libfdfsclient.so /usr/lib64; fi
mkdir -p /usr/include/fastdfs
cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs
if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi
[root@localhost FastDFS]#
安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下。
[root@localhost FastDFS]# cd conf/
[root@localhost conf]# ls
anti-steal.jpg client.conf http.conf mime.types storage.conf storage_ids.conf tracker.conf
[root@localhost conf]# ll
total
-rw-r--r--. users Dec anti-steal.jpg
-rw-r--r--. users Dec client.conf
-rw-r--r--. users Dec http.conf
-rw-r--r--. users Dec mime.types
-rw-r--r--. users Dec storage.conf
-rw-r--r--. users Dec storage_ids.conf
-rw-r--r--. users Dec tracker.conf
[root@localhost conf]# cp * /etc/fdfs/
[root@localhost conf]# cd /etc/fdfs/
[root@localhost fdfs]# ls
anti-steal.jpg client.conf client.conf.sample http.conf mime.types storage.conf storage.conf.sample storage_ids.conf tracker.conf tracker.conf.sample
[root@localhost fdfs]# ll
total
-rw-r--r--. root root Aug : anti-steal.jpg
-rw-r--r--. root root Aug : client.conf
-rw-r--r--. root root Aug : client.conf.sample
-rw-r--r--. root root Aug : http.conf
-rw-r--r--. root root Aug : mime.types
-rw-r--r--. root root Aug : storage.conf
-rw-r--r--. root root Aug : storage.conf.sample
-rw-r--r--. root root Aug : storage_ids.conf
-rw-r--r--. root root Aug : tracker.conf
-rw-r--r--. root root Aug : tracker.conf.sample
[root@localhost fdfs]#
3.1.6、配置,安装成功后进入/etc/fdfs目录:
拷贝一份新的tracker配置文件:
cp tracker.conf.sample tracker.conf
修改tracker.conf
vi tracker.conf
base_path=/home/yuqing/FastDFS
改为:
base_path=/home/FastDFS
[root@localhost fdfs]# vim tracker.conf
注意:在/home目录下面创建FastDFS目录哟。不然下面启动报错。
.1tracker.conf 基本配置
disable
#func:配置是否生效
#valu:true、false
disable=false
bind_addr
#func:绑定IP
#valu:IP地址
bind_addr=192.168.6.102
port
#func:服务端口
#valu:端口整数值
port=
connect_timeout
#func:连接超时
#valu:秒单位正整数值
connect_timeout=
network_timeout
#func:网络超时
#valu:秒单位正整数值
network_timeout=
base_path
#func:Tracker数据/日志目录地址
#valu:路径
base_path=/home/michael/fdfs/base4tracker
max_connections
#func:最大连接数
#valu:正整数值
max_connections=
work_threads
#func:线程数,通常设置CPU数
#valu:正整数值
work_threads=
store_lookup
#func:上传文件的选组方式。
#valu:、1或2。
# :表示轮询
# :表示指定组
# :表示存储负载均衡(选择剩余空间最大的组)
store_lookup=
store_group
#func:指定上传的组,如果在应用层指定了具体的组,那么这个参数将不会起效。另外如果store_lookup如果是0或2,则此参数无效。
#valu:group1等
store_group=group1
store_server
#func:上传服务器的选择方式。(一个文件被上传后,这个storage server就相当于这个文件的storage server源,会对同组的storage server推送这个文件达到同步效果)
#valu:、1或2
# : 轮询方式(默认)
# : 根据ip 地址进行排序选择第一个服务器(IP地址最小者)
# : 根据优先级进行排序(上传优先级由storage server来设置,参数名为upload_priority),优先级值越小优先级越高。
store_server=
store_path
#func:上传路径的选择方式。storage server可以有多个存放文件的base path(可以理解为多个磁盘)。
#valu:
# : 轮流方式,多个目录依次存放文件
# : 存储负载均衡。选择剩余空间最大的目录存放文件(注意:剩余磁盘空间是动态的,因此存储到的目录或磁盘可能也是变化的)
store_path=
download_server
#func:下载服务器的选择方式。
#valu:
# :轮询(默认)
# :IP最小者
# :优先级排序(值最小的,优先级最高。)
download_server=
reserved_storage_space
#func:保留空间值。如果某个组中的某个服务器的剩余自由空间小于设定值,则文件不会被上传到这个组。
#valu:
# G or g for gigabyte
# M or m for megabyte
# K or k for kilobyte
reserved_storage_space=1GB
log_level
#func:日志级别
#valu:
# emerg for emergency
# alert
# crit for critical
# error
# warn for warning
# notice
# info for information
# debug for debugging
log_level=info
run_by_group / run_by_user
#func:指定运行该程序的用户组
#valu:用户组名或空
run_by_group= #func:
#valu:
run_by_user=
allow_hosts
#func:可以连接到tracker server的ip范围。可设定多个值。
#valu
allow_hosts=
check_active_interval
#func:检测 storage server 存活的时间隔,单位为秒。
# storage server定期向tracker server 发心跳,
# 如果tracker server在一个check_active_interval内还没有收到storage server的一次心跳,
# 那边将认为该storage server已经下线。所以本参数值必须大于storage server配置的心跳时间间隔。
# 通常配置为storage server心跳时间间隔的2倍或3倍。
check_active_interval=
thread_stack_size
#func:设定线程栈的大小。 线程栈越大,一个线程占用的系统资源就越多。
# 如果要启动更多的线程(V1.x对应的参数为max_connections,V2.0为work_threads),可以适当降低本参数值。
#valu:如64KB,默认值为64,tracker server线程栈不应小于64KB
thread_stack_size=64KB
storage_ip_changed_auto_adjust
#func:这个参数控制当storage server IP地址改变时,集群是否自动调整。注:只有在storage server进程重启时才完成自动调整。
#valu:true或false
storage_ip_changed_auto_adjust=true
同步
storage_sync_file_max_delay
#func:同组storage服务器之间同步的最大延迟时间。存储服务器之间同步文件的最大延迟时间,根据实际情况进行调整
#valu:秒为单位,默认值为1天(*)
#sinc:v2.
storage_sync_file_max_delay=
storage_sync_file_max_time
#func:存储服务器同步一个文件需要消耗的最大时间,缺省为300s,即5分钟。
#sinc:v2.
storage_sync_file_max_time=
sync_log_buff_interval
#func:同步或刷新日志信息到硬盘的时间间隔。注意:tracker server 的日志不是时时写硬盘的,而是先写内存。
#valu:以秒为单位
sync_log_buff_interval=
trunk 和 slot
#func:是否使用trunk文件来存储几个小文件
#valu:true或false
#sinc:v3.
use_trunk_file=false #func:最小slot大小
#valu:<= 4KB,默认为256字节
#sinc:v3.
slot_min_size= #func:最大slot大小
#valu:>= slot_min_size,当小于这个值的时候就存储到trunk file中。默认为16MB。
#sinc:v3.
slot_max_size=16MB #func:trunk file的size
#valu:>= 4MB,默认为64MB
#sinc:v3.
trunk_file_size=64MB
HTTP 相关
是否启用 HTTP
#func:HTTP是否生效
#valu:true或false
http.disabled=false
HTTP 服务器端口号
#func:tracker server上的http port
#valu:
#note:只有http.disabled=false时才生效
http.server_port=
检查Storage存活状态的间隔时间(心跳检测)
#func:检查storage http server存活的间隔时间
#valu:单位为秒
#note:只有http.disabled=false时才生效
http.check_alive_interval=
心跳检测使用的协议方式
#func:检查storage http server存活的方式
#valu:
# tcp:连接到storage server的http端口,不进行request和response。
# http:storage check alive url must return http status .
#note:只有http.disabled=false时才生效
http.check_alive_type=tcp
检查 Storage 状态的 URI
#func:检查storage http server是否alive的uri/url
#note:只有http.disabled=false时才生效
http.check_alive_uri=/status.html
3.1.7、启动。
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
[-- ::] ERROR - file: process_ctrl.c, line: , "/home/FastDFS" can't be accessed, error info: No such file or directory
[root@localhost FastDFS]# pwd
/usr/local/FastDFS
[root@localhost FastDFS]# ll
total
drwxr-xr-x. users Aug : client
drwxr-xr-x. users Aug : common
drwxr-xr-x. users Dec conf
-rw-r--r--. users Dec COPYING-3_0.txt
-rw-r--r--. users Dec fastdfs.spec
-rw-r--r--. users Dec HISTORY
drwxr-xr-x. users Dec init.d
-rw-r--r--. users Dec INSTALL
-rwxr-xr-x. users Dec make.sh
drwxr-xr-x. users Dec php_client
-rw-r--r--. users Dec README.md
-rwxr-xr-x. users Dec restart.sh
-rwxr-xr-x. users Dec stop.sh
drwxr-xr-x. users Aug : storage
drwxr-xr-x. users Dec test
drwxr-xr-x. users Aug : tracker
[root@localhost FastDFS]# cd /home/
[root@localhost home]# ls
hadoop
[root@localhost home]# ll
total
drwx------. hadoop hadoop Aug : hadoop
[root@localhost home]# mkdir FastDFS
[root@localhost home]# ll
total
drwxr-xr-x. root root Aug : FastDFS
drwx------. hadoop hadoop Aug : hadoop
[root@localhost home]# cd /usr/local/
[root@localhost local]# ls
bin etc FastDFS FastDFS_v5..tar.gz games include lib libexec libfastcommon-1.0. libfastcommonV1.0.7.tar.gz sbin share src
[root@localhost local]# cd FastDFS
[root@localhost FastDFS]# ls
client conf fastdfs.spec init.d make.sh README.md stop.sh test
common COPYING-3_0.txt HISTORY INSTALL php_client restart.sh storage tracker
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
waiting for pid [5619] exit ...
starting...
注意:如果没有显示如上要注意是否正常停止原有进程。
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop 关闭的日志显示先停止进程(实际环境看你的进程号)再关闭。
waiting for pid [] exit ...
pid [] exit.
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
waiting for pid [] exit ...
starting ...
[root@localhost FastDFS]#
设置开机自动启动。
[root@localhost FastDFS]# vim /etc/rc.d/rc.local
将运行命令行添加进文件:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
开机测试一下啊,是否是开机自启的,如果没有启动关闭的时候,报不存在,如果启动了,关闭就是显示关闭进程号信息。
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
pid file: /home/FastDFS/data/fdfs_trackerd.pid not exist!
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
[root@localhost FastDFS]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
waiting for pid [] exit ...
pid [] exit.
[root@localhost FastDFS]#
这个显示,说明已经自己自启动了。
4、FastDFS--storage安装。
因为这里搭建的是小型的,将tracker、storage部署到了一台机器上面,所以storage前三步骤都和tracker一样,那么这里也就是不用安装了,如果在不同的机器上面,就需要再次安装部署的。注意,这里使用的是tracker和storage使用相同的安装包。
4.1、安装libevent
同tracker安装。
4.2、安装libfastcommon
同tracker安装。
4.3、storage编译安装
同tracker编译安装。
4.4、storage配置。
安装成功后进入/etc/fdfs目录:
修改storage.conf
修改storage.conf
vi storage.conf
group_name=group1
base_path=/home/yuqing/FastDFS改为:base_path=/home/FastDFS
store_path0=/home/yuqing/FastDFS改为:store_path0=/home/FastDFS/fdfs_storage
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......
tracker_server=192.168.101.3: #配置tracker服务器:IP
#如果有多个则配置多个tracker
tracker_server=192.168.101.4:
拷贝一份新的storage配置文件:cp storage.conf.sample storage.conf
[root@localhost ~]# cd /etc/fdfs/
[root@localhost fdfs]# ls
anti-steal.jpg client.conf.sample mime.types storage.conf.sample tracker.conf
client.conf http.conf storage.conf storage_ids.conf tracker.conf.sample
[root@localhost fdfs]#
[root@localhost fdfs]# vim storage.conf # is this config file disabled
# false for enabled
# true for disabled
disabled=false # the name of the group this storage server belongs to
#
# comment or remove this item for fetching from tracker server,
# in this case, use_storage_id must set to true in tracker.conf,
# and storage_ids.conf must be configed correctly.
group_name=group1 # bind an address of this host
# empty for bind all addresses of this host
bind_addr= # if bind an address of this host when connect to other servers
# (this storage server as a client)
# true for binding the address configed by above parameter: "bind_addr"
# false for binding any address of this host
client_bind=true # the storage server port
port= # connect timeout in seconds
# default value is 30s
connect_timeout= # network timeout in seconds
# default value is 30s
network_timeout= # heart beat interval in seconds
heart_beat_interval= # disk usage report interval in seconds
stat_report_interval= # the base path to store data and log files
base_path=/home/yuqing/fastdfs base_path=/home/yuqing/fastdfs
# max concurrent connections the server supported
# default value is
# more max_connections means more memory will be used
max_connections= # the buff size to recv / send data
# this parameter must more than 8KB
# default value is 64KB
# since V2.
buff_size = 256KB # accept thread count
# default value is
# since V4.
accept_threads= # work thread count, should <= max_connections
# work thread deal network io
# default value is
# since V2.
work_threads= # if disk read / write separated
## false for mixed read and write
## true for separated read and write
# default value is true
# since V2.
disk_rw_separated = true # disk reader thread count per store base path
# for mixed read / write, this parameter can be
# default value is
# since V2.
disk_reader_threads = # disk writer thread count per store base path
# for mixed read / write, this parameter can be
# default value is
# since V2.
disk_writer_threads = # when no entry to sync, try read binlog again after X milliseconds
# must > , default value is 200ms
sync_wait_msec= # after sync a file, usleep milliseconds
# for sync successively (never call usleep)
sync_interval=
# the name of the group this storage server belongs to
#
# comment or remove this item for fetching from tracker server,
# in this case, use_storage_id must set to true in tracker.conf,
# and storage_ids.conf must be configed correctly.
group_name=group1 # bind an address of this host
# empty for bind all addresses of this host
bind_addr= # if bind an address of this host when connect to other servers
# (this storage server as a client)
# true for binding the address configed by above parameter: "bind_addr"
# false for binding any address of this host
client_bind=true # the storage server port
port= # connect timeout in seconds
# default value is 30s
connect_timeout= # network timeout in seconds
# default value is 30s
network_timeout= # heart beat interval in seconds
heart_beat_interval= # disk usage report interval in seconds
stat_report_interval= # the base path to store data and log files
# base_path=/home/yuqing/fastdfs
base_path=/home/FastDFS # max concurrent connections the server supported
# default value is
# more max_connections means more memory will be used
max_connections= # the buff size to recv / send data
# this parameter must more than 8KB
# default value is 64KB
# since V2.
buff_size = 256KB # accept thread count
# default value is
# since V4.
accept_threads= # work thread count, should <= max_connections
# work thread deal network io
# default value is
# since V2.
work_threads= # if disk read / write separated
## false for mixed read and write
## true for separated read and write
# default value is true
# since V2.
disk_rw_separated = true # disk reader thread count per store base path
# for mixed read / write, this parameter can be
# default value is
# since V2.
disk_reader_threads = # disk writer thread count per store base path
# for mixed read / write, this parameter can be
# default value is
# since V2.
disk_writer_threads = # when no entry to sync, try read binlog again after X milliseconds
# must > , default value is 200ms
sync_wait_msec= # default value is 64KB
# since V2.
buff_size = 256KB # accept thread count
# default value is
# since V4.
accept_threads= # work thread count, should <= max_connections
# work thread deal network io
# default value is
# since V2.
work_threads= # if disk read / write separated
## false for mixed read and write
## true for separated read and write
# default value is true
# since V2.
disk_rw_separated = true # disk reader thread count per store base path
# for mixed read / write, this parameter can be
# default value is
# since V2.
disk_reader_threads = # disk writer thread count per store base path
# for mixed read / write, this parameter can be
# default value is
# since V2.
disk_writer_threads = # when no entry to sync, try read binlog again after X milliseconds
# must > , default value is 200ms
sync_wait_msec= # after sync a file, usleep milliseconds
# for sync successively (never call usleep)
sync_interval= # storage sync start time of a day, time format: Hour:Minute
# Hour from to , Minute from to
sync_start_time=: # storage sync end time of a day, time format: Hour:Minute
# Hour from to , Minute from to
sync_end_time=: # write to the mark file after sync N files
# default value is
write_mark_file_freq= # path(disk or mount point) count, default value is
store_path_count= # store_path#, based , if store_path0 not exists, it's value is base_path
# the paths must be exist
# store_path0=/home/yuqing/fastdfs
store_path0=/home/FastDFS/fdfs_storage #store_path1=/home/yuqing/fastdfs2 # subdir_count * subdir_count directories will be auto created under each
# store_path (disk), value can be to , default value is
subdir_count_per_path= # tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# tracker_server=192.168.209.121:
tracker_server=192.168.110.141: #standard log level as syslog, case insensitive, value list:
### emerg for emergency
### notice
### info
### debug
log_level=info run_by_group= #unix username to run this program,
#not set (empty) means run by current user
run_by_user= # allow_hosts can ocur more than once, host can be hostname or ip address,
# "*" means match all ip addresses, can use range like this: 10.0..[-,] or
# host[-,-].domain.com, for example:
# allow_hosts=10.0..[-,]
# allow_hosts=host[-,-].domain.com
allow_hosts=* # the mode of the files distributed to the data path
# : round robin(default)
# : random, distributted by hash code
file_distribute_path_mode= # valid when file_distribute_to_path is set to (round robin),
# when the written file count reaches this number, then rotate to next path
# default value is
file_distribute_rotate_count= # call fsync to disk when write big file
# : never call fsync
# other: call fsync when written bytes >= this bytes
# default value is (never call fsync)
fsync_after_written_bytes= # sync log buff to disk every interval seconds
# must > , default value is seconds
sync_log_buff_interval= # sync binlog buff / cache to disk every interval seconds
# default value is seconds
sync_binlog_buff_interval= # sync storage stat info to disk every interval seconds
# default value is seconds
sync_stat_file_interval= # thread stack size, should >= 512KB
# default value is 512KB
thread_stack_size=512KB # the priority as a source server for uploading file.
# the lower this value, the higher its uploading priority.
# default value is
upload_priority= # the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
# multi aliases split by comma. empty value means auto set by OS type
# default values is empty
if_alias_prefix= # if check file duplicate, when set to true, use FastDHT to store file indexes
# or yes: need check
# or no: do not check
# default value is
check_file_duplicate= # file signature method for check file duplicate
## hash: four bits hash code
## md5: MD5 signature
# default value is hash
# since V4.
file_signature_method=hash # namespace for storing file indexes (key-value pairs)
# this item must be set when check_file_duplicate is true / on
key_namespace=FastDFS # set keep_alive to to enable persistent connection with FastDHT servers
# default value is (short connection)
keep_alive= # you can use "#include filename" (not include double quotes) directive to
# load FastDHT server list, when the filename is a relative path such as
# pure filename, the base path is the base path of current/this config file.
# must set FastDHT server list when check_file_duplicate is true / on
# please see INSTALL of FastDHT for detail
##include /home/yuqing/fastdht/conf/fdht_servers.conf # if log to access log
# default value is false
# since V4.
use_access_log = false # if rotate the access log every day
# default value is false
# since V4.
rotate_access_log = false # rotate access log time base, time format: Hour:Minute
# Hour from to , Minute from to
# default value is :
# since V4.
access_log_rotate_time=: # if rotate the error log every day
# default value is false
# since V4.
rotate_error_log = false # rotate error log time base, time format: Hour:Minute
# Hour from to , Minute from to
# default value is :
# since V4.
error_log_rotate_time=: # rotate access log when the log file exceeds this size
# means never rotates log file by log file size
# default value is
# since V4.
rotate_access_log_size = # rotate error log when the log file exceeds this size
# means never rotates log file by log file size
# default value is
# since V4.
rotate_error_log_size = # keep days of the log files
# means do not delete old log files
# default value is
log_file_keep_days = # if skip the invalid record when sync file
# default value is false
# since V4.
file_sync_skip_invalid_record=false # if use connection pool
# default value is false
# since V4.
use_connection_pool = false # connections whose the idle time exceeds this time will be closed
# unit: second
# default value is
# since V4.
connection_pool_max_idle_time = # use the ip address of this storage server if domain_name is empty,
# else this domain name will ocur in the url redirected by the tracker server
http.domain_name= # the port of the web server on this storage server
http.server_port=
注意,记得创建你的目录哦。
[root@localhost FastDFS]# mkdir fdfs_storage
4.5、启动。
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
[root@localhost FastDFS]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
[root@localhost FastDFS]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
waiting for pid [] exit ...
pid [] exit.
[root@localhost FastDFS]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
[root@localhost FastDFS]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
waiting for pid [] exit ...
starting ...
[root@localhost FastDFS]#
设置开机自动启动。
[root@localhost FastDFS]# vim /etc/rc.d/rc.local
5、FastDFS 和nginx整合。
5.1、在tracker上安装nginx。在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker服务器可以不配置nginx。
这里就先不安装tracker服务器nginx的。
5.2、在Storage上安装nginx。
将FastDFS-nginx-module_v1.16.tar.gz传至/usr/local/下
cd /usr/local
tar -zxvf FastDFS-nginx-module_v1.16.tar.gz
cd FastDFS-nginx-module/src
修改config文件将/usr/local/路径改为/usr/
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
bin FastDFS FastDFS_v5..tar.gz include libexec libfastcommonV1.0.7.tar.gz share
etc fastdfs-nginx-module_v1..tar.gz games lib libfastcommon-1.0. sbin src
[root@localhost local]# tar -zxvf fastdfs-nginx-module_v1..tar.gz
fastdfs-nginx-module/
fastdfs-nginx-module/src/
fastdfs-nginx-module/src/ngx_http_fastdfs_module.c
fastdfs-nginx-module/src/mod_fastdfs.conf
fastdfs-nginx-module/src/config
fastdfs-nginx-module/src/common.h
fastdfs-nginx-module/src/common.c
fastdfs-nginx-module/INSTALL
fastdfs-nginx-module/HISTORY
[root@localhost local]# ls
bin FastDFS fastdfs-nginx-module_v1..tar.gz games lib libfastcommon-1.0. sbin src
etc fastdfs-nginx-module FastDFS_v5..tar.gz include libexec libfastcommonV1.0.7.tar.gz share
[root@localhost local]# cd fastdfs-nginx-module/src/
[root@localhost src]# ls
common.c common.h config mod_fastdfs.conf ngx_http_fastdfs_module.c
[root@localhost src]# cd co
common.c common.h config
[root@localhost src]# cd config
-bash: cd: config: Not a directory
[root@localhost src]# vim config
如下所示:
将FastDFS-nginx-module/src下的mod_FastDFS.conf拷贝至/etc/fdfs/下
cp mod_FastDFS.conf /etc/fdfs/
[root@localhost src]# pwd
/usr/local/fastdfs-nginx-module/src
[root@localhost src]# ls
common.c common.h config mod_fastdfs.conf ngx_http_fastdfs_module.c
[root@localhost src]# cp mod_fastdfs.conf /etc/fdfs/
并修改mod_FastDFS.conf的内容:
vi /etc/fdfs/mod_FastDFS.conf
base_path=/home/FastDFS
tracker_server=192.168.101.3:
#tracker_server=192.168.101.4:(多个tracker配置多行)
url_have_group_name=true #url中包含group名称
store_path0=/home/FastDFS/fdfs_storage #指定文件存储路径
[root@localhost src]# vim /etc/fdfs/mod_fastdfs.conf # connect timeout in seconds
# default value is 30s
connect_timeout= # network recv and send timeout in seconds
# default value is 30s
network_timeout= # the base path to store log files
base_path=/tmp # if load FastDFS parameters from tracker server
# since V1.
# default value is false
load_fdfs_parameters_from_tracker=true # storage sync file max delay seconds
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.
# default value is seconds (one day)
storage_sync_file_max_delay = # if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V1.
use_storage_id = false # specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.
storage_ids_filename = storage_ids.conf # FastDFS tracker_server can ocur more than once, and tracker_server format is
# connect timeout in seconds
# default value is 30s
connect_timeout= # network recv and send timeout in seconds
# default value is 30s
network_timeout= # the base path to store log files
base_path=/tmp # if load FastDFS parameters from tracker server
# since V1.
# default value is false
load_fdfs_parameters_from_tracker=true # storage sync file max delay seconds
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.
# default value is seconds (one day)
storage_sync_file_max_delay = # if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V1.
use_storage_id = false # specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.
storage_ids_filename = storage_ids.conf # FastDFS tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=tracker: # the port of the local storage server
# the default value is
storage_server_port= # the group name of the local storage server
group_name=group1 # if the url / uri including the group name
# set to false when uri like /M00///xxx
# set to true when uri like ${group_name}/M00///xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = false # path(disk or mount point) count, default value is
# must same as storage.conf
store_path_count= # store_path#, based , if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
# store_path0=/home/yuqing/fastdfs
store_path0=/home/FastDFS/fdfs_storage #store_path1=/home/yuqing/fastdfs1
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info # set the log filename, such as /usr/local/apache2/logs/mod_fastdfs.log
# empty for output to stderr (apache and nginx error_log file)
log_filename= # response mode when the file not exist in the local file system
## proxy: get the content from other storage server, then send to client
## redirect: redirect to the original storage server (HTTP Header is Location)
response_mode=proxy # the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
# multi aliases split by comma. empty value means auto set by OS type
# this paramter used to get all ip address of the local host
# default values is empty
if_alias_prefix= # use "#include" directive to include HTTP config file
# NOTE: #include is an include directive, do NOT remove the # before include
#include http.conf
# connect timeout in seconds
# default value is 30s
connect_timeout= # network recv and send timeout in seconds
# default value is 30s
network_timeout= # the base path to store log files
# base_path=/tmp
base_path=/home/FastDFS # if load FastDFS parameters from tracker server
# since V1.
# default value is false
load_fdfs_parameters_from_tracker=true # storage sync file max delay seconds
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.
# default value is seconds (one day)
storage_sync_file_max_delay = # if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V1.
use_storage_id = false # specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.
storage_ids_filename = storage_ids.conf # FastDFS tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=192.168.110.141: # the port of the local storage server
# the default value is
storage_server_port= # the group name of the local storage server
group_name=group1 # if the url / uri including the group name
# set to false when uri like /M00///xxx
# set to true when uri like ${group_name}/M00///xxx, such as group1/M00/xxx
# default value is false
# url_have_group_name = false
url_have_group_name = true # path(disk or mount point) count, default value is
# must same as storage.conf
store_path_count= # store_path#, based , if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
# store_path0=/home/yuqing/fastdfs
store_path0=/home/FastDFS/fdfs_storage #store_path1=/home/yuqing/fastdfs1 # standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info # set the log filename, such as /usr/local/apache2/logs/mod_fastdfs.log
# empty for output to stderr (apache and nginx error_log file)
log_filename= # response mode when the file not exist in the local file system
## proxy: get the content from other storage server, then send to client
## redirect: redirect to the original storage server (HTTP Header is Location)
response_mode=proxy # the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
# multi aliases split by comma. empty value means auto set by OS type
# this paramter used to get all ip address of the local host
# default values is empty
if_alias_prefix= # use "#include" directive to include HTTP config file
# NOTE: #include is an include directive, do NOT remove the # before include
#include http.conf # if support flv
# default value is false
# since v1.
flv_support = true # flv file extension name
# default value is flv
# since v1.
flv_extension = flv # set the group count
# set to none zero to support multi-group
# set to for single group only
# groups settings section as [group1], [group2], ..., [groupN]
# default value is
# since v1.
group_count = # group settings for group #
# since v1.
# when support multi-group, uncomment following section
#[group1]
#group_name=group1
#storage_server_port=
#store_path_count=
#store_path0=/home/yuqing/fastdfs
#store_path1=/home/yuqing/fastdfs1 # group settings for group #
# since v1.
# when support multi-group, uncomment following section as neccessary
#[group2]
#group_name=group2
#storage_server_port=
#store_path_count=
#store_path0=/home/yuqing/fastdfs
将libfdfsclient.so拷贝至/usr/lib下。
[root@localhost src]# cp /usr/lib64/libfdfsclient.so /usr/lib/
创建nginx/client目录。
[root@localhost src]# mkdir -p /var/temp/nginx/client
5.3、nginx安装。添加FastDFS-nginx-module模块。
[root@localhost src]# ./configure \
> --prefix=/usr/local/nginx \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/lock/nginx.lock \
> --error-log-path=/var/log/nginx/error.log \
> --http-log-path=/var/log/nginx/access.log \
> --with-http_gzip_static_module \
> --http-client-body-temp-path=/var/temp/nginx/client \
> --http-proxy-temp-path=/var/temp/nginx/proxy \
> --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
> --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
> --http-scgi-temp-path=/var/temp/nginx/scgi \
> --add-module=/root/fastdfs-nginx-module/src
-bash: ./configure: No such file or directory
[root@localhost src]#
-bash: ./configure: No such file or directory也许是因为我没有安装nginx的原因,先安装一个nginx。
nginx的安装参考:https://www.cnblogs.com/biehongli/p/11219326.html
步骤如下所示:
[root@localhost ~]# yum install -y gcc-c++
[root@localhost ~]# yum install -y pcre pcre-devel
[root@localhost ~]# yum install -y zlib zlib-devel
[root@localhost ~]# yum install -y openssl openssl-devel
[root@localhost package]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@localhost local]# tar -zxvf nginx-1.8.0.tar.gz
父目录/var/temp/nginx 目录,nginx 服务应用无法自主创建.必须有 linux 服务器管理员提前创建。
我是先安装上面参考链接,执行安装了nginx,然后再执行下面的语句的。
在nginx的目录执行如下所示:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/root/fastdfs-nginx-module/src
--add-module=/usr/local/fastdfs-nginx-module/src
执行效果如下所示:
报错了。./configure: error: no /root/fastdfs-nginx-module/src/config was found。怎么解决呢,应该是没有这个目录,手动创建一下,试试,看看还报错不。[root@localhost ~]# mkdir -p root/fastdfs-nginx-module/src
[root@localhost nginx-1.8.]# cd /usr/local/nginx-1.8.
[root@localhost nginx-1.8.]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@localhost nginx-1.8.]# ./configure \
> --prefix=/usr/local/nginx \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/lock/nginx.lock \
> --error-log-path=/var/log/nginx/error.log \
> --http-log-path=/var/log/nginx/access.log \
> --with-http_gzip_static_module \
> --http-client-body-temp-path=/var/temp/nginx/client \
> --http-proxy-temp-path=/var/temp/nginx/proxy \
> --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
> --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
> --http-scgi-temp-path=/var/temp/nginx/scgi \
> --add-module=/root/fastdfs-nginx-module/src
checking for OS
+ Linux 2.6.-.el6.i686 i686
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.4. (Red Hat 4.4.-) (GCC)
checking for gcc -pipe switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for EPOLLRDHUP ... found
checking for O_PATH ... not found
checking for sendfile() ... found
checking for sendfile64() ... found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... found
checking for sched_setaffinity() ... found
checking for crypt_r() ... found
checking for sys/vfs.h ... found
checking for nobody group ... found
checking for poll() ... found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... found
checking for F_READAHEAD ... not found
checking for posix_fadvise() ... found
checking for O_DIRECT ... found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... found
checking for statvfs() ... found
checking for dlopen() ... not found
checking for dlopen() in libdl ... found
checking for sched_yield() ... found
checking for SO_SETFIB ... not found
checking for SO_ACCEPTFILTER ... not found
checking for TCP_DEFER_ACCEPT ... found
checking for TCP_KEEPIDLE ... found
checking for TCP_FASTOPEN ... not found
checking for TCP_INFO ... found
checking for accept4() ... found
checking for eventfd() ... found
checking for int size ... bytes
checking for long size ... bytes
checking for long long size ... bytes
checking for void * size ... bytes
checking for uint64_t ... found
checking for sig_atomic_t ... found
checking for sig_atomic_t size ... bytes
checking for socklen_t ... found
checking for in_addr_t ... found
checking for in_port_t ... found
checking for rlim_t ... found
checking for uintptr_t ... uintptr_t found
checking for system byte ordering ... little endian
checking for size_t size ... bytes
checking for off_t size ... bytes
checking for time_t size ... bytes
checking for setproctitle() ... not found
checking for pread() ... found
checking for pwrite() ... found
checking for sys_nerr ... found
checking for localtime_r() ... found
checking for posix_memalign() ... found
checking for memalign() ... found
checking for mmap(MAP_ANON|MAP_SHARED) ... found
checking for mmap("/dev/zero", MAP_SHARED) ... found
checking for System V shared memory ... found
checking for POSIX semaphores ... not found
checking for POSIX semaphores in libpthread ... found
checking for struct msghdr.msg_control ... found
checking for ioctl(FIONBIO) ... found
checking for struct tm.tm_gmtoff ... found
checking for struct dirent.d_namlen ... not found
checking for struct dirent.d_type ... found
checking for sysconf(_SC_NPROCESSORS_ONLN) ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
configuring additional modules
adding module in /root/fastdfs-nginx-module/src
./configure: error: no /root/fastdfs-nginx-module/src/config was found
[root@localhost nginx-1.8.]#
再试一次,看看还报错不。还是报错,我将--add-module=/usr/local/fastdfs-nginx-module/src修改成了这个,然后执行。
注意,我的fastdfs-nginx-module这个是安装到了/usr/local下面的,所以下面--add-module=/usr/local/fastdfs-nginx-module/src指定这个目录。
[root@localhost nginx-1.8.0]# make && make install
[root@localhost nginx-1.8.]# ./configure \
> --prefix=/usr/local/nginx \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/lock/nginx.lock \
emp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-> --error-log-path=/var/log/nginx/error.log \
> --http-log-path=/var/log/nginx/access.log \
> --with-http_gzip_static_module \
> --http-client-body-temp-path=/var/temp/nginx/client \
> --http-proxy-temp-path=/var/temp/nginx/proxy \
> --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
> --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
> --http-scgi-temp-path=/var/temp/nginx/scgi \
> --add-module=/usr/local/fastdfs-nginx-module/src
checking for OS
+ Linux 2.6.-.el6.i686 i686
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.4. (Red Hat 4.4.-) (GCC)
checking for gcc -pipe switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for EPOLLRDHUP ... found
checking for O_PATH ... not found
checking for sendfile() ... found
checking for sendfile64() ... found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... found
checking for sched_setaffinity() ... found
checking for crypt_r() ... found
checking for sys/vfs.h ... found
checking for nobody group ... found
checking for poll() ... found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... found
checking for F_READAHEAD ... not found
checking for posix_fadvise() ... found
checking for O_DIRECT ... found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... found
checking for statvfs() ... found
checking for dlopen() ... not found
checking for dlopen() in libdl ... found
checking for sched_yield() ... found
checking for SO_SETFIB ... not found
checking for SO_ACCEPTFILTER ... not found
checking for TCP_DEFER_ACCEPT ... found
checking for TCP_KEEPIDLE ... found
checking for TCP_FASTOPEN ... not found
checking for TCP_INFO ... found
checking for accept4() ... found
checking for eventfd() ... found
checking for int size ... bytes
checking for long size ... bytes
checking for long long size ... bytes
checking for void * size ... bytes
checking for uint64_t ... found
checking for sig_atomic_t ... found
checking for sig_atomic_t size ... bytes
checking for socklen_t ... found
checking for in_addr_t ... found
checking for in_port_t ... found
checking for rlim_t ... found
checking for uintptr_t ... uintptr_t found
checking for system byte ordering ... little endian
checking for size_t size ... bytes
checking for off_t size ... bytes
checking for time_t size ... bytes
checking for setproctitle() ... not found
checking for pread() ... found
checking for pwrite() ... found
checking for sys_nerr ... found
checking for localtime_r() ... found
checking for posix_memalign() ... found
checking for memalign() ... found
checking for mmap(MAP_ANON|MAP_SHARED) ... found
checking for mmap("/dev/zero", MAP_SHARED) ... found
checking for System V shared memory ... found
checking for POSIX semaphores ... not found
checking for POSIX semaphores in libpthread ... found
checking for struct msghdr.msg_control ... found
checking for ioctl(FIONBIO) ... found
checking for struct tm.tm_gmtoff ... found
checking for struct dirent.d_namlen ... not found
checking for struct dirent.d_type ... found
checking for sysconf(_SC_NPROCESSORS_ONLN) ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
configuring additional modules
adding module in /usr/local/fastdfs-nginx-module/src
+ ngx_http_fastdfs_module was configured
checking for PCRE library ... found
checking for PCRE JIT support ... not found
checking for md5 in system md library ... not found
checking for md5 in system md5 library ... not found
checking for md5 in system OpenSSL crypto library ... found
checking for sha1 in system md library ... not found
checking for sha1 in system OpenSSL crypto library ... found
checking for zlib library ... found
creating objs/Makefile Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ md5: using system crypto library
+ sha1: using system crypto library
+ using system zlib library nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/var/run/nginx/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/temp/nginx/client"
nginx http proxy temporary files: "/var/temp/nginx/proxy"
nginx http fastcgi temporary files: "/var/temp/nginx/fastcgi"
nginx http uwsgi temporary files: "/var/temp/nginx/uwsgi"
nginx http scgi temporary files: "/var/temp/nginx/scgi" [root@localhost nginx-1.8.]# make && make install
make -f objs/Makefile
make[]: Entering directory `/usr/local/nginx-1.8.'
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_log.o \
src/core/ngx_log.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_palloc.o \
src/core/ngx_palloc.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_array.o \
src/core/ngx_array.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_list.o \
src/core/ngx_list.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_hash.o \
src/core/ngx_hash.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_buf.o \
src/core/ngx_buf.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_queue.o \
src/core/ngx_queue.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_output_chain.o \
src/core/ngx_output_chain.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_string.o \
src/core/ngx_string.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_parse.o \
src/core/ngx_parse.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_inet.o \
src/core/ngx_inet.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_file.o \
src/core/ngx_file.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_crc32.o \
src/core/ngx_crc32.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_murmurhash.o \
src/core/ngx_murmurhash.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_md5.o \
src/core/ngx_md5.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_rbtree.o \
src/core/ngx_rbtree.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_radix_tree.o \
src/core/ngx_radix_tree.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_slab.o \
src/core/ngx_slab.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_times.o \
src/core/ngx_times.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_shmtx.o \
src/core/ngx_shmtx.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_connection.o \
src/core/ngx_connection.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_cycle.o \
src/core/ngx_cycle.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_spinlock.o \
src/core/ngx_spinlock.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_cpuinfo.o \
src/core/ngx_cpuinfo.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_conf_file.o \
src/core/ngx_conf_file.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_resolver.o \
src/core/ngx_resolver.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_open_file_cache.o \
src/core/ngx_open_file_cache.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_crypt.o \
src/core/ngx_crypt.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_proxy_protocol.o \
src/core/ngx_proxy_protocol.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_syslog.o \
src/core/ngx_syslog.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/event/ngx_event.o \
src/event/ngx_event.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/event/ngx_event_timer.o \
src/event/ngx_event_timer.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/event/ngx_event_posted.o \
src/event/ngx_event_posted.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/event/ngx_event_accept.o \
src/event/ngx_event_accept.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/event/ngx_event_connect.o \
src/event/ngx_event_connect.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/event/ngx_event_pipe.o \
src/event/ngx_event_pipe.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_time.o \
src/os/unix/ngx_time.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_errno.o \
src/os/unix/ngx_errno.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_alloc.o \
src/os/unix/ngx_alloc.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_files.o \
src/os/unix/ngx_files.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_socket.o \
src/os/unix/ngx_socket.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_recv.o \
src/os/unix/ngx_recv.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_readv_chain.o \
src/os/unix/ngx_readv_chain.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_udp_recv.o \
src/os/unix/ngx_udp_recv.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_send.o \
src/os/unix/ngx_send.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_writev_chain.o \
src/os/unix/ngx_writev_chain.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_channel.o \
src/os/unix/ngx_channel.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_shmem.o \
src/os/unix/ngx_shmem.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_process.o \
src/os/unix/ngx_process.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_daemon.o \
src/os/unix/ngx_daemon.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_setaffinity.o \
src/os/unix/ngx_setaffinity.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_setproctitle.o \
src/os/unix/ngx_setproctitle.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_posix_init.o \
src/os/unix/ngx_posix_init.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_user.o \
src/os/unix/ngx_user.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_process_cycle.o \
src/os/unix/ngx_process_cycle.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_linux_init.o \
src/os/unix/ngx_linux_init.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/event/modules/ngx_epoll_module.o \
src/event/modules/ngx_epoll_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/os/unix/ngx_linux_sendfile_chain.o \
src/os/unix/ngx_linux_sendfile_chain.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/src/core/ngx_regex.o \
src/core/ngx_regex.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http.o \
src/http/ngx_http.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_core_module.o \
src/http/ngx_http_core_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_special_response.o \
src/http/ngx_http_special_response.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_request.o \
src/http/ngx_http_request.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_parse.o \
src/http/ngx_http_parse.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_header_filter_module.o \
src/http/ngx_http_header_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_write_filter_module.o \
src/http/ngx_http_write_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_copy_filter_module.o \
src/http/ngx_http_copy_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_log_module.o \
src/http/modules/ngx_http_log_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_request_body.o \
src/http/ngx_http_request_body.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_variables.o \
src/http/ngx_http_variables.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_script.o \
src/http/ngx_http_script.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_upstream.o \
src/http/ngx_http_upstream.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_upstream_round_robin.o \
src/http/ngx_http_upstream_round_robin.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_parse_time.o \
src/http/ngx_http_parse_time.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_static_module.o \
src/http/modules/ngx_http_static_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_index_module.o \
src/http/modules/ngx_http_index_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_chunked_filter_module.o \
src/http/modules/ngx_http_chunked_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_range_filter_module.o \
src/http/modules/ngx_http_range_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_headers_filter_module.o \
src/http/modules/ngx_http_headers_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_not_modified_filter_module.o \
src/http/modules/ngx_http_not_modified_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_file_cache.o \
src/http/ngx_http_file_cache.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_gzip_filter_module.o \
src/http/modules/ngx_http_gzip_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/ngx_http_postpone_filter_module.o \
src/http/ngx_http_postpone_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_ssi_filter_module.o \
src/http/modules/ngx_http_ssi_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_charset_filter_module.o \
src/http/modules/ngx_http_charset_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_userid_filter_module.o \
src/http/modules/ngx_http_userid_filter_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_gzip_static_module.o \
src/http/modules/ngx_http_gzip_static_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_autoindex_module.o \
src/http/modules/ngx_http_autoindex_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_auth_basic_module.o \
src/http/modules/ngx_http_auth_basic_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_access_module.o \
src/http/modules/ngx_http_access_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_limit_conn_module.o \
src/http/modules/ngx_http_limit_conn_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_limit_req_module.o \
src/http/modules/ngx_http_limit_req_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_geo_module.o \
src/http/modules/ngx_http_geo_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_map_module.o \
src/http/modules/ngx_http_map_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_split_clients_module.o \
src/http/modules/ngx_http_split_clients_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_referer_module.o \
src/http/modules/ngx_http_referer_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_rewrite_module.o \
src/http/modules/ngx_http_rewrite_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_proxy_module.o \
src/http/modules/ngx_http_proxy_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_fastcgi_module.o \
src/http/modules/ngx_http_fastcgi_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_uwsgi_module.o \
src/http/modules/ngx_http_uwsgi_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_scgi_module.o \
src/http/modules/ngx_http_scgi_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_memcached_module.o \
src/http/modules/ngx_http_memcached_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_empty_gif_module.o \
src/http/modules/ngx_http_empty_gif_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_browser_module.o \
src/http/modules/ngx_http_browser_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_upstream_hash_module.o \
src/http/modules/ngx_http_upstream_hash_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_upstream_ip_hash_module.o \
src/http/modules/ngx_http_upstream_ip_hash_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_upstream_least_conn_module.o \
src/http/modules/ngx_http_upstream_least_conn_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_upstream_keepalive_module.o \
src/http/modules/ngx_http_upstream_keepalive_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs -I src/http -I src/http/modules -I src/mail \
-o objs/addon/src/ngx_http_fastdfs_module.o \
/usr/local/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS= -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/include/fastdfs -I /usr/include/fastcommon/ -I objs \
-o objs/ngx_modules.o \
objs/ngx_modules.c
cc -o objs/nginx \
objs/src/core/nginx.o \
objs/src/core/ngx_log.o \
objs/src/core/ngx_palloc.o \
objs/src/core/ngx_array.o \
objs/src/core/ngx_list.o \
objs/src/core/ngx_hash.o \
objs/src/core/ngx_buf.o \
objs/src/core/ngx_queue.o \
objs/src/core/ngx_output_chain.o \
objs/src/core/ngx_string.o \
objs/src/core/ngx_parse.o \
objs/src/core/ngx_inet.o \
objs/src/core/ngx_file.o \
objs/src/core/ngx_crc32.o \
objs/src/core/ngx_murmurhash.o \
objs/src/core/ngx_md5.o \
objs/src/core/ngx_rbtree.o \
objs/src/core/ngx_radix_tree.o \
objs/src/core/ngx_slab.o \
objs/src/core/ngx_times.o \
objs/src/core/ngx_shmtx.o \
objs/src/core/ngx_connection.o \
objs/src/core/ngx_cycle.o \
objs/src/core/ngx_spinlock.o \
objs/src/core/ngx_cpuinfo.o \
objs/src/core/ngx_conf_file.o \
objs/src/core/ngx_resolver.o \
objs/src/core/ngx_open_file_cache.o \
objs/src/core/ngx_crypt.o \
objs/src/core/ngx_proxy_protocol.o \
objs/src/core/ngx_syslog.o \
objs/src/event/ngx_event.o \
objs/src/event/ngx_event_timer.o \
objs/src/event/ngx_event_posted.o \
objs/src/event/ngx_event_accept.o \
objs/src/event/ngx_event_connect.o \
objs/src/event/ngx_event_pipe.o \
objs/src/os/unix/ngx_time.o \
objs/src/os/unix/ngx_errno.o \
objs/src/os/unix/ngx_alloc.o \
objs/src/os/unix/ngx_files.o \
objs/src/os/unix/ngx_socket.o \
objs/src/os/unix/ngx_recv.o \
objs/src/os/unix/ngx_readv_chain.o \
objs/src/os/unix/ngx_udp_recv.o \
objs/src/os/unix/ngx_send.o \
objs/src/os/unix/ngx_writev_chain.o \
objs/src/os/unix/ngx_channel.o \
objs/src/os/unix/ngx_shmem.o \
objs/src/os/unix/ngx_process.o \
objs/src/os/unix/ngx_daemon.o \
objs/src/os/unix/ngx_setaffinity.o \
objs/src/os/unix/ngx_setproctitle.o \
objs/src/os/unix/ngx_posix_init.o \
objs/src/os/unix/ngx_user.o \
objs/src/os/unix/ngx_process_cycle.o \
objs/src/os/unix/ngx_linux_init.o \
objs/src/event/modules/ngx_epoll_module.o \
objs/src/os/unix/ngx_linux_sendfile_chain.o \
objs/src/core/ngx_regex.o \
objs/src/http/ngx_http.o \
objs/src/http/ngx_http_core_module.o \
objs/src/http/ngx_http_special_response.o \
objs/src/http/ngx_http_request.o \
objs/src/http/ngx_http_parse.o \
objs/src/http/ngx_http_header_filter_module.o \
objs/src/http/ngx_http_write_filter_module.o \
objs/src/http/ngx_http_copy_filter_module.o \
objs/src/http/modules/ngx_http_log_module.o \
objs/src/http/ngx_http_request_body.o \
objs/src/http/ngx_http_variables.o \
objs/src/http/ngx_http_script.o \
objs/src/http/ngx_http_upstream.o \
objs/src/http/ngx_http_upstream_round_robin.o \
objs/src/http/ngx_http_parse_time.o \
objs/src/http/modules/ngx_http_static_module.o \
objs/src/http/modules/ngx_http_index_module.o \
objs/src/http/modules/ngx_http_chunked_filter_module.o \
objs/src/http/modules/ngx_http_range_filter_module.o \
objs/src/http/modules/ngx_http_headers_filter_module.o \
objs/src/http/modules/ngx_http_not_modified_filter_module.o \
objs/src/http/ngx_http_file_cache.o \
objs/src/http/modules/ngx_http_gzip_filter_module.o \
objs/src/http/ngx_http_postpone_filter_module.o \
objs/src/http/modules/ngx_http_ssi_filter_module.o \
objs/src/http/modules/ngx_http_charset_filter_module.o \
objs/src/http/modules/ngx_http_userid_filter_module.o \
objs/src/http/modules/ngx_http_gzip_static_module.o \
objs/src/http/modules/ngx_http_autoindex_module.o \
objs/src/http/modules/ngx_http_auth_basic_module.o \
objs/src/http/modules/ngx_http_access_module.o \
objs/src/http/modules/ngx_http_limit_conn_module.o \
objs/src/http/modules/ngx_http_limit_req_module.o \
objs/src/http/modules/ngx_http_geo_module.o \
objs/src/http/modules/ngx_http_map_module.o \
objs/src/http/modules/ngx_http_split_clients_module.o \
objs/src/http/modules/ngx_http_referer_module.o \
objs/src/http/modules/ngx_http_rewrite_module.o \
objs/src/http/modules/ngx_http_proxy_module.o \
objs/src/http/modules/ngx_http_fastcgi_module.o \
objs/src/http/modules/ngx_http_uwsgi_module.o \
objs/src/http/modules/ngx_http_scgi_module.o \
objs/src/http/modules/ngx_http_memcached_module.o \
objs/src/http/modules/ngx_http_empty_gif_module.o \
objs/src/http/modules/ngx_http_browser_module.o \
objs/src/http/modules/ngx_http_upstream_hash_module.o \
objs/src/http/modules/ngx_http_upstream_ip_hash_module.o \
objs/src/http/modules/ngx_http_upstream_least_conn_module.o \
objs/src/http/modules/ngx_http_upstream_keepalive_module.o \
objs/addon/src/ngx_http_fastdfs_module.o \
objs/ngx_modules.o \
-lpthread -lcrypt -L/usr/lib -lfastcommon -lfdfsclient -lpcre -lcrypto -lcrypto -lz
make[]: Leaving directory `/usr/local/nginx-1.8.'
make -f objs/Makefile manpage
make[]: Entering directory `/usr/local/nginx-1.8.'
sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
-e "s|%%PID_PATH%%|/var/run/nginx/nginx.pid|" \
-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
-e "s|%%ERROR_LOG_PATH%%|/var/log/nginx/error.log|" \
< man/nginx. > objs/nginx.
make[]: Leaving directory `/usr/local/nginx-1.8.'
make -f objs/Makefile install
make[]: Entering directory `/usr/local/nginx-1.8.'
test -d '/usr/local/nginx' || mkdir -p '/usr/local/nginx'
test -d '/usr/local/nginx/sbin' || mkdir -p '/usr/local/nginx/sbin'
test ! -f '/usr/local/nginx/sbin/nginx' || mv '/usr/local/nginx/sbin/nginx' '/usr/local/nginx/sbin/nginx.old'
cp objs/nginx '/usr/local/nginx/sbin/nginx'
test -d '/usr/local/nginx/conf' || mkdir -p '/usr/local/nginx/conf'
cp conf/koi-win '/usr/local/nginx/conf'
cp conf/koi-utf '/usr/local/nginx/conf'
cp conf/win-utf '/usr/local/nginx/conf'
test -f '/usr/local/nginx/conf/mime.types' || cp conf/mime.types '/usr/local/nginx/conf'
cp conf/mime.types '/usr/local/nginx/conf/mime.types.default'
test -f '/usr/local/nginx/conf/fastcgi_params' || cp conf/fastcgi_params '/usr/local/nginx/conf'
cp conf/fastcgi_params '/usr/local/nginx/conf/fastcgi_params.default'
test -f '/usr/local/nginx/conf/fastcgi.conf' || cp conf/fastcgi.conf '/usr/local/nginx/conf'
cp conf/fastcgi.conf '/usr/local/nginx/conf/fastcgi.conf.default'
test -f '/usr/local/nginx/conf/uwsgi_params' || cp conf/uwsgi_params '/usr/local/nginx/conf'
cp conf/uwsgi_params '/usr/local/nginx/conf/uwsgi_params.default'
test -f '/usr/local/nginx/conf/scgi_params' || cp conf/scgi_params '/usr/local/nginx/conf'
cp conf/scgi_params '/usr/local/nginx/conf/scgi_params.default'
test -f '/usr/local/nginx/conf/nginx.conf' || cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf'
cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf.default'
test -d '/var/run/nginx' || mkdir -p '/var/run/nginx'
test -d '/var/log/nginx' || mkdir -p '/var/log/nginx'
test -d '/usr/local/nginx/html' || cp -R html '/usr/local/nginx'
test -d '/var/log/nginx' || mkdir -p '/var/log/nginx'
make[]: Leaving directory `/usr/local/nginx-1.8.'
5.4、nginx配置文件。
新建一个nginx配置文件nginx-fdfs.conf。
添加server:
[root@localhost src]# cd /usr/local/
[root@localhost local]# ls
bin FastDFS fastdfs-nginx-module_v1..tar.gz games lib libfastcommon-1.0. nginx nginx-1.8..tar.gz share
etc fastdfs-nginx-module FastDFS_v5..tar.gz include libexec libfastcommonV1.0.7.tar.gz nginx-1.8. sbin src
[root@localhost local]# cd nginx
[root@localhost nginx]# ls
conf html sbin
[root@localhost nginx]# cd conf/
[root@localhost conf]# ls
fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi_params win-utf
fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default
[root@localhost conf]# vim nginx-fdfs.conf
[root@localhost conf]#
操作如下所示:
配置如下所示:
说明:
server_name指定本机ip
location /group1/M00/:group1为nginx 服务FastDFS的分组名称,M00是FastDFS自动生成编号,对应store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定义store_path1,这里就是M01。
server {
listen ;
server_name 192.168.110.141; location /group1/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
nginx-fdfs.conf完整配置如下所示:
user root; # user 代表访问权限是什么,就是通过 nginx 访问 linux 服务器中文件时,使用的用户权限 worker_processes ; # 工作流程id events {
worker_connections ;
} http {
include mime.types; # 加载响应类型
default_type application/octet-stream; # 默认使用 IO 流实现请求/应答
sendfile on; # 是否支持文件传输
keepalive_timeout ; # 心跳监测。
server {
listen ;
server_name 192.168.110.141;
location /group1/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
error_page /50x.html;
location = /50x.html {
root html;
}
}
}
6、上传图片测试。
FastDFS安装成功可通过/usr/bin/fdfs_test测试上传、下载等操作。
修改/etc/fdfs/client.conf
[root@localhost ~]# vim /etc/fdfs/client.conf
base_path=/home/FastDFS
tracker_server=192.168.110.141:22122
[root@localhost ~]# cat /etc/fdfs/client.conf
# connect timeout in seconds
# default value is 30s
connect_timeout= # network timeout in seconds
# default value is 30s
network_timeout= # the base path to store log files
# base_path=/home/yuqing/fastdfs
base_path=/home/FastDFS # tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# tracker_server=192.168.0.197:
tracker_server=192.168.110.141:22122 #standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info # if use connection pool
# default value is false
# since V4.
use_connection_pool = false # connections whose the idle time exceeds this time will be closed
# unit: second
# default value is
# since V4.
connection_pool_max_idle_time = # if load FastDFS parameters from tracker server
# since V4.
# default value is false
load_fdfs_parameters_from_tracker=false # if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.
use_storage_id = false # specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.
storage_ids_filename = storage_ids.conf #HTTP settings
http.tracker_server_port= #use "#include" directive to include HTTP other settiongs
##include http.conf [root@localhost ~]#
执行效果如下所示:
使用格式:
/usr/bin/fdfs_test 客户端配置文件地址 upload 上传文件
比如将/home下的图片上传到FastDFS中:
[root@localhost ~]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/1.jpg
或者这样上传图片也是一样的。
[root@localhost 00]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/1.jpg
group1/M00/00/00/wKhujV1ONISAGqBNAAO8BX6Ln_A360.jpg
[root@localhost ~]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/.jpg
This is FastDFS client test program v5. Copyright (C) , Happy Fish / YuQing FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/
for more detail. [-- ::] DEBUG - base_path=/home/FastDFS, connect_timeout=, network_timeout=, tracker_server_count=, anti_steal_token=, anti_steal_secret_key length=, use_connection_pool=, g_connection_pool_max_idle_time=3600s, use_storage_id=, storage server id count: tracker_query_storage_store_list_without_group:
server . group_name=, ip_addr=192.168.110.141, port= group_name=group1, ip_addr=192.168.110.141, port=
storage_upload_by_filename
group_name=group1, remote_filename=M00///wKhujV1NRk2ACyZPAAO8BX6Ln_A114.jpg
source ip address: 192.168.110.141
file timestamp=-- ::
file size=
file crc32=
example file url: http://192.168.110.141/group1/M00/00/00/wKhujV1NRk2ACyZPAAO8BX6Ln_A114.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00///wKhujV1NRk2ACyZPAAO8BX6Ln_A114_big.jpg
source ip address: 192.168.110.141
file timestamp=-- ::
file size=
file crc32=
example file url: http://192.168.110.141/group1/M00/00/00/wKhujV1NRk2ACyZPAAO8BX6Ln_A114_big.jpg
[root@localhost ~]#
http://192.168.110.141/group1/M00/00/00/wKhujV1NRk2ACyZPAAO8BX6Ln_A114_big.jpg就是文件的下载路径。
对应storage服务器上的。
/home/fastdfs/fdfs_storage/data/00/00/wKhujV1NRk2ACyZPAAO8BX6Ln_A114.jpg文件。
和nginx整合完毕可以使用http下载。但是我的报了404界面。如下所示。
然后修改了。这个时候有点绝望了,百度了很多教程,检查了很多次,基本搞了一天了,绝望的一笔啊。还是报404,这个时候可能难受,发现自己菜的一毛,但是能放弃吗,哎,我大概捋一下步骤和解决的过程吧。
No1,首选看一下各个配置文件的路径吧。
tracker.conf配置文件修改配置如下所示:
[root@localhost fdfs]# cd /etc/fdfs
[root@localhost fdfs]# vim tracker.conf
base_path=/home/FastDFS
tracker.conf配置文件修改配置如下所示:
[root@localhost fdfs]# vim storage.conf
group_name=group1
base_path=/home/FastDFS
store_path0=/home/FastDFS/fdfs_storage
tracker_server=192.168.110.141:
http.server_port=80 # #跟你在nginx.conf配置的舰艇端口号保持一致,并且为了可以省略不写端口号,建议改成80
client.conf配置文件修改配置如下所示:
[root@localhost fdfs]# vim client.conf
base_path=/home/FastDFS
tracker_server=192.168.110.141:
mod_fastdfs.conf配置文件修改配置如下所示:
[root@localhost fdfs]# vim mod_fastdfs.conf
base_path=/home/FastDFS
tracker_server=192.168.110.141:
url_have_group_name = true #url中包含group名称
store_path0=/home/FastDFS/fdfs_storage
下面看一下上面频繁用到的这个文件夹,最后效果是这样的。mkdir FastDFS、mkdir fdfs_storage文件夹是自己创建的。
显而易见,文件是上传成功的,那么说明你搭建的fastdfs是成功的了,下载不了,所以检查一下文件路径是否正常以后,就不要再纠结你的fastdfs搭建了,如果路径都正常,90%就是和nginx整合出的问题了,可能是你配置fastdfs和nginx整合的时候出了问题,现在分析一下啊可能出现的问题。
先说明一下我是这样上传文件的,先将图片拷贝到了/home目录下面,就是下面这个幂幂,然后使用该命令进行上传图片。
[root@localhost fdfs]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/.jpg
This is FastDFS client test program v5. Copyright (C) , Happy Fish / YuQing FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/
for more detail. [-- ::] DEBUG - base_path=/home/FastDFS, connect_timeout=, network_timeout=, tracker_server_count=, anti_steal_token=, anti_steal_secret_key length=, use_connection_pool=, g_connection_pool_max_idle_time=3600s, use_storage_id=, storage server id count: tracker_query_storage_store_list_without_group:
server . group_name=, ip_addr=192.168.110.141, port= group_name=group1, ip_addr=192.168.110.141, port=
storage_upload_by_filename
group_name=group1, remote_filename=M00///wKhujV1OdUaAG8JLAAC78d32NX8446.jpg
source ip address: 192.168.110.141
file timestamp=-- ::
file size=
file crc32=
example file url: http://192.168.110.141/group1/M00/00/00/wKhujV1OdUaAG8JLAAC78d32NX8446.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00///wKhujV1OdUaAG8JLAAC78d32NX8446_big.jpg
source ip address: 192.168.110.141
file timestamp=-- ::
file size=
file crc32=
example file url: http://192.168.110.141/group1/M00/00/00/wKhujV1OdUaAG8JLAAC78d32NX8446_big.jpg
[root@localhost fdfs]#
然后你访问的效果如下所示:
下面分析一下整合过程中可能出现的问题。
No2,分析和fastdfs整合的部分。好多小伙伴都说我的nginx.conf添加了user root;还是报404,找不到路径,下载不了图片,也是郁闷,我开始也是报404,找不到路径,下载不了图片,因为一开始我创建的文件是nginx-fdfs.conf,后来我就将nginx-fdfs.conf_back文件改成了nginx.conf。
nginx.conf就是下面这样配置的,注意下面这段配置,你可能百度一下,配置都是五花八门的,我就是这样配置的,可以正常访问。
location /group1/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
[root@localhost nginx]# ls
conf html sbin
[root@localhost nginx]# cd conf/
[root@localhost conf]# ls
fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf nginx.conf.default scgi_params uwsgi_params win-utf
fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf_back nginx-fdfs.conf_back scgi_params.default uwsgi_params.default
[root@localhost conf]# vim nginx.conf
[root@localhost conf]# cat nginx.conf
user root; #user nobody;
worker_processes ; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout ;
keepalive_timeout ; #gzip on; server {
listen ;
server_name 192.168.110.141; #charset koi8-r; #access_log logs/host.access.log main; #location / {
# root html;
# index index.html index.htm;
#} location /group1/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
} #error_page /.html; # redirect server error pages to the static page /50x.html
#
error_page /50x.html;
location = /50x.html {
root html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen ;
# listen somename:;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }
[root@localhost conf]#
当然了,关闭防火墙,是第一时间要想到的问题,所以这个就不细说了。还有说防火墙拦截了端口号,我也没搞到这么深,解决问题了就行。建议默认端口号80。
为了外部可以访问,可以将FastDFS的端口号添加到防火墙可以访问。避免出现防火墙拒绝访问的情况出现。
[root@localhost ~]# vim /etc/sysconfig/iptables
复制这句话,将fastdfs的端口号替换22即可
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
待续......
FastDFS图片服务器(分布式文件系统)学习。的更多相关文章
- 阶段5 3.微服务项目【学成在线】_day08 课程图片管理 分布式文件系统_06-分布式文件系统研究-fastDFS安装及配置文件说明
3 fastDFS入门 3.1fastDFS安装与配置 3.1.1 导入虚拟机 对fastDFS的安装过程不要求学生掌握,可以直接导入老师提供虚拟机. 1.使用Vmware打开虚拟机配置文件“Cent ...
- CentOS7搭建FastDFS V5.11分布式文件系统-第三篇
1.测试 前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解.FastDFS的基础模块都搭好了,现在开始测试下载. 1.1 配置客户端 同样的,需要修改客户端的配置文件: /etc/fdf ...
- FastDFS图片服务器搭建
*FastDFS图片服务器搭建准备:1.需要libfastcommon安装包 选择最新稳定版(libfastcommon-1.0.36.tar.gz)2.需要FastDFS安装包 选择最新稳定版(fa ...
- CentOS7搭建FastDFS V5.11分布式文件系统(三)
1.测试 前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解.FastDFS的基础模块都搭好了,现在开始测试下载. 1.1 配置客户端 同样的,需要修改客户端的配置文件: /etc/fdf ...
- CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程
1.1 FastDFS的应用场景 FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.其中 ...
- java连接Fastdfs图片服务器上传失败的解决方法
照着视频上做,但是却连接不了虚拟机linux上的图片服务器,估计是linux防火墙的问题(这个实在是神烦,前面有好几次连接不了都是因为linux防火墙),果不其然,关闭即可. Linux关闭防火墙的命 ...
- [转帖]FastDFS图片服务器单机安装步骤
FastDFS图片服务器单机安装步骤 https://www.cnblogs.com/yuesf/p/11847103.html 前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDF ...
- CentOS7搭建FastDFS V5.11分布式文件系统-第一篇
1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...
- CentOS7搭建FastDFS V5.11分布式文件系统(一)
1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...
随机推荐
- java基础(29):JDBC、DBUtils
1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- GitHub 2019年年度报告:Python最受欢迎,VScode贡献者高达19.1K
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 开源最前线(ID:OpenSourceTop) PS:如有需要Pyt ...
- String substring(int start,int end)截取当前字符串中指定范围内的字符串
package seday01;/** * String substring(int start,int end) * 截取当前字符串中指定范围内的字符串. * java api有一个特点:通常用两个 ...
- MySQL学习——查询表里的数据
MySQL学习——查询表里的数据 摘要:本文主要学习了使用DQL语句查询表里数据的方法. 数据查询 语法 select [distinct] 列1 [as '别名1'], ..., 列n [as '别 ...
- HTML语法规范
HTML语法规范 语法规范概述 HTML标签是由尖括号包围的关键词,例如<html> HTML标签通常是成对出现的,例如<html> 和</html> ,我们成为双 ...
- E203 CSR rtl实现分析
CSR状态控制寄存器,每个hart都有自己的CSR.对于每个hart,可以配置的状态寄存器是4k.CSR寄存器的功能见:https://www.cnblogs.com/mikewolf2002/p/1 ...
- Qt在window下的环境变量PATH的配置
Qt在window下的环境变量PATH的配置 路劲: C:\Qt\Qt5.6.0\5.6\mingw49_32\bin C:\Qt\Qt5.6.0\Tools\mingw492_32\bin 发布Qt ...
- 配置文件对数据库url的配置
jdbc:mysql://localhost:3306/db_film?serverTimezone=UTC&useUnicode=true&characterEncoding=utf ...
- (转)SpringMVC表单多对象传递小技巧——@InitBinder
转:https://www.jianshu.com/p/59771cbf373d 1.问题情景 项目中前端后台的数据传递是必不可少的,比如说我们要在一张表单中提交对象,如果只是一个对象就就很好做,因为 ...
- 全网最新方法:win10下如何安装和配置64位JDK-13
1.下载JDK-13 下载链接:https://www.oracle.com/technetwork/java/javase/downloads/index.html 2.安装JDK-13 双击下图的 ...