From 8e6b4d6bf09bf7271076eb47ebc86e6060859882 Mon Sep 17 00:00:00 2001
From: raymond <88563128@qq.com>
Date: Wed, 25 May 2022 15:13:18 +0800
Subject: [PATCH] add shell files
---
LICENSE | 674 +++++++
README.md | 4 +-
chrony/install_chrony_client.sh | 42 +
chrony/install_chrony_server.sh | 42 +
containerd/install_containerd.sh | 106 +
containerd/install_containerd_binary.sh | 125 ++
docker/install_docker.sh | 111 ++
docker/install_docker_binary.sh | 115 ++
haproxy/install_haproxy.sh | 131 ++
.../install_docker_binary_compose_harbor.sh | 180 ++
...tall_docker_binary_compose_harbor_https.sh | 189 ++
harbor/install_docker_compose_harbor.sh | 181 ++
harbor/install_docker_compose_harbor_https.sh | 190 ++
java11/install_jdk_11.sh | 51 +
java8/install_jdk_8.sh | 51 +
keepalived/install_keepalived_backup.sh | 133 ++
keepalived/install_keepalived_master.sh | 132 ++
reset/README.md | 11 +
reset/reset.sh | 1528 +++++++++++++++
reset/reset_v2.sh | 1609 ++++++++++++++++
reset/reset_v3.sh | 1714 +++++++++++++++++
ssh_key/ssh_key.sh | 57 +
ssh_key/ssh_key_push.sh | 48 +
颁发证书/certificate.sh | 25 +
颁发证书/certificate2.sh | 68 +
25 files changed, 7516 insertions(+), 1 deletion(-)
create mode 100644 LICENSE
create mode 100644 chrony/install_chrony_client.sh
create mode 100644 chrony/install_chrony_server.sh
create mode 100644 containerd/install_containerd.sh
create mode 100644 containerd/install_containerd_binary.sh
create mode 100644 docker/install_docker.sh
create mode 100644 docker/install_docker_binary.sh
create mode 100644 haproxy/install_haproxy.sh
create mode 100644 harbor/install_docker_binary_compose_harbor.sh
create mode 100644 harbor/install_docker_binary_compose_harbor_https.sh
create mode 100644 harbor/install_docker_compose_harbor.sh
create mode 100644 harbor/install_docker_compose_harbor_https.sh
create mode 100644 java11/install_jdk_11.sh
create mode 100644 java8/install_jdk_8.sh
create mode 100644 keepalived/install_keepalived_backup.sh
create mode 100644 keepalived/install_keepalived_master.sh
create mode 100644 reset/README.md
create mode 100644 reset/reset.sh
create mode 100644 reset/reset_v2.sh
create mode 100644 reset/reset_v3.sh
create mode 100644 ssh_key/ssh_key.sh
create mode 100644 ssh_key/ssh_key_push.sh
create mode 100644 颁发证书/certificate.sh
create mode 100644 颁发证书/certificate2.sh
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README.md b/README.md
index b548252..1ae42e5 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
-# shell
+生产中常用的各种服务shell脚本,目前只写了chrony(时间同步)服务脚本、kubernetes的runtime运行时containerd服务脚本、docker服务脚本、haproxy(负载均衡)服务脚本、harbor(私有镜像仓库)服务脚本、java8和11服务脚本、keepalived(高可用)服务脚本、reset(系统初始化)脚本、ssh_key(ssh基于key验证)脚本、https的证书颁发脚本,后续会继续更新
+
+reset脚本说明:https://gitee.com/raymond9/shell/blob/master/reset/README.md
diff --git a/chrony/install_chrony_client.sh b/chrony/install_chrony_client.sh
new file mode 100644
index 0000000..ad06276
--- /dev/null
+++ b/chrony/install_chrony_client.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-11-22
+#FileName: install_chrony_client.sh
+#URL: raymond.blog.csdn.net
+#Description: install_chrony_client for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+SERVER=172.31.1.8
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+}
+
+install_chrony(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ yum -y install chrony &> /dev/null
+ sed -i -e '/^pool.*/d' -e '/^server.*/d' -e '/^# Please consider .*/a\server '${SERVER}' iburst' /etc/chrony.conf
+ systemctl enable --now chronyd &> /dev/null
+ systemctl is-active chronyd &> /dev/null || { ${COLOR}"chrony 启动失败,退出!"${END} ; exit; }
+ ${COLOR}"chrony安装完成"${END}
+ else
+ apt -y install chrony &> /dev/null
+ sed -i -e '/^pool.*/d' -e '/^# See http:.*/a\server '${SERVER}' iburst' /etc/chrony/chrony.conf
+ systemctl enable --now chronyd &> /dev/null
+ systemctl is-active chronyd &> /dev/null || { ${COLOR}"chrony 启动失败,退出!"${END} ; exit; }
+ systemctl restart chronyd
+ ${COLOR}"chrony安装完成"${END}
+ fi
+}
+
+main(){
+ os
+ install_chrony
+}
+
+main
diff --git a/chrony/install_chrony_server.sh b/chrony/install_chrony_server.sh
new file mode 100644
index 0000000..18a6c1f
--- /dev/null
+++ b/chrony/install_chrony_server.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-11-22
+#FileName: install_chrony_server.sh
+#URL: raymond.blog.csdn.net
+#Description: install_chrony_server for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+}
+
+install_chrony(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ yum -y install chrony &> /dev/null
+ sed -i -e '/^pool.*/d' -e '/^server.*/d' -e '/^# Please consider .*/a\server ntp.aliyun.com iburst\nserver time1.cloud.tencent.com iburst\nserver ntp.tuna.tsinghua.edu.cn iburst' -e 's@^#allow.*@allow 0.0.0.0/0@' -e 's@^#local.*@local stratum 10@' /etc/chrony.conf
+ systemctl enable --now chronyd &> /dev/null
+ systemctl is-active chronyd &> /dev/null || { ${COLOR}"chrony 启动失败,退出!"${END} ; exit; }
+ ${COLOR}"chrony安装完成"${END}
+ else
+ apt -y install chrony &> /dev/null
+ sed -i -e '/^pool.*/d' -e '/^# See http:.*/a\server ntp.aliyun.com iburst\nserver time1.cloud.tencent.com iburst\nserver ntp.tuna.tsinghua.edu.cn iburst' /etc/chrony/chrony.conf
+ echo "allow 0.0.0.0/0" >> /etc/chrony/chrony.conf
+ echo "local stratum 10" >> /etc/chrony/chrony.conf
+ systemctl enable --now chronyd &> /dev/null
+ systemctl is-active chronyd &> /dev/null || { ${COLOR}"chrony 启动失败,退出!"${END} ; exit; }
+ ${COLOR}"chrony安装完成"${END}
+ fi
+}
+
+main(){
+ os
+ install_chrony
+}
+
+main
diff --git a/containerd/install_containerd.sh b/containerd/install_containerd.sh
new file mode 100644
index 0000000..30e31ec
--- /dev/null
+++ b/containerd/install_containerd.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2022-04-22
+#FileName: install_containerd.sh
+#URL: raymond.blog.csdn.net
+#Description: install_containerd for centos 7/8 & ubuntu 18.04/20.04 Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+DOCKER_VERSION=20.10.14
+URL='mirrors.cloud.tencent.com'
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+}
+
+ubuntu_install_docker(){
+ dpkg -s docker-ce &>/dev/null && ${COLOR}"Docker已安装,退出"${END} && exit
+ ${COLOR}"开始安装DOCKER依赖包"${END}
+ apt update &> /dev/null
+ apt -y install apt-transport-https ca-certificates curl software-properties-common &> /dev/null
+ curl -fsSL https://${URL}/docker-ce/linux/ubuntu/gpg | sudo apt-key add - &> /dev/null
+ add-apt-repository "deb [arch=amd64] https://${URL}/docker-ce/linux/ubuntu $(lsb_release -cs) stable" &> /dev/null
+ apt update &> /dev/null
+
+ ${COLOR}"Docker有以下版本"${END}
+ apt-cache madison docker-ce
+ ${COLOR}"10秒后即将安装:Docker-"${DOCKER_VERSION}"版本......"${END}
+ ${COLOR}"如果想安装其它Docker版本,请按Ctrl+c键退出,修改版本再执行"${END}
+ sleep 10
+
+ ${COLOR}"开始安装DOCKER"${END}
+ apt -y install docker-ce=5:${DOCKER_VERSION}~3-0~ubuntu-$(lsb_release -cs) docker-ce-cli=5:${DOCKER_VERSION}~3-0~ubuntu-$(lsb_release -cs) &> /dev/null || { ${COLOR}"apt源失败,请检查apt配置"${END};exit; }
+}
+
+centos_install_docker(){
+ rpm -q docker-ce &> /dev/null && ${COLOR}"Docker已安装,退出"${END} && exit
+
+ ${COLOR}"开始安装DOCKER依赖包"${END}
+ yum -y install yum-utils &> /dev/null
+ yum-config-manager --add-repo https://${URL}/docker-ce/linux/centos/docker-ce.repo &> /dev/null
+ sed -i 's+download.docker.com+'''${URL}'''/docker-ce+' /etc/yum.repos.d/docker-ce.repo
+ yum clean all &> /dev/null
+ yum makecache &> /dev/null
+
+ ${COLOR}"Docker有以下版本"${END}
+ yum list docker-ce.x86_64 --showduplicates
+ ${COLOR}"10秒后即将安装:Docker-"${DOCKER_VERSION}"版本......"${END}
+ ${COLOR}"如果想安装其它Docker版本,请按Ctrl+c键退出,修改版本再执行"${END}
+ sleep 10
+
+ ${COLOR}"开始安装DOCKER"${END}
+ yum -y install docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} &> /dev/null || { ${COLOR}"yum源失败,请检查yum配置"${END};exit; }
+}
+
+config_containerd(){
+ cat > /etc/modules-load.d/containerd.conf <<-EOF
+overlay
+br_netfilter
+EOF
+ modprobe -- overlay
+ modprobe -- br_netfilter
+
+ cat > /etc/sysctl.d/99-kubernetes-cri.conf <<-EOF
+net.bridge.bridge-nf-call-iptables = 1
+net.ipv4.ip_forward = 1
+net.bridge.bridge-nf-call-ip6tables = 1
+EOF
+ sysctl --system &> /dev/null
+
+ mkdir -p /etc/containerd
+ containerd config default | tee /etc/containerd/config.toml &> /dev/null
+ sed -ri 's/(.*SystemdCgroup = ).*/\1true/' /etc/containerd/config.toml
+ sed -ri 's@(.*sandbox_image = ).*@\1\"registry.aliyuncs.com/google_containers/pause:3.6\"@' /etc/containerd/config.toml
+ sed -i '/.*registry.mirrors.*/a\ [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n endpoint = ["https://registry.docker-cn.com" ,"http://hub-mirror.c.163.com" ,"https://docker.mirrors.ustc.edu.cn"]' /etc/containerd/config.toml
+ systemctl daemon-reload && systemctl enable --now containerd &> /dev/null
+ cat > /etc/crictl.yaml <<-EOF
+runtime-endpoint: unix:///run/containerd/containerd.sock
+image-endpoint: unix:///run/containerd/containerd.sock
+timeout: 10
+debug: false
+EOF
+ systemctl is-active containerd &> /dev/null && ${COLOR}"Containerd 服务启动成功"${END} || { ${COLOR}"Containerd 启动失败"${END};exit; }
+ ctr version && ${COLOR}"Containerd 安装成功"${END} || ${COLOR}"Containerd 安装失败"${END}
+}
+
+set_alias(){
+ echo 'alias rmi="ctr images list -q|xargs ctr images rm"' >> ~/.bashrc
+}
+
+main(){
+ os
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ centos_install_docker
+ else
+ ubuntu_install_docker
+ fi
+ config_containerd
+ set_alias
+}
+
+main
diff --git a/containerd/install_containerd_binary.sh b/containerd/install_containerd_binary.sh
new file mode 100644
index 0000000..046a0e4
--- /dev/null
+++ b/containerd/install_containerd_binary.sh
@@ -0,0 +1,125 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2022-04-22
+#FileName: install_containerd_binary.sh
+#URL: raymond.blog.csdn.net
+#Description: install_containerd_binary for centos 7/8 & ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+URL='https://mirrors.cloud.tencent.com/docker-ce/linux/static/stable/x86_64/'
+DOCKER_FILE=docker-20.10.14.tgz
+HARBOR_DOMAIN=harbor.raymonds.cc
+USERNAME=admin
+PASSWORD=123456
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
+ if [ ! -e ${DOCKER_FILE} ];then
+ ${COLOR}"缺少${DOCKER_FILE}文件,如果是离线包,请把文件放到${SRC_DIR}目录下"${END}
+ ${COLOR}'开始下载DOCKER二进制安装包'${END}
+ wget ${URL}${DOCKER_FILE} || { ${COLOR}"DOCKER二进制安装包下载失败"${END}; exit; }
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install(){
+ [ -f /usr/bin/containerd ] && { ${COLOR}"Containerd已存在,安装失败"${END};exit; }
+ ${COLOR}"开始安装Containerd..."${END}
+ tar xf ${DOCKER_FILE}
+ mv docker/* /usr/bin/
+ cat > /lib/systemd/system/containerd.service <<-EOF
+# Copyright The containerd Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[Unit]
+Description=containerd container runtime
+Documentation=https://containerd.io
+After=network.target local-fs.target
+
+[Service]
+ExecStartPre=-/sbin/modprobe overlay
+ExecStart=/usr/bin/containerd
+
+Type=notify
+Delegate=yes
+KillMode=process
+Restart=always
+RestartSec=5
+# Having non-zero Limit*s causes performance problems due to accounting overhead
+# in the kernel. We recommend using cgroups to do container-local accounting.
+LimitNPROC=infinity
+LimitCORE=infinity
+LimitNOFILE=infinity
+# Comment TasksMax if your systemd version does not supports it.
+# Only systemd 226 and above support this version.
+TasksMax=infinity
+OOMScoreAdjust=-999
+
+[Install]
+WantedBy=multi-user.target
+EOF
+ cat > /etc/modules-load.d/containerd.conf <<-EOF
+overlay
+br_netfilter
+EOF
+ modprobe -- overlay
+ modprobe -- br_netfilter
+
+ cat > /etc/sysctl.d/99-kubernetes-cri.conf <<-EOF
+net.bridge.bridge-nf-call-iptables = 1
+net.ipv4.ip_forward = 1
+net.bridge.bridge-nf-call-ip6tables = 1
+EOF
+ sysctl --system &> /dev/null
+
+ mkdir -p /etc/containerd
+ containerd config default | tee /etc/containerd/config.toml &> /dev/null
+ sed -ri 's/(.*SystemdCgroup = ).*/\1true/' /etc/containerd/config.toml
+ sed -ri 's@(.*sandbox_image = ).*@\1\"registry.aliyuncs.com/google_containers/pause:3.6\"@' /etc/containerd/config.toml
+ sed -i '/.*registry.mirrors.*/a\ [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n endpoint = ["https://registry.docker-cn.com" ,"http://hub-mirror.c.163.com" ,"https://docker.mirrors.ustc.edu.cn"]' /etc/containerd/config.toml
+ systemctl daemon-reload && systemctl enable --now containerd &> /dev/null
+ cat > /etc/crictl.yaml <<-EOF
+runtime-endpoint: unix:///run/containerd/containerd.sock
+image-endpoint: unix:///run/containerd/containerd.sock
+timeout: 10
+debug: false
+EOF
+ systemctl is-active containerd &> /dev/null && ${COLOR}"Containerd 服务启动成功"${END} || { ${COLOR}"Containerd 启动失败"${END};exit; }
+ ctr version && ${COLOR}"Containerd 安装成功"${END} || ${COLOR}"Containerd 安装失败"${END}
+}
+
+set_alias(){
+ echo 'alias rmi="ctr images list -q|xargs ctr images rm"' >> ~/.bashrc
+}
+
+main(){
+ os
+ check_file
+ install
+ set_alias
+}
+
+main
diff --git a/docker/install_docker.sh b/docker/install_docker.sh
new file mode 100644
index 0000000..5aab1cc
--- /dev/null
+++ b/docker/install_docker.sh
@@ -0,0 +1,111 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-07
+#FileName: install_docker.sh
+#URL: raymond.blog.csdn.net
+#Description: install_docker for centos 7/8 & ubuntu 18.04/20.04 Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+DOCKER_VERSION=20.10.11
+URL='mirrors.cloud.tencent.com'
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+}
+
+ubuntu_install_docker(){
+ dpkg -s docker-ce &>/dev/null && ${COLOR}"Docker已安装,退出"${END} && exit
+ ${COLOR}"开始安装DOCKER依赖包"${END}
+ apt update &> /dev/null
+ apt -y install apt-transport-https ca-certificates curl software-properties-common &> /dev/null
+ curl -fsSL https://${URL}/docker-ce/linux/ubuntu/gpg | sudo apt-key add - &> /dev/null
+ add-apt-repository "deb [arch=amd64] https://${URL}/docker-ce/linux/ubuntu $(lsb_release -cs) stable" &> /dev/null
+ apt update &> /dev/null
+
+ ${COLOR}"Docker有以下版本"${END}
+ apt-cache madison docker-ce
+ ${COLOR}"10秒后即将安装:Docker-"${DOCKER_VERSION}"版本......"${END}
+ ${COLOR}"如果想安装其它Docker版本,请按Ctrl+c键退出,修改版本再执行"${END}
+ sleep 10
+
+ ${COLOR}"开始安装DOCKER"${END}
+ apt -y install docker-ce=5:${DOCKER_VERSION}~3-0~ubuntu-$(lsb_release -cs) docker-ce-cli=5:${DOCKER_VERSION}~3-0~ubuntu-$(lsb_release -cs) &> /dev/null || { ${COLOR}"apt源失败,请检查apt配置"${END};exit; }
+}
+
+centos_install_docker(){
+ rpm -q docker-ce &> /dev/null && ${COLOR}"Docker已安装,退出"${END} && exit
+
+ ${COLOR}"开始安装DOCKER依赖包"${END}
+ yum -y install yum-utils &> /dev/null
+ yum-config-manager --add-repo https://${URL}/docker-ce/linux/centos/docker-ce.repo &> /dev/null
+ sed -i 's+download.docker.com+'''${URL}'''/docker-ce+' /etc/yum.repos.d/docker-ce.repo
+ yum clean all &> /dev/null
+ yum makecache &> /dev/null
+
+ ${COLOR}"Docker有以下版本"${END}
+ yum list docker-ce.x86_64 --showduplicates
+ ${COLOR}"10秒后即将安装:Docker-"${DOCKER_VERSION}"版本......"${END}
+ ${COLOR}"如果想安装其它Docker版本,请按Ctrl+c键退出,修改版本再执行"${END}
+ sleep 10
+
+ ${COLOR}"开始安装DOCKER"${END}
+ yum -y install docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} &> /dev/null || { ${COLOR}"yum源失败,请检查yum配置"${END};exit; }
+}
+
+mirror_accelerator(){
+ mkdir -p /etc/docker
+ tee /etc/docker/daemon.json <<-'EOF'
+{
+ "registry-mirrors": [
+ "https://hzw5xiv7.mirror.aliyuncs.com",
+ "https://docker.mirrors.ustc.edu.cn",
+ "http://f1361db2.m.daocloud.io",
+ "https://registry.docker-cn.com",
+ "https://dockerhub.azk8s.cn",
+ "https://reg-mirror.qiniu.com",
+ "https://hub-mirror.c.163.com",
+ "https://mirror.ccs.tencentyun.com"
+ ]
+}
+EOF
+ systemctl daemon-reload
+ systemctl enable --now docker
+ systemctl is-active docker &> /dev/null && ${COLOR}"Docker 服务启动成功"${END} || { ${COLOR}"Docker 启动失败"${END};exit; }
+ docker version && ${COLOR}"Docker 安装成功"${END} || ${COLOR}"Docker 安装失败"${END}
+}
+
+set_alias(){
+ echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc
+ echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
+}
+
+set_swap_limit(){
+ if [ ${OS_ID} == "Ubuntu" ];then
+ ${COLOR}'设置Docker的"WARNING: No swap limit support"警告'${END}
+ sed -ri '/^GRUB_CMDLINE_LINUX=/s@"$@ swapaccount=1"@' /etc/default/grub
+ update-grub &> /dev/null
+ ${COLOR}"10秒后,机器会自动重启"${END}
+ sleep 10
+ reboot
+ fi
+}
+
+main(){
+ os
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ centos_install_docker
+ else
+ ubuntu_install_docker
+ fi
+ mirror_accelerator
+ set_alias
+ set_swap_limit
+}
+
+main
diff --git a/docker/install_docker_binary.sh b/docker/install_docker_binary.sh
new file mode 100644
index 0000000..bdff4b0
--- /dev/null
+++ b/docker/install_docker_binary.sh
@@ -0,0 +1,115 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-07
+#FileName: install_docker_binary.sh
+#URL: raymond.blog.csdn.net
+#Description: install_docker_binary for centos 7/8 & ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+URL='https://mirrors.cloud.tencent.com/docker-ce/linux/static/stable/x86_64/'
+DOCKER_FILE=docker-20.10.9.tgz
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
+ if [ ! -e ${DOCKER_FILE} ];then
+ ${COLOR}"缺少${DOCKER_FILE}文件,如果是离线包,请把文件放到${SRC_DIR}目录下"${END}
+ ${COLOR}'开始下载DOCKER二进制安装包'${END}
+ wget ${URL}${DOCKER_FILE} || { ${COLOR}"DOCKER二进制安装包下载失败"${END}; exit; }
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install(){
+ [ -f /usr/bin/docker ] && { ${COLOR}"DOCKER已存在,安装失败"${END};exit; }
+ ${COLOR}"开始安装DOCKER..."${END}
+ tar xf ${DOCKER_FILE}
+ mv docker/* /usr/bin/
+ cat > /lib/systemd/system/docker.service <<-EOF
+[Unit]
+Description=Docker Application Container Engine
+Documentation=https://docs.docker.com
+After=network-online.target firewalld.service
+Wants=network-online.target
+
+[Service]
+Type=notify
+# the default is not to use systemd for cgroups because the delegate issues still
+# exists and systemd currently does not support the cgroup feature set required
+# for containers run by docker
+ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock
+ExecReload=/bin/kill -s HUP \$MAINPID
+# Having non-zero Limit*s causes performance problems due to accounting overhead
+# in the kernel. We recommend using cgroups to do container-local accounting.
+LimitNOFILE=infinity
+LimitNPROC=infinity
+LimitCORE=infinity
+# Uncomment TasksMax if your systemd version supports it.
+# Only systemd 226 and above support this version.
+#TasksMax=infinity
+TimeoutStartSec=0
+# set delegate yes so that systemd does not reset the cgroups of docker containers
+Delegate=yes
+# kill only the docker process, not all processes in the cgroup
+KillMode=process
+# restart the docker process if it exits prematurely
+Restart=on-failure
+StartLimitBurst=3
+StartLimitInterval=60s
+
+[Install]
+WantedBy=multi-user.target
+EOF
+ mkdir -p /etc/docker
+ tee /etc/docker/daemon.json <<-'EOF'
+{
+ "registry-mirrors": [
+ "https://hzw5xiv7.mirror.aliyuncs.com",
+ "https://docker.mirrors.ustc.edu.cn",
+ "http://f1361db2.m.daocloud.io",
+ "https://registry.docker-cn.com",
+ "https://dockerhub.azk8s.cn",
+ "https://reg-mirror.qiniu.com",
+ "https://hub-mirror.c.163.com",
+ "https://mirror.ccs.tencentyun.com"
+ ]
+}
+EOF
+ echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc
+ echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
+ systemctl daemon-reload
+ systemctl enable --now docker &> /dev/null
+ systemctl is-active docker &> /dev/null && ${COLOR}"Docker 服务启动成功"${END} || { ${COLOR}"Docker 启动失败"${END};exit; }
+ docker version && ${COLOR}"Docker 安装成功"${END} || ${COLOR}"Docker 安装失败"${END}
+}
+
+set_swap_limit(){
+ if [ ${OS_ID} == "Ubuntu" ];then
+ ${COLOR}'设置Docker的"WARNING: No swap limit support"警告'${END}
+ sed -ri '/^GRUB_CMDLINE_LINUX=/s@"$@ swapaccount=1"@' /etc/default/grub
+ update-grub &> /dev/null
+ ${COLOR}"10秒后,机器会自动重启"${END}
+ sleep 10
+ reboot
+ fi
+}
+
+main(){
+ os
+ check_file
+ install
+ set_swap_limit
+}
+
+main
diff --git a/haproxy/install_haproxy.sh b/haproxy/install_haproxy.sh
new file mode 100644
index 0000000..4dafa72
--- /dev/null
+++ b/haproxy/install_haproxy.sh
@@ -0,0 +1,131 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-29
+#FileName: install_haproxy.sh
+#URL: raymond.blog.csdn.net
+#Description: The test script
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`
+
+#lua下载地址:http://www.lua.org/ftp/lua-5.4.3.tar.gz
+LUA_FILE=lua-5.4.3.tar.gz
+
+#haproxy下载地址:https://www.haproxy.org/download/2.4/src/haproxy-2.4.10.tar.gz
+HAPROXY_FILE=haproxy-2.4.10.tar.gz
+HAPROXY_INSTALL_DIR=/apps/haproxy
+
+STATS_AUTH_USER=admin
+STATS_AUTH_PASSWORD=123456
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ ${COLOR}'检查Haproxy相关源码包'${END}
+ if [ ! -e ${LUA_FILE} ];then
+ ${COLOR}"缺少${LUA_FILE}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ elif [ ! -e ${HAPROXY_FILE} ];then
+ ${COLOR}"缺少${HAPROXY_FILE}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install_haproxy(){
+ [ -d ${HAPROXY_INSTALL_DIR} ] && { ${COLOR}"Haproxy已存在,安装失败"${END};exit; }
+ ${COLOR}"开始安装Haproxy"${END}
+ ${COLOR}"开始安装Haproxy依赖包"${END}
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ yum -y install gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel libtermcap-devel ncurses-devel libevent-devel readline-devel &> /dev/null
+ else
+ apt update &> /dev/null;apt -y install gcc make openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev libreadline-dev libsystemd-dev &> /dev/null
+ fi
+ tar xf ${LUA_FILE}
+ LUA_DIR=`echo ${LUA_FILE} | sed -nr 's/^(.*[0-9]).([[:lower:]]).*/\1/p'`
+ cd ${LUA_DIR}
+ make all test
+ cd ${SRC_DIR}
+ tar xf ${HAPROXY_FILE}
+ HAPROXY_DIR=`echo ${HAPROXY_FILE} | sed -nr 's/^(.*[0-9]).([[:lower:]]).*/\1/p'`
+ cd ${HAPROXY_DIR}
+ make -j ${CPUS} ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=${SRC_DIR}/${LUA_DIR}/src/ LUA_LIB=${SRC_DIR}/${LUA_DIR}/src/ PREFIX=${HAPROXY_INSTALL_DIR}
+ make install PREFIX=${HAPROXY_INSTALL_DIR}
+ [ $? -eq 0 ] && $COLOR"Haproxy编译安装成功"$END || { $COLOR"Haproxy编译安装失败,退出!"$END;exit; }
+ cat > /lib/systemd/system/haproxy.service <<-EOF
+[Unit]
+Description=HAProxy Load Balancer
+After=syslog.target network.target
+
+[Service]
+ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
+ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
+ExecReload=/bin/kill -USR2 $MAINPID
+
+[Install]
+WantedBy=multi-user.target
+EOF
+ [ -L /usr/sbin/haproxy ] || ln -s ../..${HAPROXY_INSTALL_DIR}/sbin/haproxy /usr/sbin/ &> /dev/null
+ [ -d /etc/haproxy ] || mkdir /etc/haproxy &> /dev/null
+ [ -d /var/lib/haproxy/ ] || mkdir -p /var/lib/haproxy/ &> /dev/null
+ cat > /etc/haproxy/haproxy.cfg <<-EOF
+global
+maxconn 100000
+chroot ${HAPROXY_INSTALL_DIR}
+stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
+uid 99
+gid 99
+daemon
+#nbproc 4
+#cpu-map 1 0
+#cpu-map 2 1
+#cpu-map 3 2
+#cpu-map 4 3
+pidfile /var/lib/haproxy/haproxy.pid
+log 127.0.0.1 local3 info
+
+defaults
+option http-keep-alive
+option forwardfor
+maxconn 100000
+mode http
+timeout connect 300000ms
+timeout client 300000ms
+timeout server 300000ms
+
+listen stats
+ mode http
+ bind 0.0.0.0:9999
+ stats enable
+ log global
+ stats uri /haproxy-status
+ stats auth ${STATS_AUTH_USER}:${STATS_AUTH_PASSWORD}
+EOF
+ cat >> /etc/sysctl.conf <<-EOF
+net.ipv4.ip_nonlocal_bind = 1
+EOF
+ sysctl -p &> /dev/null
+ echo "PATH=${HAPROXY_INSTALL_DIR}/sbin:${PATH}" > /etc/profile.d/haproxy.sh
+ systemctl daemon-reload
+ systemctl enable --now haproxy &> /dev/null
+ systemctl is-active haproxy &> /dev/null && ${COLOR}"Haproxy 服务启动成功!"${END} || { ${COLOR}"Haproxy 启动失败,退出!"${END} ; exit; }
+ ${COLOR}"Haproxy安装完成"${END}
+}
+
+main(){
+ os
+ check_file
+ install_haproxy
+}
+
+main
diff --git a/harbor/install_docker_binary_compose_harbor.sh b/harbor/install_docker_binary_compose_harbor.sh
new file mode 100644
index 0000000..85d7891
--- /dev/null
+++ b/harbor/install_docker_binary_compose_harbor.sh
@@ -0,0 +1,180 @@
+#!/bin/bash
+#
+#**************************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-15
+#FileName: install_docker_binary_compose_harbor.sh
+#URL: raymond.blog.csdn.net
+#Description: install_docker_binary_compose_harbor for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#**************************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+URL='https://download.docker.com/linux/static/stable/x86_64/'
+DOCKER_FILE=docker-20.10.9.tgz
+
+#docker-compose下载地址:https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
+DOCKER_COMPOSE_FILE=docker-compose-linux-x86_64
+
+#harbor下载地址:https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz
+HARBOR_FILE=harbor-offline-installer-v
+HARBOR_VERSION=2.3.5
+TAR=.tgz
+HARBOR_INSTALL_DIR=/apps
+NET_NAME=`ip addr |awk -F"[: ]" '/^2: e.*/{print $3}'`
+IP=`ip addr show ${NET_NAME}| awk -F" +|/" '/global/{print $3}'`
+HARBOR_ADMIN_PASSWORD=123456
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
+ fi
+ if [ ! -e ${DOCKER_FILE} ];then
+ ${COLOR}"缺少${DOCKER_FILE}文件,如果是离线包,请把文件放到${SRC_DIR}目录下"${END}
+ ${COLOR}'开始下载DOCKER二进制源码包'${END}
+ wget ${URL}${DOCKER_FILE} || { ${COLOR}"DOCKER二进制安装包下载失败"${END}; exit; }
+ elif [ ! -e ${DOCKER_COMPOSE_FILE} ];then
+ ${COLOR}"缺少${DOCKER_COMPOSE_FILE}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ elif [ ! -e ${HARBOR_FILE}${HARBOR_VERSION}${TAR} ];then
+ ${COLOR}"缺少${HARBOR_FILE}${HARBOR_VERSION}${TAR}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install_docker(){
+ tar xf ${DOCKER_FILE}
+ mv docker/* /usr/bin/
+ cat > /lib/systemd/system/docker.service <<-EOF
+[Unit]
+Description=Docker Application Container Engine
+Documentation=https://docs.docker.com
+After=network-online.target firewalld.service
+Wants=network-online.target
+
+[Service]
+Type=notify
+# the default is not to use systemd for cgroups because the delegate issues still
+# exists and systemd currently does not support the cgroup feature set required
+# for containers run by docker
+ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock
+ExecReload=/bin/kill -s HUP \$MAINPID
+# Having non-zero Limit*s causes performance problems due to accounting overhead
+# in the kernel. We recommend using cgroups to do container-local accounting.
+LimitNOFILE=infinity
+LimitNPROC=infinity
+LimitCORE=infinity
+# Uncomment TasksMax if your systemd version supports it.
+# Only systemd 226 and above support this version.
+#TasksMax=infinity
+TimeoutStartSec=0
+# set delegate yes so that systemd does not reset the cgroups of docker containers
+Delegate=yes
+# kill only the docker process, not all processes in the cgroup
+KillMode=process
+# restart the docker process if it exits prematurely
+Restart=on-failure
+StartLimitBurst=3
+StartLimitInterval=60s
+
+[Install]
+WantedBy=multi-user.target
+EOF
+ mkdir -p /etc/docker
+ tee /etc/docker/daemon.json <<-'EOF'
+{
+ "registry-mirrors": [
+ "https://hzw5xiv7.mirror.aliyuncs.com",
+ "https://docker.mirrors.ustc.edu.cn",
+ "http://f1361db2.m.daocloud.io",
+ "https://registry.docker-cn.com",
+ "https://dockerhub.azk8s.cn",
+ "https://reg-mirror.qiniu.com",
+ "https://hub-mirror.c.163.com",
+ "https://mirror.ccs.tencentyun.com"
+ ]
+}
+EOF
+ echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc
+ echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
+ systemctl daemon-reload
+ systemctl enable --now docker &> /dev/null
+ systemctl is-active docker &> /dev/null && ${COLOR}"Docker 服务启动成功"${END} || { ${COLOR}"Docker 启动失败"${END};exit; }
+ docker version && ${COLOR}"Docker 安装成功"${END} || ${COLOR}"Docker 安装失败"${END}
+}
+
+install_docker_compose(){
+ ${COLOR}"开始安装 Docker compose....."${END}
+ sleep 1
+ mv ${SRC_DIR}/${DOCKER_COMPOSE_FILE} /usr/bin/docker-compose
+ chmod +x /usr/bin/docker-compose
+ docker-compose --version && ${COLOR}"Docker Compose 安装完成"${END} || ${COLOR}"Docker compose 安装失败"${END}
+}
+
+install_harbor(){
+ ${COLOR}"开始安装 Harbor....."${END}
+ sleep 1
+ [ -d ${HARBOR_INSTALL_DIR} ] || mkdir ${HARBOR_INSTALL_DIR}
+ tar xf ${SRC_DIR}/${HARBOR_FILE}${HARBOR_VERSION}${TAR} -C ${HARBOR_INSTALL_DIR}/
+ mv ${HARBOR_INSTALL_DIR}/harbor/harbor.yml.tmpl ${HARBOR_INSTALL_DIR}/harbor/harbor.yml
+ sed -ri.bak -e 's/^(hostname:) .*/\1 '${IP}'/' -e 's/^(harbor_admin_password:) .*/\1 '${HARBOR_ADMIN_PASSWORD}'/' -e 's/^(https:)/#\1/' -e 's/ (port: 443)/# \1/' -e 's@ (certificate: .*)@# \1@' -e 's@ (private_key: .*)@# \1@' ${HARBOR_INSTALL_DIR}/harbor/harbor.yml
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ yum -y install python3 &> /dev/null || { ${COLOR}"安装软件包失败,请检查网络配置"${END}; exit; }
+ else
+ apt -y install python3 &> /dev/null || { ${COLOR}"安装软件包失败,请检查网络配置"${END}; exit; }
+ fi
+ ${HARBOR_INSTALL_DIR}/harbor/install.sh && ${COLOR}"Harbor 安装完成"${END} || ${COLOR}"Harbor 安装失败"${END}
+ cat > /lib/systemd/system/harbor.service <<-EOF
+[Unit]
+Description=Harbor
+After=docker.service systemd-networkd.service systemd-resolved.service
+Requires=docker.service
+Documentation=http://github.com/vmware/harbor
+
+[Service]
+Type=simple
+Restart=on-failure
+RestartSec=5
+ExecStart=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml up
+ExecStop=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml down
+
+[Install]
+WantedBy=multi-user.target
+EOF
+
+ systemctl daemon-reload
+ systemctl enable harbor &>/dev/null && ${COLOR}"Harbor已配置为开机自动启动"${END}
+}
+
+set_swap_limit(){
+ if [ ${OS_ID} == "Ubuntu" ];then
+ ${COLOR}'设置Docker的"WARNING: No swap limit support"警告'${END}
+ sed -ri '/^GRUB_CMDLINE_LINUX=/s@"$@ swapaccount=1"@' /etc/default/grub
+ update-grub &> /dev/null
+ ${COLOR}"10秒后,机器会自动重启"${END}
+ sleep 10
+ reboot
+ fi
+}
+
+main(){
+ os
+ check_file
+ [ -f /usr/bin/docker ] && ${COLOR}"Docker已安装"${END} || install_docker
+ docker-compose --version &> /dev/null && ${COLOR}"Docker Compose已安装"${END} || install_docker_compose
+ systemctl is-active harbor &> /dev/null && ${COLOR}"Harbor已安装"${END} || install_harbor
+ grep -q "swapaccount=1" /etc/default/grub && ${COLOR}'"WARNING: No swap limit support"警告,已设置'${END} || set_swap_limit
+}
+
+main
diff --git a/harbor/install_docker_binary_compose_harbor_https.sh b/harbor/install_docker_binary_compose_harbor_https.sh
new file mode 100644
index 0000000..8d81f3a
--- /dev/null
+++ b/harbor/install_docker_binary_compose_harbor_https.sh
@@ -0,0 +1,189 @@
+#!/bin/bash
+#
+#************************************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-15
+#FileName: install_docker_binary_compose_harbor_https.sh
+#URL: raymond.blog.csdn.net
+#Description: install_docker_binary_compose_harbor_https for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#************************************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+URL='https://download.docker.com/linux/static/stable/x86_64/'
+DOCKER_FILE=docker-20.10.9.tgz
+
+#docker-compose下载地址:https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
+DOCKER_COMPOSE_FILE=docker-compose-linux-x86_64
+
+#harbor下载地址:https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz
+HARBOR_FILE=harbor-offline-installer-v
+HARBOR_VERSION=2.3.5
+TAR=.tgz
+HARBOR_INSTALL_DIR=/apps
+DOMAIN=raymonds.cc
+HARBOR_DOMAIN=harbor.raymonds.cc
+NET_NAME=`ip addr |awk -F"[: ]" '/^2: e.*/{print $3}'`
+IP=`ip addr show ${NET_NAME}| awk -F" +|/" '/global/{print $3}'`
+HARBOR_ADMIN_PASSWORD=123456
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
+ fi
+ if [ ! -e ${DOCKER_FILE} ];then
+ ${COLOR}"缺少${DOCKER_FILE}文件,如果是离线包,请把文件放到${SRC_DIR}目录下"${END}
+ ${COLOR}'开始下载DOCKER二进制源码包'${END}
+ wget ${URL}${DOCKER_FILE} || { ${COLOR}"DOCKER二进制安装包下载失败"${END}; exit; }
+ elif [ ! -e ${DOCKER_COMPOSE_FILE} ];then
+ ${COLOR}"缺少${DOCKER_COMPOSE_FILE}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ elif [ ! -e ${HARBOR_FILE}${HARBOR_VERSION}${TAR} ];then
+ ${COLOR}"缺少${HARBOR_FILE}${HARBOR_VERSION}${TAR}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install_docker(){
+ tar xf ${DOCKER_FILE}
+ mv docker/* /usr/bin/
+ cat > /lib/systemd/system/docker.service <<-EOF
+[Unit]
+Description=Docker Application Container Engine
+Documentation=https://docs.docker.com
+After=network-online.target firewalld.service
+Wants=network-online.target
+
+[Service]
+Type=notify
+# the default is not to use systemd for cgroups because the delegate issues still
+# exists and systemd currently does not support the cgroup feature set required
+# for containers run by docker
+ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock
+ExecReload=/bin/kill -s HUP \$MAINPID
+# Having non-zero Limit*s causes performance problems due to accounting overhead
+# in the kernel. We recommend using cgroups to do container-local accounting.
+LimitNOFILE=infinity
+LimitNPROC=infinity
+LimitCORE=infinity
+# Uncomment TasksMax if your systemd version supports it.
+# Only systemd 226 and above support this version.
+#TasksMax=infinity
+TimeoutStartSec=0
+# set delegate yes so that systemd does not reset the cgroups of docker containers
+Delegate=yes
+# kill only the docker process, not all processes in the cgroup
+KillMode=process
+# restart the docker process if it exits prematurely
+Restart=on-failure
+StartLimitBurst=3
+StartLimitInterval=60s
+
+[Install]
+WantedBy=multi-user.target
+EOF
+ mkdir -p /etc/docker
+ tee /etc/docker/daemon.json <<-'EOF'
+{
+ "registry-mirrors": [
+ "https://hzw5xiv7.mirror.aliyuncs.com",
+ "https://docker.mirrors.ustc.edu.cn",
+ "http://f1361db2.m.daocloud.io",
+ "https://registry.docker-cn.com",
+ "https://dockerhub.azk8s.cn",
+ "https://reg-mirror.qiniu.com",
+ "https://hub-mirror.c.163.com",
+ "https://mirror.ccs.tencentyun.com"
+ ]
+}
+EOF
+ echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc
+ echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
+ systemctl daemon-reload
+ systemctl enable --now docker &> /dev/null
+ systemctl is-active docker &> /dev/null && ${COLOR}"Docker 服务启动成功"${END} || { ${COLOR}"Docker 启动失败"${END};exit; }
+ docker version && ${COLOR}"Docker 安装成功"${END} || ${COLOR}"Docker 安装失败"${END}
+}
+
+install_docker_compose(){
+ ${COLOR}"开始安装 Docker compose....."${END}
+ sleep 1
+ mv ${SRC_DIR}/${DOCKER_COMPOSE_FILE} /usr/bin/docker-compose
+ chmod +x /usr/bin/docker-compose
+ docker-compose --version && ${COLOR}"Docker Compose 安装完成"${END} || ${COLOR}"Docker compose 安装失败"${END}
+}
+
+install_harbor(){
+ ${COLOR}"开始安装 Harbor....."${END}
+ sleep 1
+ [ -d ${HARBOR_INSTALL_DIR} ] || mkdir ${HARBOR_INSTALL_DIR}
+ tar xf ${SRC_DIR}/${HARBOR_FILE}${HARBOR_VERSION}${TAR} -C ${HARBOR_INSTALL_DIR}/
+ touch /root/.rnd
+ mkdir /apps/harbor/certs/
+ cd /apps/harbor/certs/
+ openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -subj "/CN=ca."${DOMAIN}"" -days 365 -out ca.crt
+ openssl req -newkey rsa:4096 -nodes -sha256 -subj "/CN=${HARBOR_DOMAIN}" -keyout ${HARBOR_DOMAIN}.key -out ${HARBOR_DOMAIN}.csr
+ openssl x509 -req -in ${HARBOR_DOMAIN}.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out ${HARBOR_DOMAIN}.crt
+
+ mv ${HARBOR_INSTALL_DIR}/harbor/harbor.yml.tmpl ${HARBOR_INSTALL_DIR}/harbor/harbor.yml
+ sed -ri.bak -e 's/^(hostname:) .*/\1 '''${IP}'''/' -e 's/^(harbor_admin_password:) .*/\1 '''${HARBOR_ADMIN_PASSWORD}'''/' -e 's@ (certificate:) .*@ \1 '''${HARBOR_INSTALL_DIR}'''/harbor/certs/'''${HARBOR_DOMAIN}'''.crt@' -e 's@ (private_key:) .*@ \1 '''${HARBOR_INSTALL_DIR}'''/harbor/certs/'''${HARBOR_DOMAIN}'''.key@' ${HARBOR_INSTALL_DIR}/harbor/harbor.yml
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ yum -y install python3 &> /dev/null || { ${COLOR}"安装软件包失败,请检查网络配置"${END}; exit; }
+ else
+ apt -y install python3 &> /dev/null || { ${COLOR}"安装软件包失败,请检查网络配置"${END}; exit; }
+ fi
+ ${HARBOR_INSTALL_DIR}/harbor/install.sh && ${COLOR}"Harbor 安装完成"${END} || ${COLOR}"Harbor 安装失败"${END}
+ cat > /lib/systemd/system/harbor.service <<-EOF
+[Unit]
+Description=Harbor
+After=docker.service systemd-networkd.service systemd-resolved.service
+Requires=docker.service
+Documentation=http://github.com/vmware/harbor
+
+[Service]
+Type=simple
+Restart=on-failure
+RestartSec=5
+ExecStart=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml up
+ExecStop=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml down
+
+[Install]
+WantedBy=multi-user.target
+EOF
+
+ systemctl daemon-reload
+ systemctl enable harbor &>/dev/null && ${COLOR}"Harbor已配置为开机自动启动"${END}
+}
+
+set_swap_limit(){
+ if [ ${OS_ID} == "Ubuntu" ];then
+ ${COLOR}'设置Docker的"WARNING: No swap limit support"警告'${END}
+ sed -ri '/^GRUB_CMDLINE_LINUX=/s@"$@ swapaccount=1"@' /etc/default/grub
+ update-grub &> /dev/null
+ ${COLOR}"10秒后,机器会自动重启"${END}
+ sleep 10
+ reboot
+ fi
+}
+
+main(){
+ os
+ check_file
+ [ -f /usr/bin/docker ] && ${COLOR}"Docker已安装"${END} || install_docker
+ docker-compose --version &> /dev/null && ${COLOR}"Docker Compose已安装"${END} || install_docker_compose
+ systemctl is-active harbor &> /dev/null && ${COLOR}"Harbor已安装"${END} || install_harbor
+ grep -q "swapaccount=1" /etc/default/grub && ${COLOR}'"WARNING: No swap limit support"警告,已设置'${END} || set_swap_limit
+}
+
+main
diff --git a/harbor/install_docker_compose_harbor.sh b/harbor/install_docker_compose_harbor.sh
new file mode 100644
index 0000000..5442699
--- /dev/null
+++ b/harbor/install_docker_compose_harbor.sh
@@ -0,0 +1,181 @@
+#!/bin/bash
+#
+#**************************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-16
+#FileName: install_docke_compose_harbor.sh
+#URL: raymond.blog.csdn.net
+#Description: install_docker_compose_harbor for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#**************************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+DOCKER_VERSION=20.10.11
+URL='mirrors.cloud.tencent.com'
+
+#docker-compose下载地址:https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
+DOCKER_COMPOSE_FILE=docker-compose-linux-x86_64
+
+#harbor下载地址:https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz
+HARBOR_FILE=harbor-offline-installer-v
+HARBOR_VERSION=2.3.5
+TAR=.tgz
+HARBOR_INSTALL_DIR=/apps
+NET_NAME=`ip addr |awk -F"[: ]" '/^2: e.*/{print $3}'`
+IP=`ip addr show ${NET_NAME}| awk -F" +|/" '/global/{print $3}'`
+HARBOR_ADMIN_PASSWORD=123456
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ if [ ! -e ${DOCKER_COMPOSE_FILE} ];then
+ ${COLOR}"缺少${DOCKER_COMPOSE_FILE}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ elif [ ! -e ${HARBOR_FILE}${HARBOR_VERSION}${TAR} ];then
+ ${COLOR}"缺少${HARBOR_FILE}${HARBOR_VERSION}${TAR}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+ubuntu_install_docker(){
+ ${COLOR}"开始安装DOCKER依赖包"${END}
+ apt update &> /dev/null
+ apt -y install apt-transport-https ca-certificates curl software-properties-common &> /dev/null
+ curl -fsSL https://${URL}/docker-ce/linux/ubuntu/gpg | sudo apt-key add - &> /dev/null
+ add-apt-repository "deb [arch=amd64] https://${URL}/docker-ce/linux/ubuntu $(lsb_release -cs) stable" &> /dev/null
+ apt update &> /dev/null
+
+ ${COLOR}"Docker有以下版本"${END}
+ apt-cache madison docker-ce
+ ${COLOR}"10秒后即将安装:Docker-"${DOCKER_VERSION}"版本......"${END}
+ ${COLOR}"如果想安装其它Docker版本,请按Ctrl+c键退出,修改版本再执行"${END}
+ sleep 10
+
+ ${COLOR}"开始安装DOCKER"${END}
+ apt -y install docker-ce=5:${DOCKER_VERSION}~3-0~ubuntu-$(lsb_release -cs) docker-ce-cli=5:${DOCKER_VERSION}~3-0~ubuntu-$(lsb_release -cs) &> /dev/null || { ${COLOR}"apt源失败,请检查apt配置"${END};exit; }
+}
+
+centos_install_docker(){
+ ${COLOR}"开始安装DOCKER依赖包"${END}
+ yum -y install yum-utils &> /dev/null
+ yum-config-manager --add-repo https://${URL}/docker-ce/linux/centos/docker-ce.repo &> /dev/null
+ sed -i 's+download.docker.com+'''${URL}'''/docker-ce+' /etc/yum.repos.d/docker-ce.repo
+ yum clean all &> /dev/null
+ yum makecache &> /dev/null
+
+ ${COLOR}"Docker有以下版本"${END}
+ yum list docker-ce.x86_64 --showduplicates
+ ${COLOR}"10秒后即将安装:Docker-"${DOCKER_VERSION}"版本......"${END}
+ ${COLOR}"如果想安装其它Docker版本,请按Ctrl+c键退出,修改版本再执行"${END}
+ sleep 10
+
+ ${COLOR}"开始安装DOCKER"${END}
+ yum -y install docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} &> /dev/null || { ${COLOR}"yum源失败,请检查yum配置"${END};exit; }
+}
+
+mirror_accelerator(){
+ mkdir -p /etc/docker
+ tee /etc/docker/daemon.json <<-'EOF'
+{
+ "registry-mirrors": [
+ "https://hzw5xiv7.mirror.aliyuncs.com",
+ "https://docker.mirrors.ustc.edu.cn",
+ "http://f1361db2.m.daocloud.io",
+ "https://registry.docker-cn.com",
+ "https://dockerhub.azk8s.cn",
+ "https://reg-mirror.qiniu.com",
+ "https://hub-mirror.c.163.com",
+ "https://mirror.ccs.tencentyun.com"
+ ]
+}
+EOF
+ systemctl daemon-reload
+ systemctl enable --now docker
+ systemctl is-active docker &> /dev/null && ${COLOR}"Docker 服务启动成功"${END} || { ${COLOR}"Docker 启动失败"${END};exit; }
+ docker version && ${COLOR}"Docker 安装成功"${END} || ${COLOR}"Docker 安装失败"${END}
+}
+
+set_alias(){
+ echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc
+ echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
+}
+
+install_docker_compose(){
+ ${COLOR}"开始安装 Docker compose....."${END}
+ sleep 1
+ mv ${SRC_DIR}/${DOCKER_COMPOSE_FILE} /usr/bin/docker-compose
+ chmod +x /usr/bin/docker-compose
+ docker-compose --version && ${COLOR}"Docker Compose 安装完成"${END} || ${COLOR}"Docker compose 安装失败"${END}
+}
+
+install_harbor(){
+ ${COLOR}"开始安装 Harbor....."${END}
+ sleep 1
+ [ -d ${HARBOR_INSTALL_DIR} ] || mkdir ${HARBOR_INSTALL_DIR}
+ tar xf ${SRC_DIR}/${HARBOR_FILE}${HARBOR_VERSION}${TAR} -C ${HARBOR_INSTALL_DIR}/
+ mv ${HARBOR_INSTALL_DIR}/harbor/harbor.yml.tmpl ${HARBOR_INSTALL_DIR}/harbor/harbor.yml
+ sed -ri.bak -e 's/^(hostname:) .*/\1 '${IP}'/' -e 's/^(harbor_admin_password:) .*/\1 '${HARBOR_ADMIN_PASSWORD}'/' -e 's/^(https:)/#\1/' -e 's/ (port: 443)/# \1/' -e 's@ (certificate: .*)@# \1@' -e 's@ (private_key: .*)@# \1@' ${HARBOR_INSTALL_DIR}/harbor/harbor.yml
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ yum -y install python3 &> /dev/null || { ${COLOR}"安装软件包失败,请检查网络配置"${END}; exit; }
+ else
+ apt -y install python3 &> /dev/null || { ${COLOR}"安装软件包失败,请检查网络配置"${END}; exit; }
+ fi
+ ${HARBOR_INSTALL_DIR}/harbor/install.sh && ${COLOR}"Harbor 安装完成"${END} || ${COLOR}"Harbor 安装失败"${END}
+ cat > /lib/systemd/system/harbor.service <<-EOF
+[Unit]
+Description=Harbor
+After=docker.service systemd-networkd.service systemd-resolved.service
+Requires=docker.service
+Documentation=http://github.com/vmware/harbor
+
+[Service]
+Type=simple
+Restart=on-failure
+RestartSec=5
+ExecStart=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml up
+ExecStop=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml down
+
+[Install]
+WantedBy=multi-user.target
+EOF
+
+ systemctl daemon-reload
+ systemctl enable harbor &>/dev/null && ${COLOR}"Harbor已配置为开机自动启动"${END}
+}
+
+set_swap_limit(){
+ if [ ${OS_ID} == "Ubuntu" ];then
+ ${COLOR}'设置Docker的"WARNING: No swap limit support"警告'${END}
+ sed -ri '/^GRUB_CMDLINE_LINUX=/s@"$@ swapaccount=1"@' /etc/default/grub
+ update-grub &> /dev/null
+ ${COLOR}"10秒后,机器会自动重启"${END}
+ sleep 10
+ reboot
+ fi
+}
+
+main(){
+ os
+ check_file
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q docker-ce &> /dev/null && ${COLOR}"Docker已安装"${END} || centos_install_docker
+ else
+ dpkg -s docker-ce &>/dev/null && ${COLOR}"Docker已安装"${END} || ubuntu_install_docker
+ fi
+ [ -f /etc/docker/daemon.json ] &>/dev/null && ${COLOR}"Docker镜像加速器已设置"${END} || mirror_accelerator
+ grep -Eqoi "(.*rmi=|.*rmc=)" ~/.bashrc && ${COLOR}"Docker别名已设置"${END} || set_alias
+ docker-compose --version &> /dev/null && ${COLOR}"Docker Compose已安装"${END} || install_docker_compose
+ systemctl is-active harbor &> /dev/null && ${COLOR}"Harbor已安装"${END} || install_harbor
+ grep -q "swapaccount=1" /etc/default/grub && ${COLOR}'"WARNING: No swap limit support"警告,已设置'${END} || set_swap_limit
+}
+
+main
diff --git a/harbor/install_docker_compose_harbor_https.sh b/harbor/install_docker_compose_harbor_https.sh
new file mode 100644
index 0000000..0accd4a
--- /dev/null
+++ b/harbor/install_docker_compose_harbor_https.sh
@@ -0,0 +1,190 @@
+#!/bin/bash
+#
+#************************************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-16
+#FileName: install_docker_compose_harbor_https.sh
+#URL: raymond.blog.csdn.net
+#Description: install_docker_compose_harbor_https for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#************************************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+DOCKER_VERSION=20.10.11
+URL='mirrors.cloud.tencent.com'
+
+#docker-compose下载地址:https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
+DOCKER_COMPOSE_FILE=docker-compose-linux-x86_64
+
+#harbor下载地址:https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz
+HARBOR_FILE=harbor-offline-installer-v
+HARBOR_VERSION=2.3.5
+TAR=.tgz
+HARBOR_INSTALL_DIR=/apps
+DOMAIN=raymonds.cc
+HARBOR_DOMAIN=harbor.raymonds.cc
+NET_NAME=`ip addr |awk -F"[: ]" '/^2: e.*/{print $3}'`
+IP=`ip addr show ${NET_NAME}| awk -F" +|/" '/global/{print $3}'`
+HARBOR_ADMIN_PASSWORD=123456
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ if [ ! -e ${DOCKER_COMPOSE_FILE} ];then
+ ${COLOR}"缺少${DOCKER_COMPOSE_FILE}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ elif [ ! -e ${HARBOR_FILE}${HARBOR_VERSION}${TAR} ];then
+ ${COLOR}"缺少${HARBOR_FILE}${HARBOR_VERSION}${TAR}文件,请把文件放到${SRC_DIR}目录下"${END}
+ exit
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+ubuntu_install_docker(){
+ ${COLOR}"开始安装DOCKER依赖包"${END}
+ apt update &> /dev/null
+ apt -y install apt-transport-https ca-certificates curl software-properties-common &> /dev/null
+ curl -fsSL https://${URL}/docker-ce/linux/ubuntu/gpg | sudo apt-key add - &> /dev/null
+ add-apt-repository "deb [arch=amd64] https://${URL}/docker-ce/linux/ubuntu $(lsb_release -cs) stable" &> /dev/null
+ apt update &> /dev/null
+
+ ${COLOR}"Docker有以下版本"${END}
+ apt-cache madison docker-ce
+ ${COLOR}"10秒后即将安装:Docker-"${DOCKER_VERSION}"版本......"${END}
+ ${COLOR}"如果想安装其它Docker版本,请按Ctrl+c键退出,修改版本再执行"${END}
+ sleep 10
+
+ ${COLOR}"开始安装DOCKER"${END}
+ apt -y install docker-ce=5:${DOCKER_VERSION}~3-0~ubuntu-$(lsb_release -cs) docker-ce-cli=5:${DOCKER_VERSION}~3-0~ubuntu-$(lsb_release -cs) &> /dev/null || { ${COLOR}"apt源失败,请检查apt配置"${END};exit; }
+}
+
+centos_install_docker(){
+ ${COLOR}"开始安装DOCKER依赖包"${END}
+ yum -y install yum-utils &> /dev/null
+ yum-config-manager --add-repo https://${URL}/docker-ce/linux/centos/docker-ce.repo &> /dev/null
+ sed -i 's+download.docker.com+'''${URL}'''/docker-ce+' /etc/yum.repos.d/docker-ce.repo
+ yum clean all &> /dev/null
+ yum makecache &> /dev/null
+
+ ${COLOR}"Docker有以下版本"${END}
+ yum list docker-ce.x86_64 --showduplicates
+ ${COLOR}"10秒后即将安装:Docker-"${DOCKER_VERSION}"版本......"${END}
+ ${COLOR}"如果想安装其它Docker版本,请按Ctrl+c键退出,修改版本再执行"${END}
+ sleep 10
+
+ ${COLOR}"开始安装DOCKER"${END}
+ yum -y install docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} &> /dev/null || { ${COLOR}"yum源失败,请检查yum配置"${END};exit; }
+}
+
+mirror_accelerator(){
+ mkdir -p /etc/docker
+ tee /etc/docker/daemon.json <<-'EOF'
+{
+ "registry-mirrors": [
+ "https://hzw5xiv7.mirror.aliyuncs.com",
+ "https://docker.mirrors.ustc.edu.cn",
+ "http://f1361db2.m.daocloud.io",
+ "https://registry.docker-cn.com",
+ "https://dockerhub.azk8s.cn",
+ "https://reg-mirror.qiniu.com",
+ "https://hub-mirror.c.163.com",
+ "https://mirror.ccs.tencentyun.com"
+ ]
+}
+EOF
+ systemctl daemon-reload
+ systemctl enable --now docker
+ systemctl is-active docker &> /dev/null && ${COLOR}"Docker 服务启动成功"${END} || { ${COLOR}"Docker 启动失败"${END};exit; }
+ docker version && ${COLOR}"Docker 安装成功"${END} || ${COLOR}"Docker 安装失败"${END}
+}
+
+set_alias(){
+ echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc
+ echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
+}
+
+install_docker_compose(){
+ ${COLOR}"开始安装 Docker compose....."${END}
+ sleep 1
+ mv ${SRC_DIR}/${DOCKER_COMPOSE_FILE} /usr/bin/docker-compose
+ chmod +x /usr/bin/docker-compose
+ docker-compose --version && ${COLOR}"Docker Compose 安装完成"${END} || ${COLOR}"Docker compose 安装失败"${END}
+}
+
+install_harbor(){
+ ${COLOR}"开始安装 Harbor....."${END}
+ sleep 1
+ [ -d ${HARBOR_INSTALL_DIR} ] || mkdir ${HARBOR_INSTALL_DIR}
+ tar xf ${SRC_DIR}/${HARBOR_FILE}${HARBOR_VERSION}${TAR} -C ${HARBOR_INSTALL_DIR}/
+ touch /root/.rnd
+ mkdir /apps/harbor/certs/
+ cd /apps/harbor/certs/
+ openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -subj "/CN=ca."${DOMAIN}"" -days 365 -out ca.crt
+ openssl req -newkey rsa:4096 -nodes -sha256 -subj "/CN=${HARBOR_DOMAIN}" -keyout ${HARBOR_DOMAIN}.key -out ${HARBOR_DOMAIN}.csr
+ openssl x509 -req -in ${HARBOR_DOMAIN}.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out ${HARBOR_DOMAIN}.crt
+
+ mv ${HARBOR_INSTALL_DIR}/harbor/harbor.yml.tmpl ${HARBOR_INSTALL_DIR}/harbor/harbor.yml
+ sed -ri.bak -e 's/^(hostname:) .*/\1 '''${IP}'''/' -e 's/^(harbor_admin_password:) .*/\1 '''${HARBOR_ADMIN_PASSWORD}'''/' -e 's@ (certificate:) .*@ \1 '''${HARBOR_INSTALL_DIR}'''/harbor/certs/'''${HARBOR_DOMAIN}'''.crt@' -e 's@ (private_key:) .*@ \1 '''${HARBOR_INSTALL_DIR}'''/harbor/certs/'''${HARBOR_DOMAIN}'''.key@' ${HARBOR_INSTALL_DIR}/harbor/harbor.yml
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ yum -y install python3 &> /dev/null || { ${COLOR}"安装软件包失败,请检查网络配置"${END}; exit; }
+ else
+ apt -y install python3 &> /dev/null || { ${COLOR}"安装软件包失败,请检查网络配置"${END}; exit; }
+ fi
+ ${HARBOR_INSTALL_DIR}/harbor/install.sh && ${COLOR}"Harbor 安装完成"${END} || ${COLOR}"Harbor 安装失败"${END}
+ cat > /lib/systemd/system/harbor.service <<-EOF
+[Unit]
+Description=Harbor
+After=docker.service systemd-networkd.service systemd-resolved.service
+Requires=docker.service
+Documentation=http://github.com/vmware/harbor
+
+[Service]
+Type=simple
+Restart=on-failure
+RestartSec=5
+ExecStart=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml up
+ExecStop=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml down
+
+[Install]
+WantedBy=multi-user.target
+EOF
+
+ systemctl daemon-reload
+ systemctl enable harbor &>/dev/null && ${COLOR}"Harbor已配置为开机自动启动"${END}
+}
+
+set_swap_limit(){
+ if [ ${OS_ID} == "Ubuntu" ];then
+ ${COLOR}'设置Docker的"WARNING: No swap limit support"警告'${END}
+ sed -ri '/^GRUB_CMDLINE_LINUX=/s@"$@ swapaccount=1"@' /etc/default/grub
+ update-grub &> /dev/null
+ ${COLOR}"10秒后,机器会自动重启"${END}
+ sleep 10
+ reboot
+ fi
+}
+
+main(){
+ os
+ check_file
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q docker-ce &> /dev/null && ${COLOR}"Docker已安装"${END} || centos_install_docker
+ else
+ dpkg -s docker-ce &>/dev/null && ${COLOR}"Docker已安装"${END} || ubuntu_install_docker
+ fi
+ [ -f /etc/docker/daemon.json ] &>/dev/null && ${COLOR}"Docker镜像加速器已设置"${END} || mirror_accelerator
+ grep -Eqoi "(.*rmi=|.*rmc=)" ~/.bashrc && ${COLOR}"Docker别名已设置"${END} || set_alias
+ docker-compose --version &> /dev/null && ${COLOR}"Docker Compose已安装"${END} || install_docker_compose
+ systemctl is-active harbor &> /dev/null && ${COLOR}"Harbor已安装"${END} || install_harbor
+ grep -q "swapaccount=1" /etc/default/grub && ${COLOR}'"WARNING: No swap limit support"警告,已设置'${END} || set_swap_limit
+}
+
+main
diff --git a/java11/install_jdk_11.sh b/java11/install_jdk_11.sh
new file mode 100644
index 0000000..2bc94f0
--- /dev/null
+++ b/java11/install_jdk_11.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2022-04-05
+#FileName: install_jdk.sh
+#URL: raymond.blog.csdn.net
+#Description: The test script
+#Copyright (C): 2022 All rights reserved
+#*********************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+#下载地址:https://www.oracle.com/java/technologies/downloads/#java11
+JDK_FILE="jdk-11.0.14_linux-x64_bin.tar.gz"
+INSTALL_DIR=/usr/local
+
+check_file (){
+ cd ${SRC_DIR}
+ if [ ! -e ${JDK_FILE} ];then
+ ${COLOR}"缺少${JDK_FILE}文件"${END}
+ exit
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install_jdk(){
+ [ -d ${INSTALL_DIR}/jdk ] && { ${COLOR}"JDK已存在,安装失败"${END};exit; }
+ [ -d ${INSTALL_DIR} ] || mkdir -p ${INSTALL_DIR} &> /dev/null
+ cd ${SRC_DIR}
+ tar xf ${JDK_FILE} -C ${INSTALL_DIR}
+ ln -s ${INSTALL_DIR}/jdk-11.0.* ${INSTALL_DIR}/jdk
+ cat > /etc/profile.d/jdk.sh <<-EOF
+export JAVA_HOME=${INSTALL_DIR}/jdk
+export JRE_HOME=\$JAVA_HOME/jre
+export CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/
+export PATH=\$PATH:\$JAVA_HOME/bin
+EOF
+ . /etc/profile.d/jdk.sh
+ java -version && ${COLOR}"JDK 安装完成"${END} || { ${COLOR}"JDK 安装失败"${END} ; exit; }
+}
+
+main(){
+ check_file
+ install_jdk
+}
+
+main
diff --git a/java8/install_jdk_8.sh b/java8/install_jdk_8.sh
new file mode 100644
index 0000000..018fe2f
--- /dev/null
+++ b/java8/install_jdk_8.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2022-04-05
+#FileName: install_jdk.sh
+#URL: raymond.blog.csdn.net
+#Description: The test script
+#Copyright (C): 2022 All rights reserved
+#*********************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+#下载地址:https://www.oracle.com/java/technologies/downloads/#java8
+JDK_FILE="jdk-8u321-linux-x64.tar.gz"
+INSTALL_DIR=/usr/local
+
+check_file (){
+ cd ${SRC_DIR}
+ if [ ! -e ${JDK_FILE} ];then
+ ${COLOR}"缺少${JDK_FILE}文件"${END}
+ exit
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install_jdk(){
+ [ -d ${INSTALL_DIR}/jdk ] && { ${COLOR}"JDK已存在,安装失败"${END};exit; }
+ [ -d ${INSTALL_DIR} ] || mkdir -p ${INSTALL_DIR} &> /dev/null
+ cd ${SRC_DIR}
+ tar xf ${JDK_FILE} -C ${INSTALL_DIR}
+ ln -s ${INSTALL_DIR}/jdk1.8.* ${INSTALL_DIR}/jdk
+ cat > /etc/profile.d/jdk.sh <<-EOF
+export JAVA_HOME=${INSTALL_DIR}/jdk
+export JRE_HOME=\$JAVA_HOME/jre
+export CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/
+export PATH=\$PATH:\$JAVA_HOME/bin
+EOF
+ . /etc/profile.d/jdk.sh
+ java -version && ${COLOR}"JDK 安装完成"${END} || { ${COLOR}"JDK 安装失败"${END} ; exit; }
+}
+
+main(){
+ check_file
+ install_jdk
+}
+
+main
diff --git a/keepalived/install_keepalived_backup.sh b/keepalived/install_keepalived_backup.sh
new file mode 100644
index 0000000..87cbc14
--- /dev/null
+++ b/keepalived/install_keepalived_backup.sh
@@ -0,0 +1,133 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-29
+#FileName: install_keepalived_backup.sh
+#URL: raymond.blog.csdn.net
+#Description: install_keepalived for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+KEEPALIVED_URL=https://keepalived.org/software/
+KEEPALIVED_FILE=keepalived-2.2.4.tar.gz
+KEEPALIVED_INSTALL_DIR=/apps/keepalived
+CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`
+NET_NAME=`ip addr |awk -F"[: ]" '/^2: e.*/{print $3}'`
+STATE=BACKUP
+PRIORITY=80
+VIP=172.31.0.188
+
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_ID_LOWER=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release | tr -t "[A-Z]" "[a-z]"`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
+ fi
+ if [ ! -e ${KEEPALIVED_FILE} ];then
+ ${COLOR}"缺少${KEEPALIVED_FILE}文件,如果是离线包,请把文件放到${SRC_DIR}目录下"${END}
+ ${COLOR}'开始下载Keepalived源码包'${END}
+ wget ${KEEPALIVED_URL}${KEEPALIVED_FILE} || { ${COLOR}"Keepalived源码包下载失败"${END}; exit; }
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install_keepalived(){
+ [ -d ${KEEPALIVED_INSTALL_DIR} ] && { ${COLOR}"Keepalived已存在,安装失败"${END};exit; }
+ ${COLOR}"开始安装Keepalived"${END}
+ ${COLOR}"开始安装Keepalived依赖包"${END}
+ if [ ${OS_ID} == "Rocky" -a ${OS_RELEASE_VERSION} == 8 ];then
+ URL=mirrors.sjtug.sjtu.edu.cn
+ if [ ! `grep -R "\[PowerTools\]" /etc/yum.repos.d/` ];then
+ cat > /etc/yum.repos.d/PowerTools.repo <<-EOF
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/rocky/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+EOF
+ fi
+ fi
+ if [ ${OS_ID} == "CentOS" -a ${OS_RELEASE_VERSION} == 8 ];then
+ URL=mirrors.cloud.tencent.com
+ if [ ! `grep -R "\[PowerTools\]" /etc/yum.repos.d/` ];then
+ cat > /etc/yum.repos.d/PowerTools.repo <<-EOF
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/centos/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+EOF
+ fi
+ fi
+ if [[ ${OS_RELEASE_VERSION} == 8 ]] &> /dev/null;then
+ yum -y install make gcc ipvsadm autoconf automake openssl-devel libnl3-devel iptables-devel ipset-devel file-devel net-snmp-devel glib2-devel pcre2-devel libnftnl-devel libmnl-devel systemd-devel &> /dev/null
+ elif [[ ${OS_RELEASE_VERSION} == 7 ]] &> /dev/null;then
+ yum -y install make gcc libnfnetlink-devel libnfnetlink ipvsadm libnl libnl-devel libnl3 libnl3-devel lm_sensors-libs net-snmp-agent-libs net-snmp-libs openssh-server openssh-clients openssl openssl-devel automake iproute &> /dev/null
+ elif [[ ${OS_RELEASE_VERSION} == 20 ]] &> /dev/null;then
+ apt update &> /dev/null;apt -y install make gcc ipvsadm build-essential pkg-config automake autoconf libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libipset-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-dev
+ else
+ apt update &> /dev/null;apt -y install make gcc ipvsadm build-essential pkg-config automake autoconf iptables-dev libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libipset-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-dev &> /dev/null
+ fi
+ tar xf ${KEEPALIVED_FILE}
+ KEEPALIVED_DIR=`echo ${KEEPALIVED_FILE} | sed -nr 's/^(.*[0-9]).([[:lower:]]).*/\1/p'`
+ cd ${KEEPALIVED_DIR}
+ ./configure --prefix=${KEEPALIVED_INSTALL_DIR} --disable-fwmark
+ make -j $CPUS && make install
+ [ $? -eq 0 ] && ${COLOR}"Keepalived编译安装成功"${END} || { ${COLOR}"Keepalived编译安装失败,退出!"${END};exit; }
+ [ -d /etc/keepalived ] || mkdir -p /etc/keepalived &> /dev/null
+ cat > /etc/keepalived/keepalived.conf < /etc/profile.d/keepalived.sh
+ systemctl daemon-reload
+ systemctl enable --now keepalived &> /dev/null
+ systemctl is-active keepalived &> /dev/null && ${COLOR}"Keepalived 服务启动成功!"${END} || { ${COLOR}"Keepalived 启动失败,退出!"${END} ; exit; }
+ ${COLOR}"Keepalived安装完成"${END}
+}
+
+main(){
+ os
+ check_file
+ install_keepalived
+}
+
+main
diff --git a/keepalived/install_keepalived_master.sh b/keepalived/install_keepalived_master.sh
new file mode 100644
index 0000000..1a79613
--- /dev/null
+++ b/keepalived/install_keepalived_master.sh
@@ -0,0 +1,132 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-29
+#FileName: install_keepalived_master.sh
+#URL: raymond.blog.csdn.net
+#Description: install_keepalived for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+SRC_DIR=/usr/local/src
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+KEEPALIVED_URL=https://keepalived.org/software/
+KEEPALIVED_FILE=keepalived-2.2.4.tar.gz
+KEEPALIVED_INSTALL_DIR=/apps/keepalived
+CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`
+NET_NAME=`ip addr |awk -F"[: ]" '/^2: e.*/{print $3}'`
+STATE=MASTER
+PRIORITY=100
+VIP=172.31.0.188
+
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+}
+
+check_file (){
+ cd ${SRC_DIR}
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
+ fi
+ if [ ! -e ${KEEPALIVED_FILE} ];then
+ ${COLOR}"缺少${KEEPALIVED_FILE}文件,如果是离线包,请放到${SRC_DIR}目录下"${END}
+ ${COLOR}'开始下载Keepalived源码包'${END}
+ wget ${KEEPALIVED_URL}${KEEPALIVED_FILE} || { ${COLOR}"Keepalived源码包下载失败"${END}; exit; }
+ else
+ ${COLOR}"相关文件已准备好"${END}
+ fi
+}
+
+install_keepalived(){
+ [ -d ${KEEPALIVED_INSTALL_DIR} ] && { ${COLOR}"Keepalived已存在,安装失败"${END};exit; }
+ ${COLOR}"开始安装Keepalived"${END}
+ ${COLOR}"开始安装Keepalived依赖包"${END}
+ if [ ${OS_ID} == "Rocky" -a ${OS_RELEASE_VERSION} == 8 ];then
+ URL=mirrors.sjtug.sjtu.edu.cn
+ if [ ! `grep -R "\[PowerTools\]" /etc/yum.repos.d/` ];then
+ cat > /etc/yum.repos.d/PowerTools.repo <<-EOF
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/rocky/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+EOF
+ fi
+ fi
+ if [ ${OS_ID} == "CentOS" -a ${OS_RELEASE_VERSION} == 8 ];then
+ URL=mirrors.cloud.tencent.com
+ if [ ! `grep -R "\[PowerTools\]" /etc/yum.repos.d/` ];then
+ cat > /etc/yum.repos.d/PowerTools.repo <<-EOF
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/centos/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+EOF
+ fi
+ fi
+ if [[ ${OS_RELEASE_VERSION} == 8 ]] &> /dev/null;then
+ yum -y install make gcc ipvsadm autoconf automake openssl-devel libnl3-devel iptables-devel ipset-devel file-devel net-snmp-devel glib2-devel pcre2-devel libnftnl-devel libmnl-devel systemd-devel &> /dev/null
+ elif [[ ${OS_RELEASE_VERSION} == 7 ]] &> /dev/null;then
+ yum -y install make gcc libnfnetlink-devel libnfnetlink ipvsadm libnl libnl-devel libnl3 libnl3-devel lm_sensors-libs net-snmp-agent-libs net-snmp-libs openssh-server openssh-clients openssl openssl-devel automake iproute &> /dev/null
+ elif [[ ${OS_RELEASE_VERSION} == 20 ]] &> /dev/null;then
+ apt update &> /dev/null;apt -y install make gcc ipvsadm build-essential pkg-config automake autoconf libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libipset-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-dev
+ else
+ apt update &> /dev/null;apt -y install make gcc ipvsadm build-essential pkg-config automake autoconf iptables-dev libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libipset-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-dev &> /dev/null
+ fi
+ tar xf ${KEEPALIVED_FILE}
+ KEEPALIVED_DIR=`echo ${KEEPALIVED_FILE} | sed -nr 's/^(.*[0-9]).([[:lower:]]).*/\1/p'`
+ cd ${KEEPALIVED_DIR}
+ ./configure --prefix=${KEEPALIVED_INSTALL_DIR} --disable-fwmark
+ make -j $CPUS && make install
+ [ $? -eq 0 ] && ${COLOR}"Keepalived编译安装成功"${END} || { ${COLOR}"Keepalived编译安装失败,退出!"${END};exit; }
+ [ -d /etc/keepalived ] || mkdir -p /etc/keepalived &> /dev/null
+ cat > /etc/keepalived/keepalived.conf < /etc/profile.d/keepalived.sh
+ systemctl daemon-reload
+ systemctl enable --now keepalived &> /dev/null
+ systemctl is-active keepalived &> /dev/null && ${COLOR}"Keepalived 服务启动成功!"${END} || { ${COLOR}"Keepalived 启动失败,退出!"${END} ; exit; }
+ ${COLOR}"Keepalived安装完成"${END}
+}
+
+main(){
+ os
+ check_file
+ install_keepalived
+}
+
+main
diff --git a/reset/README.md b/reset/README.md
new file mode 100644
index 0000000..b63d6b0
--- /dev/null
+++ b/reset/README.md
@@ -0,0 +1,11 @@
+# CentOS、Ubuntu、Rocky系统初始化脚本
+
+| 版本 | 功能 |
+| ------------ | ------------------------------------------------------------ |
+| v3版更新内容 | 1.添加双网卡更改IP地址; |
+| | 2.添加设置系统时区。 |
+| v2版更新内容 | 1.添加对CentOS stream 8系统支持,添加了CentOS stream 8镜像仓库; |
+| | 2.由于CentOS 8已被废弃,修改成centos-vault的历史镜像仓库; |
+| | 3.优化Ubuntu 20.04禁用swap不生效的问题。 |
+| v1版支持功能 | 1.支持CentOS 6/7/8、Ubuntu 18.04/20.04、Rocky 8系统; |
+| | 2.支持功能禁用SELinux、关闭防火墙、优化SSH、设置系统别名、设置vimrc配置文件、设置软件包仓库、Minimal安装建议安装软件、安装邮件服务并配置邮件、更改SSH端口号、修改网卡名、修改IP地址和网关地址、设置主机名、设置PS1和系统环境变量、禁用SWAP、优化内核参数、优化资源限制参数、Ubuntu设置root用户登录、Ubuntu卸载无用软件包。 |
\ No newline at end of file
diff --git a/reset/reset.sh b/reset/reset.sh
new file mode 100644
index 0000000..459d327
--- /dev/null
+++ b/reset/reset.sh
@@ -0,0 +1,1528 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-11-19
+#FileName: reset.sh
+#URL: raymond.blog.csdn.net
+#Description: reset for CentOS 6/7/8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+os(){
+ if grep -Eqi "Centos" /etc/issue && [ $(sed -rn 's#^.* ([0-9]+)\..*#\1#p' /etc/redhat-release) == 6 ] ;then
+ OS_ID=`sed -rn 's#^([[:alpha:]]+) .*#\1#p' /etc/redhat-release`
+ OS_RELEASE=`sed -rn 's#^.* ([0-9.]+).*#\1#p' /etc/redhat-release`
+ OS_RELEASE_VERSION=`sed -rn 's#^.* ([0-9]+)\..*#\1#p' /etc/redhat-release`
+ else
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_RELEASE=`sed -rn '/^VERSION_ID=/s@.*="?([0-9.]+)"?@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+ fi
+}
+
+disable_selinux(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ if [ `getenforce` == "Enforcing" ];then
+ sed -ri.bak 's/^(SELINUX=).*/\1disabled/' /etc/selinux/config
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux已禁用,请重新启动系统后才能生效!"${END}
+ else
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux已被禁用,不用设置!"${END}
+ fi
+ else
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux默认没有安装,不用设置!"${END}
+ fi
+}
+
+disable_firewall(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q firewalld &> /dev/null && { systemctl disable --now firewalld &> /dev/null; ${COLOR}"${OS_ID} ${OS_RELEASE} Firewall防火墙已关闭!"${END}; } || { service iptables stop ; chkconfig iptables off; ${COLOR}"${OS_ID} ${OS_RELEASE} iptables防火墙已关闭!"${END}; }
+ else
+ dpkg -s ufw &> /dev/null && { systemctl disable --now ufw &> /dev/null; ${COLOR}"${OS_ID} ${OS_RELEASE} ufw防火墙已关闭!"${END}; } || ${COLOR}"${OS_ID} ${OS_RELEASE} 没有ufw防火墙服务,不用关闭!"${END}
+ fi
+}
+
+optimization_sshd(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ sed -ri.bak -e 's/^#(UseDNS).*/\1 no/' -e 's/^(GSSAPIAuthentication).*/\1 no/' /etc/ssh/sshd_config
+ else
+ sed -ri.bak -e 's/^#(UseDNS).*/\1 no/' -e 's/^#(GSSAPIAuthentication).*/\1 no/' /etc/ssh/sshd_config
+ fi
+ if [ ${OS_RELEASE_VERSION} == "6" ] &> /dev/null;then
+ service sshd restart
+ else
+ systemctl restart sshd
+ fi
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SSH已优化完成!"${END}
+}
+
+set_centos_alias(){
+ cat >>~/.bashrc <<-EOF
+alias cdnet="cd /etc/sysconfig/network-scripts"
+alias vie0="vim /etc/sysconfig/network-scripts/ifcfg-eth0"
+alias vie1="vim /etc/sysconfig/network-scripts/ifcfg-eth1"
+alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 系统别名已设置成功,请重新登陆后生效!"${END}
+}
+
+set_ubuntu_alias(){
+ cat >>~/.bashrc <<-EOF
+alias cdnet="cd /etc/netplan"
+alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 系统别名已设置成功,请重新登陆后生效!"${END}
+}
+
+set_alias(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ];then
+ if grep -Eqi "(.*cdnet|.*vie0|.*vie1|.*scandisk)" ~/.bashrc;then
+ sed -i -e '/.*cdnet/d' -e '/.*vie0/d' -e '/.*vie1/d' -e '/.*scandisk/d' ~/.bashrc
+ set_centos_alias
+ else
+ set_centos_alias
+ fi
+ fi
+ if [ ${OS_ID} == "Ubuntu" ];then
+ if grep -Eqi "(.*cdnet|.*scandisk)" ~/.bashrc;then
+ sed -i -e '/.*cdnet/d' -e '/.*scandisk/d' ~/.bashrc
+ set_ubuntu_alias
+ else
+ set_ubuntu_alias
+ fi
+ fi
+}
+
+set_vimrc(){
+ read -p "请输入作者名:" AUTHOR
+ read -p "请输入QQ号:" QQ
+ read -p "请输入网址:" V_URL
+ cat >~/.vimrc <<-EOF
+set ts=4
+set expandtab
+set ignorecase
+set cursorline
+set autoindent
+autocmd BufNewFile *.sh exec ":call SetTitle()"
+func SetTitle()
+ if expand("%:e") == 'sh'
+ call setline(1,"#!/bin/bash")
+ call setline(2,"#")
+ call setline(3,"#**********************************************************************************************")
+ call setline(4,"#Author: ${AUTHOR}")
+ call setline(5,"#QQ: ${QQ}")
+ call setline(6,"#Date: ".strftime("%Y-%m-%d"))
+ call setline(7,"#FileName: ".expand("%"))
+ call setline(8,"#URL: ${V_URL}")
+ call setline(9,"#Description: The test script")
+ call setline(10,"#Copyright (C): ".strftime("%Y")." All rights reserved")
+ call setline(11,"#*********************************************************************************************")
+ call setline(12,"")
+ endif
+endfunc
+autocmd BufNewFile * normal G
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} vimrc设置完成,请重新系统启动才能生效!"${END}
+}
+
+aliyun(){
+ URL=mirrors.aliyun.com
+}
+
+huawei(){
+ URL=repo.huaweicloud.com
+}
+
+tencent(){
+ URL=mirrors.cloud.tencent.com
+}
+
+tuna(){
+ URL=mirrors.tuna.tsinghua.edu.cn
+}
+
+netease(){
+ URL=mirrors.163.com
+}
+
+sohu(){
+ URL=mirrors.sohu.com
+}
+
+fedora(){
+ URL=archives.fedoraproject.org
+}
+
+nju(){
+ URL=mirrors.nju.edu.cn
+}
+
+ustc(){
+ URL=mirrors.ustc.edu.cn
+}
+
+sjtu(){
+ URL=mirrors.sjtug.sjtu.edu.cn
+}
+
+set_yum_centos8(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[BaseOS]
+name=BaseOS
+baseurl=https://${URL}/centos/\$releasever/BaseOS/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[AppStream]
+name=AppStream
+baseurl=https://${URL}/centos/\$releasever/AppStream/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos/\$releasever/extras/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos/\$releasever/centosplus/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/centos/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora-epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora-epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_3_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora/epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_centos7(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[base]
+name=base
+baseurl=https://${URL}/centos/\$releasever/os/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos/\$releasever/extras/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[updates]
+name=updates
+baseurl=https://${URL}/centos/\$releasever/updates/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos/\$releasever/centosplus/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora-epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora-epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_3_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_centos6(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[base]
+name=base
+baseurl=https://${URL}/centos/\$releasever/os/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos/\$releasever/extras/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[updates]
+name=updates
+baseurl=https://${URL}/centos/\$releasever/updates/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos/\$releasever/centosplus/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_yum_2_centos6(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[base]
+name=base
+baseurl=https://${URL}/centos-vault/\$releasever.10/os/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos-vault/\$releasever.10/extras/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[updates]
+name=updates
+baseurl=https://${URL}/centos-vault/\$releasever.10/updates/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos-vault/\$releasever.10/centosplus/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos6(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos6(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/pub/archive/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://$(tencent)/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_rocky8(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[BaseOS]
+name=BaseOS
+baseurl=https://${URL}/rocky/\$releasever/BaseOS/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[AppStream]
+name=AppStream
+baseurl=https://${URL}/rocky/\$releasever/AppStream/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[extras]
+name=extras
+baseurl=https://${URL}/rocky/\$releasever/extras/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[plus]
+name=plus
+baseurl=https://${URL}/rocky/\$releasever/plus/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/rocky/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+centos8_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)搜狐镜像源
+7)南京大学镜像源
+8)中科大镜像源
+9)上海交通大学镜像源
+10)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-10):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_yum_centos8
+ ;;
+ 2)
+ huawei
+ set_yum_centos8
+ ;;
+ 3)
+ tencent
+ set_yum_centos8
+ ;;
+ 4)
+ tuna
+ set_yum_centos8
+ ;;
+ 5)
+ netease
+ set_yum_centos8
+ ;;
+ 6)
+ sohu
+ set_yum_centos8
+ ;;
+ 7)
+ nju
+ set_yum_centos8
+ ;;
+ 8)
+ ustc
+ set_yum_centos8
+ ;;
+ 9)
+ sjtu
+ set_yum_centos8
+ ;;
+ 10)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-10)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos7_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)搜狐镜像源
+7)南京大学镜像源
+8)中科大镜像源
+9)上海交通大学镜像源
+10)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-10):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_yum_centos7
+ ;;
+ 2)
+ huawei
+ set_yum_centos7
+ ;;
+ 3)
+ tencent
+ set_yum_centos7
+ ;;
+ 4)
+ tuna
+ set_yum_centos7
+ ;;
+ 5)
+ netease
+ set_yum_centos7
+ ;;
+ 6)
+ sohu
+ set_yum_centos7
+ ;;
+ 7)
+ nju
+ set_yum_centos7
+ ;;
+ 8)
+ ustc
+ set_yum_centos7
+ ;;
+ 9)
+ sjtu
+ set_yum_centos7
+ ;;
+ 10)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-10)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos6_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)腾讯镜像源
+2)搜狐镜像源
+3)阿里镜像源
+4)清华镜像源
+5)南京大学镜像源
+6)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-6):" NUM
+ case ${NUM} in
+ 1)
+ tencent
+ set_yum_centos6
+ ;;
+ 2)
+ sohu
+ set_yum_centos6
+ ;;
+ 3)
+ aliyun
+ set_yum_2_centos6
+ ;;
+ 4)
+ tuna
+ set_yum_2_centos6
+ ;;
+ 5)
+ nju
+ set_yum_2_centos6
+ ;;
+ 6)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-6)!"${END}
+ ;;
+ esac
+ done
+}
+
+rocky8_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)南京大学镜像源
+2)网易镜像源
+3)中科大镜像源
+4)上海交通大学镜像源
+5)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-5):" NUM
+ case ${NUM} in
+ 1)
+ nju
+ set_yum_rocky8
+ ;;
+ 2)
+ netease
+ set_yum_rocky8
+ ;;
+ 3)
+ ustc
+ set_yum_rocky8
+ ;;
+ 4)
+ sjtu
+ set_yum_rocky8
+ ;;
+ 5)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-5)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos8_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)搜狐镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_epel_centos8
+ ;;
+ 2)
+ huawei
+ set_epel_centos8
+ ;;
+ 3)
+ tencent
+ set_epel_centos8
+ ;;
+ 4)
+ tuna
+ set_epel_centos8
+ ;;
+ 5)
+ sohu
+ set_epel_2_centos8
+ ;;
+ 6)
+ nju
+ set_epel_centos8
+ ;;
+ 7)
+ ustc
+ set_epel_centos8
+ ;;
+ 8)
+ sjtu
+ set_epel_3_centos8
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos7_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)搜狐镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_epel_centos7
+ ;;
+ 2)
+ huawei
+ set_epel_centos7
+ ;;
+ 3)
+ tencent
+ set_epel_centos7
+ ;;
+ 4)
+ tuna
+ set_epel_centos7
+ ;;
+ 5)
+ sohu
+ set_epel_2_centos7
+ ;;
+ 6)
+ nju
+ set_epel_centos7
+ ;;
+ 7)
+ ustc
+ set_epel_centos7
+ ;;
+ 8)
+ sjtu
+ set_epel_3_centos7
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos6_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)腾讯镜像源
+2)Fedora镜像源
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ tencent
+ set_epel_centos6
+ ;;
+ 2)
+ fedora
+ set_epel_2_centos6
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)base仓库
+2)epel仓库
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ if [ ${OS_RELEASE_VERSION} == "8" ] &> /dev/null;then
+ centos8_base_menu
+ elif [ ${OS_RELEASE_VERSION} == "7" ] &> /dev/null;then
+ centos7_base_menu
+ else
+ centos6_base_menu
+ fi
+ ;;
+ 2)
+ if [ ${OS_RELEASE_VERSION} == "8" ] &> /dev/null;then
+ centos8_epel_menu
+ elif [ ${OS_RELEASE_VERSION} == "7" ] &> /dev/null;then
+ centos7_epel_menu
+ else
+ centos6_epel_menu
+ fi
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+rocky_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)base仓库
+2)epel仓库
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ rocky8_base_menu
+ ;;
+ 2)
+ centos8_epel_menu
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_apt(){
+ mv /etc/apt/sources.list /etc/apt/sources.list.bak
+ cat > /etc/apt/sources.list <<-EOF
+deb http://${URL}/ubuntu/ $(lsb_release -cs) main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs) main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-security main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-security main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-updates main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-updates main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-proposed main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-proposed main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-backports main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-backports main restricted universe multiverse
+EOF
+ apt update
+ ${COLOR}"${OS_ID} ${OS_RELEASE} APT源设置完成!"${END}
+}
+
+apt_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_apt
+ ;;
+ 2)
+ huawei
+ set_apt
+ ;;
+ 3)
+ tencent
+ set_apt
+ ;;
+ 4)
+ tuna
+ set_apt
+ ;;
+ 5)
+ netease
+ set_apt
+ ;;
+ 6)
+ nju
+ set_apt
+ ;;
+ 7)
+ ustc
+ set_apt
+ ;;
+ 8)
+ sjtu
+ set_apt
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_package_repository(){
+ if [ ${OS_ID} == "CentOS" ]&> /dev/null;then
+ centos_menu
+ elif [ ${OS_ID} == "Rocky" ]&> /dev/null;then
+ rocky_menu
+ else
+ apt_menu
+ fi
+}
+
+centos_minimal_install(){
+ ${COLOR}'开始安装“Minimal安装建议安装软件包”,请稍等......'${END}
+ yum -y install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} Minimal安装建议安装软件包已安装完成!"${END}
+}
+
+ubuntu_minimal_install(){
+ ${COLOR}'开始安装“Minimal安装建议安装软件包”,请稍等......'${END}
+ apt -y install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc openssh-server iotop unzip zip
+ ${COLOR}"${OS_ID} ${OS_RELEASE} Minimal安装建议安装软件包已安装完成!"${END}
+}
+
+minimal_install(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ centos_minimal_install
+ else
+ ubuntu_minimal_install
+ fi
+}
+
+set_mail(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q postfix &> /dev/null || { yum -y install postfix &> /dev/null; systemctl enable --now postfix &> /dev/null; }
+ rpm -q mailx &> /dev/null || yum -y install mailx &> /dev/null
+ else
+ dpkg -s mailutils &> /dev/null || apt -y install mailutils
+ fi
+ read -p "请输入邮箱地址:" MAIL
+ read -p "请输入邮箱授权码:" AUTH
+ SMTP=`echo ${MAIL} |awk -F"@" '{print $2}'`
+ cat >~/.mailrc <<-EOF
+set from=${MAIL}
+set smtp=smtp.${SMTP}
+set smtp-auth-user=${MAIL}
+set smtp-auth-password=${AUTH}
+set smtp-auth=login
+set ssl-verify=ignore
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 邮件设置完成,请重新登录后才能生效!"${END}
+}
+
+set_sshd_port(){
+ disable_selinux
+ disable_firewall
+ read -p "请输入端口号:" PORT
+ sed -i 's/#Port 22/Port '${PORT}'/' /etc/ssh/sshd_config
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 更改SSH端口号已完成,请重启系统后生效!"${END}
+}
+
+set_centos_eth(){
+ ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
+ #修改网卡名称配置文件
+ sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0 biosdevname=0"@' /etc/default/grub
+ grub2-mkconfig -o /boot/grub2/grub.cfg >& /dev/null
+
+ #修改网卡文件名
+ mv /etc/sysconfig/network-scripts/ifcfg-${ETHNAME} /etc/sysconfig/network-scripts/ifcfg-eth0
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 网卡名已修改成功,请重新启动系统后才能生效!"${END}
+}
+
+set_ubuntu_eth(){
+ #修改网卡名称配置文件
+ sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@net.ifnames=0 biosdevname=0"@' /etc/default/grub
+ grub-mkconfig -o /boot/grub/grub.cfg >& /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 网卡名已修改成功,请重新启动系统后才能生效!"${END}
+}
+
+set_eth(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ if [ ${OS_RELEASE_VERSION} == 6 ];then
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 不用修改网卡名"${END}
+ else
+ set_centos_eth
+ fi
+ else
+ set_ubuntu_eth
+ fi
+}
+
+check_ip(){
+ local IP=$1
+ VALID_CHECK=$(echo ${IP}|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
+ if echo ${IP}|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
+ if [ ${VALID_CHECK} == "yes" ]; then
+ echo "IP ${IP} available!"
+ return 0
+ else
+ echo "IP ${IP} not available!"
+ return 1
+ fi
+ else
+ echo "IP format error!"
+ return 1
+ fi
+}
+
+set_centos_ip(){
+ while true; do
+ read -p "请输入IP地址:" IP
+ check_ip ${IP}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" C_PREFIX
+ while true; do
+ read -p "请输入网关地址:" GATEWAY
+ check_ip ${GATEWAY}
+ [ $? -eq 0 ] && break
+ done
+ cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<-EOF
+DEVICE=eth0
+NAME=eth0
+BOOTPROTO=none
+ONBOOT=yes
+IPADDR=${IP}
+PREFIX=${C_PREFIX}
+GATEWAY=${GATEWAY}
+DNS1=223.5.5.5
+DNS2=180.76.76.76
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} IP地址和网关地址已修改成功,请重新启动系统后生效!"${END}
+}
+
+set_ubuntu_ip(){
+ while true; do
+ read -p "请输入IP地址:" IP
+ check_ip ${IP}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" U_PREFIX
+ while true; do
+ read -p "请输入网关地址:" GATEWAY
+ check_ip ${GATEWAY}
+ [ $? -eq 0 ] && break
+ done
+ cat > /etc/netplan/01-netcfg.yaml <<-EOF
+network:
+ version: 2
+ renderer: networkd
+ ethernets:
+ eth0:
+ addresses: [${IP}/${U_PREFIX}]
+ gateway4: ${GATEWAY}
+ nameservers:
+ addresses: [223.5.5.5, 180.76.76.76]
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} IP地址和网关地址已修改成功,请重新启动系统后生效!"${END}
+}
+
+set_ip(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ set_centos_ip
+ else
+ set_ubuntu_ip
+ fi
+}
+
+set_hostname_all(){
+ read -p "请输入主机名:" HOST
+ hostnamectl set-hostname ${HOST}
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 主机名设置成功,请重新登录生效!"${END}
+}
+
+set_hostname6(){
+ read -p "请输入主机名:" HOST
+ sed -i.bak -r '/^HOSTNAME/s#^(HOSTNAME=).*#\1'${HOST}'#' /etc/sysconfig/network
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 主机名设置成功,请重新登录生效!"${END}
+}
+
+set_hostname(){
+ if [ ${OS_RELEASE_VERSION} == 6 ] &> /dev/null;then
+ set_hostname6
+ else
+ set_hostname_all
+ fi
+}
+
+red(){
+ P_COLOR=31
+}
+
+green(){
+ P_COLOR=32
+}
+
+yellow(){
+ P_COLOR=33
+}
+
+blue(){
+ P_COLOR=34
+}
+
+violet(){
+ P_COLOR=35
+}
+
+cyan_blue(){
+ P_COLOR=36
+}
+
+random_color(){
+ P_COLOR="$[RANDOM%7+31]"
+}
+
+centos_ps1_1(){
+ C_PS1_1=$(echo "PS1='\[\e[1;${P_COLOR}m\][\u@\h \W]\\$ \[\e[0m\]'" >> /etc/profile.d/env.sh)
+}
+
+centos_ps1_2(){
+ C_PS1_2=$(echo "PS1='\[\e[1;${P_COLOR}m\][\u@\h \W]\\$ \[\e[0m\]'" > /etc/profile.d/env.sh)
+}
+
+centos_vim(){
+ echo "export EDITOR=vim" >> /etc/profile.d/env.sh
+}
+
+centos_history(){
+ echo 'export HISTTIMEFORMAT="%F %T "' >> /etc/profile.d/env.sh
+}
+
+ubuntu_ps1(){
+ U_PS1=$(echo 'PS1="\[\e[1;'''${P_COLOR}'''m\]${debian_chroot:+($debian_chroot)}\u@\h:\w\\$ \[\e[0m\]"' >> ~/.bashrc)
+}
+
+ubuntu_vim(){
+ echo "export EDITOR=vim" >> ~/.bashrc
+}
+
+ubuntu_history(){
+ echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
+}
+
+set_env(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ];then
+ if [ -a /etc/profile.d/env.sh ] && grep -Eqi "(^PS1|.*EDITOR|.*HISTTIMEFORMAT)" /etc/profile.d/env.sh;then
+ sed -i -e '/^PS1/d' -e '/.*EDITOR/d' -e '/.*HISTTIMEFORMAT/d' /etc/profile.d/env.sh
+ centos_ps1_1
+ centos_vim
+ centos_history
+ else
+ centos_ps1_2
+ centos_vim
+ centos_history
+ fi
+ fi
+ if [ ${OS_ID} == "Ubuntu" ];then
+ if grep -Eqi "(^PS1|.*EDITOR|.*HISTTIMEFORMAT)" ~/.bashrc;then
+ sed -i -e '/^PS1/d' -e '/.*EDITOR/d' -e '/.*HISTTIMEFORMAT/d' ~/.bashrc
+ ubuntu_ps1
+ ubuntu_vim
+ ubuntu_history
+ else
+ ubuntu_ps1
+ ubuntu_vim
+ ubuntu_history
+ fi
+ fi
+}
+
+set_ps1(){
+ TIPS="${COLOR}${OS_ID} ${OS_RELEASE} PS1和系统环境变量已设置完成,请重新登录生效!${END}"
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)31 红色
+2)32 绿色
+3)33 黄色
+4)34 蓝色
+5)35 紫色
+6)36 青色
+7)随机颜色
+8)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入颜色编号(1-8)" NUM
+ case ${NUM} in
+ 1)
+ red
+ set_env
+ ${TIPS}
+ ;;
+ 2)
+ green
+ set_env
+ ${TIPS}
+ ;;
+ 3)
+ yellow
+ set_env
+ ${TIPS}
+ ;;
+ 4)
+ blue
+ set_env
+ ${TIPS}
+ ;;
+ 5)
+ violet
+ set_env
+ ${TIPS}
+ ;;
+ 6)
+ cyan_blue
+ set_env
+ ${TIPS}
+ ;;
+ 7)
+ random_color
+ set_env
+ ${TIPS}
+ ;;
+ 8)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_swap(){
+ sed -ri 's/.*swap.*/#&/' /etc/fstab
+ swapoff -a
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 禁用swap成功!"${END}
+}
+
+set_kernel(){
+ cat > /etc/sysctl.conf <<-EOF
+# Controls source route verification
+net.ipv4.conf.default.rp_filter = 1
+net.ipv4.ip_nonlocal_bind = 1
+net.ipv4.ip_forward = 1
+
+# Do not accept source routing
+net.ipv4.conf.default.accept_source_route = 0
+
+# Controls the System Request debugging functionality of the kernel
+kernel.sysrq = 0
+
+# Controls whether core dumps will append the PID to the core filename.
+# Useful for debugging multi-threaded applications.
+kernel.core_uses_pid = 1
+
+# Controls the use of TCP syncookies
+net.ipv4.tcp_syncookies = 1
+
+# Disable netfilter on bridges.
+net.bridge.bridge-nf-call-ip6tables = 0
+net.bridge.bridge-nf-call-iptables = 0
+net.bridge.bridge-nf-call-arptables = 0
+
+# Controls the default maxmimum size of a mesage queue
+kernel.msgmnb = 65536
+
+# Controls the maximum size of a message, in bytes
+kernel.msgmax = 65536
+
+# Controls the maximum shared segment size, in bytes
+kernel.shmmax = 68719476736
+
+# Controls the maximum number of shared memory segments, in pages
+kernel.shmall = 4294967296
+
+# TCP kernel paramater
+net.ipv4.tcp_mem = 786432 1048576 1572864
+net.ipv4.tcp_rmem = 4096 87380 4194304
+net.ipv4.tcp_wmem = 4096 16384 4194304
+net.ipv4.tcp_window_scaling = 1
+net.ipv4.tcp_sack = 1
+
+# socket buffer
+net.core.wmem_default = 8388608
+net.core.rmem_default = 8388608
+net.core.rmem_max = 16777216
+net.core.wmem_max = 16777216
+net.core.netdev_max_backlog = 262144
+net.core.somaxconn = 20480
+net.core.optmem_max = 81920
+
+# TCP conn
+net.ipv4.tcp_max_syn_backlog = 262144
+net.ipv4.tcp_syn_retries = 3
+net.ipv4.tcp_retries1 = 3
+net.ipv4.tcp_retries2 = 15
+
+# tcp conn reuse
+net.ipv4.tcp_tw_reuse = 1
+net.ipv4.tcp_tw_recycle = 0
+net.ipv4.tcp_fin_timeout = 30
+net.ipv4.tcp_timestamps = 0
+
+net.ipv4.tcp_max_tw_buckets = 20000
+net.ipv4.tcp_max_orphans = 3276800
+net.ipv4.tcp_synack_retries = 1
+net.ipv4.tcp_syncookies = 1
+
+# keepalive conn
+net.ipv4.tcp_keepalive_time = 300
+net.ipv4.tcp_keepalive_intvl = 30
+net.ipv4.tcp_keepalive_probes = 3
+net.ipv4.ip_local_port_range = 10001 65000
+
+# swap
+vm.overcommit_memory = 0
+vm.swappiness = 10
+
+#net.ipv4.conf.eth1.rp_filter = 0
+#net.ipv4.conf.lo.arp_ignore = 1
+#net.ipv4.conf.lo.arp_announce = 2
+#net.ipv4.conf.all.arp_ignore = 1
+#net.ipv4.conf.all.arp_announce = 2
+EOF
+ sysctl -p &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 优化内核参数成功!"${END}
+}
+
+set_limits(){
+ cat >> /etc/security/limits.conf <<-EOF
+root soft core unlimited
+root hard core unlimited
+root soft nproc 1000000
+root hard nproc 1000000
+root soft nofile 1000000
+root hard nofile 1000000
+root soft memlock 32000
+root hard memlock 32000
+root soft msgqueue 8192000
+root hard msgqueue 8192000
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 优化资源限制参数成功!"${END}
+}
+
+set_root_login(){
+ read -p "请输入密码: " PASSWORD
+ echo ${PASSWORD} |sudo -S sed -ri 's@#(PermitRootLogin )prohibit-password@\1yes@' /etc/ssh/sshd_config
+ sudo systemctl restart sshd
+ sudo -S passwd root <<-EOF
+${PASSWORD}
+${PASSWORD}
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} root用户登录已设置完成,请重新登录后生效!"${END}
+}
+
+ubuntu_remove(){
+ apt purge ufw lxd lxd-client lxcfs liblxc-common
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 无用软件包卸载完成!"${END}
+}
+
+menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+************************************************************
+* 初始化脚本菜单 *
+* 1.禁用SELinux 12.修改IP地址和网关地址 *
+* 2.关闭防火墙 13.设置主机名 *
+* 3.优化SSH 14.设置PS1和系统环境变量 *
+* 4.设置系统别名 15.禁用SWAP *
+* 5.1-4全设置 16.优化内核参数 *
+* 6.设置vimrc配置文件 17.优化资源限制参数 *
+* 7.设置软件包仓库 18.Ubuntu设置root用户登录 *
+* 8.Minimal安装建议安装软件 19.Ubuntu卸载无用软件包 *
+* 9.安装邮件服务并配置邮件 20.重启系统 *
+* 10.更改SSH端口号 21.退出 *
+* 11.修改网卡名 *
+************************************************************
+EOF
+ echo -e '\E[0m'
+
+ read -p "请选择相应的编号(1-21): " choice
+ case ${choice} in
+ 1)
+ disable_selinux
+ ;;
+ 2)
+ disable_firewall
+ ;;
+ 3)
+ optimization_sshd
+ ;;
+ 4)
+ set_alias
+ ;;
+ 5)
+ disable_selinux
+ disable_firewall
+ optimization_sshd
+ set_alias
+ ;;
+ 6)
+ set_vimrc
+ ;;
+ 7)
+ set_package_repository
+ ;;
+ 8)
+ minimal_install
+ ;;
+ 9)
+ set_mail
+ ;;
+ 10)
+ set_sshd_port
+ ;;
+ 11)
+ set_eth
+ ;;
+ 12)
+ set_ip
+ ;;
+ 13)
+ set_hostname
+ ;;
+ 14)
+ set_ps1
+ ;;
+ 15)
+ set_swap
+ ;;
+ 16)
+ set_kernel
+ ;;
+ 17)
+ set_limits
+ ;;
+ 18)
+ set_root_login
+ ;;
+ 19)
+ ubuntu_remove
+ ;;
+ 20)
+ reboot
+ ;;
+ 21)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-21)!"${END}
+ ;;
+ esac
+ done
+}
+
+main(){
+ os
+ menu
+}
+
+main
diff --git a/reset/reset_v2.sh b/reset/reset_v2.sh
new file mode 100644
index 0000000..56b6ba1
--- /dev/null
+++ b/reset/reset_v2.sh
@@ -0,0 +1,1609 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2022-04-19
+#FileName: reset_v2.sh
+#URL: raymond.blog.csdn.net
+#Description: reset for CentOS 6/7/8/stream 8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+os(){
+ if grep -Eqi "Centos" /etc/issue && [ $(sed -rn 's#^.* ([0-9]+)\..*#\1#p' /etc/redhat-release) == 6 ] ;then
+ OS_ID=`sed -rn 's#^([[:alpha:]]+) .*#\1#p' /etc/redhat-release`
+ OS_RELEASE=`sed -rn 's#^.* ([0-9.]+).*#\1#p' /etc/redhat-release`
+ OS_RELEASE_VERSION=`sed -rn 's#^.* ([0-9]+)\..*#\1#p' /etc/redhat-release`
+ else
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_NAME=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+) (.*)"$@\2@p' /etc/os-release`
+ OS_RELEASE=`sed -rn '/^VERSION_ID=/s@.*="?([0-9.]+)"?@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+ fi
+}
+
+disable_selinux(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ if [ `getenforce` == "Enforcing" ];then
+ sed -ri.bak 's/^(SELINUX=).*/\1disabled/' /etc/selinux/config
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux已禁用,请重新启动系统后才能生效!"${END}
+ else
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux已被禁用,不用设置!"${END}
+ fi
+ else
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux默认没有安装,不用设置!"${END}
+ fi
+}
+
+disable_firewall(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q firewalld &> /dev/null && { systemctl disable --now firewalld &> /dev/null; ${COLOR}"${OS_ID} ${OS_RELEASE} Firewall防火墙已关闭!"${END}; } || { service iptables stop ; chkconfig iptables off; ${COLOR}"${OS_ID} ${OS_RELEASE} iptables防火墙已关闭!"${END}; }
+ else
+ dpkg -s ufw &> /dev/null && { systemctl disable --now ufw &> /dev/null; ${COLOR}"${OS_ID} ${OS_RELEASE} ufw防火墙已关闭!"${END}; } || ${COLOR}"${OS_ID} ${OS_RELEASE} 没有ufw防火墙服务,不用关闭!"${END}
+ fi
+}
+
+optimization_sshd(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ sed -ri.bak -e 's/^#(UseDNS).*/\1 no/' -e 's/^(GSSAPIAuthentication).*/\1 no/' /etc/ssh/sshd_config
+ else
+ sed -ri.bak -e 's/^#(UseDNS).*/\1 no/' -e 's/^#(GSSAPIAuthentication).*/\1 no/' /etc/ssh/sshd_config
+ fi
+ if [ ${OS_RELEASE_VERSION} == "6" ] &> /dev/null;then
+ service sshd restart
+ else
+ systemctl restart sshd
+ fi
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SSH已优化完成!"${END}
+}
+
+set_centos_alias(){
+ cat >>~/.bashrc <<-EOF
+alias cdnet="cd /etc/sysconfig/network-scripts"
+alias vie0="vim /etc/sysconfig/network-scripts/ifcfg-eth0"
+alias vie1="vim /etc/sysconfig/network-scripts/ifcfg-eth1"
+alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 系统别名已设置成功,请重新登陆后生效!"${END}
+}
+
+set_ubuntu_alias(){
+ cat >>~/.bashrc <<-EOF
+alias cdnet="cd /etc/netplan"
+alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 系统别名已设置成功,请重新登陆后生效!"${END}
+}
+
+set_alias(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ];then
+ if grep -Eqi "(.*cdnet|.*vie0|.*vie1|.*scandisk)" ~/.bashrc;then
+ sed -i -e '/.*cdnet/d' -e '/.*vie0/d' -e '/.*vie1/d' -e '/.*scandisk/d' ~/.bashrc
+ set_centos_alias
+ else
+ set_centos_alias
+ fi
+ fi
+ if [ ${OS_ID} == "Ubuntu" ];then
+ if grep -Eqi "(.*cdnet|.*scandisk)" ~/.bashrc;then
+ sed -i -e '/.*cdnet/d' -e '/.*scandisk/d' ~/.bashrc
+ set_ubuntu_alias
+ else
+ set_ubuntu_alias
+ fi
+ fi
+}
+
+set_vimrc(){
+ read -p "请输入作者名:" AUTHOR
+ read -p "请输入QQ号:" QQ
+ read -p "请输入网址:" V_URL
+ cat >~/.vimrc <<-EOF
+set ts=4
+set expandtab
+set ignorecase
+set cursorline
+set autoindent
+autocmd BufNewFile *.sh exec ":call SetTitle()"
+func SetTitle()
+ if expand("%:e") == 'sh'
+ call setline(1,"#!/bin/bash")
+ call setline(2,"#")
+ call setline(3,"#**********************************************************************************************")
+ call setline(4,"#Author: ${AUTHOR}")
+ call setline(5,"#QQ: ${QQ}")
+ call setline(6,"#Date: ".strftime("%Y-%m-%d"))
+ call setline(7,"#FileName: ".expand("%"))
+ call setline(8,"#URL: ${V_URL}")
+ call setline(9,"#Description: The test script")
+ call setline(10,"#Copyright (C): ".strftime("%Y")." All rights reserved")
+ call setline(11,"#*********************************************************************************************")
+ call setline(12,"")
+ endif
+endfunc
+autocmd BufNewFile * normal G
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} vimrc设置完成,请重新系统启动才能生效!"${END}
+}
+
+aliyun(){
+ URL=mirrors.aliyun.com
+}
+
+huawei(){
+ URL=repo.huaweicloud.com
+}
+
+tencent(){
+ URL=mirrors.cloud.tencent.com
+}
+
+tuna(){
+ URL=mirrors.tuna.tsinghua.edu.cn
+}
+
+netease(){
+ URL=mirrors.163.com
+}
+
+sohu(){
+ URL=mirrors.sohu.com
+}
+
+fedora(){
+ URL=archives.fedoraproject.org
+}
+
+nju(){
+ URL=mirrors.nju.edu.cn
+}
+
+ustc(){
+ URL=mirrors.ustc.edu.cn
+}
+
+sjtu(){
+ URL=mirrors.sjtug.sjtu.edu.cn
+}
+
+set_yum_centos8_stream(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[BaseOS]
+name=BaseOS
+baseurl=https://${URL}/centos/\$releasever-stream/BaseOS/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[AppStream]
+name=AppStream
+baseurl=https://${URL}/centos/\$releasever-stream/AppStream/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos/\$releasever-stream/extras/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos/\$releasever-stream/centosplus/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/centos/\$releasever-stream/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_yum_centos8(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[BaseOS]
+name=BaseOS
+baseurl=https://${URL}/centos-vault/centos/\$releasever/BaseOS/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[AppStream]
+name=AppStream
+baseurl=https://${URL}/centos-vault/centos/\$releasever/AppStream/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos-vault/centos/\$releasever/extras/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos-vault/centos/\$releasever/centosplus/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/centos-vault/centos/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora-epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora-epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_3_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora/epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_centos7(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[base]
+name=base
+baseurl=https://${URL}/centos/\$releasever/os/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos/\$releasever/extras/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[updates]
+name=updates
+baseurl=https://${URL}/centos/\$releasever/updates/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos/\$releasever/centosplus/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora-epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora-epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_3_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_centos6(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[base]
+name=base
+baseurl=https://${URL}/centos-vault/centos/\$releasever/os/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos-vault/centos/\$releasever/extras/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[updates]
+name=updates
+baseurl=https://${URL}/centos-vault/centos/\$releasever/updates/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos-vault/centos/\$releasever/centosplus/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos6(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos6(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/pub/archive/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://$(tencent)/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_rocky8(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[BaseOS]
+name=BaseOS
+baseurl=https://${URL}/rocky/\$releasever/BaseOS/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[AppStream]
+name=AppStream
+baseurl=https://${URL}/rocky/\$releasever/AppStream/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[extras]
+name=extras
+baseurl=https://${URL}/rocky/\$releasever/extras/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[plus]
+name=plus
+baseurl=https://${URL}/rocky/\$releasever/plus/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/rocky/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+centos8_stream_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)搜狐镜像源
+7)南京大学镜像源
+8)中科大镜像源
+9)上海交通大学镜像源
+10)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-10):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_yum_centos8_stream
+ ;;
+ 2)
+ huawei
+ set_yum_centos8_stream
+ ;;
+ 3)
+ tencent
+ set_yum_centos8_stream
+ ;;
+ 4)
+ tuna
+ set_yum_centos8_stream
+ ;;
+ 5)
+ netease
+ set_yum_centos8_stream
+ ;;
+ 6)
+ sohu
+ set_yum_centos8_stream
+ ;;
+ 7)
+ nju
+ set_yum_centos8_stream
+ ;;
+ 8)
+ ustc
+ set_yum_centos8_stream
+ ;;
+ 9)
+ sjtu
+ set_yum_centos8_stream
+ ;;
+ 10)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-10)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos8_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)搜狐镜像源
+7)南京大学镜像源
+8)中科大镜像源
+9)上海交通大学镜像源
+10)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-10):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_yum_centos8
+ ;;
+ 2)
+ huawei
+ set_yum_centos8
+ ;;
+ 3)
+ tencent
+ set_yum_centos8
+ ;;
+ 4)
+ tuna
+ set_yum_centos8
+ ;;
+ 5)
+ netease
+ set_yum_centos8
+ ;;
+ 6)
+ sohu
+ set_yum_centos8
+ ;;
+ 7)
+ nju
+ set_yum_centos8
+ ;;
+ 8)
+ ustc
+ set_yum_centos8
+ ;;
+ 9)
+ sjtu
+ set_yum_centos8
+ ;;
+ 10)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-10)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos7_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)搜狐镜像源
+7)南京大学镜像源
+8)中科大镜像源
+9)上海交通大学镜像源
+10)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-10):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_yum_centos7
+ ;;
+ 2)
+ huawei
+ set_yum_centos7
+ ;;
+ 3)
+ tencent
+ set_yum_centos7
+ ;;
+ 4)
+ tuna
+ set_yum_centos7
+ ;;
+ 5)
+ netease
+ set_yum_centos7
+ ;;
+ 6)
+ sohu
+ set_yum_centos7
+ ;;
+ 7)
+ nju
+ set_yum_centos7
+ ;;
+ 8)
+ ustc
+ set_yum_centos7
+ ;;
+ 9)
+ sjtu
+ set_yum_centos7
+ ;;
+ 10)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-10)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos6_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)腾讯镜像源
+2)搜狐镜像源
+3)阿里镜像源
+4)清华镜像源
+5)南京大学镜像源
+6)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-6):" NUM
+ case ${NUM} in
+ 1)
+ tencent
+ set_yum_centos6
+ ;;
+ 2)
+ sohu
+ set_yum_centos6
+ ;;
+ 3)
+ aliyun
+ set_yum_centos6
+ ;;
+ 4)
+ tuna
+ set_yum_centos6
+ ;;
+ 5)
+ nju
+ set_yum_centos6
+ ;;
+ 6)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-6)!"${END}
+ ;;
+ esac
+ done
+}
+
+rocky8_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)南京大学镜像源
+2)网易镜像源
+3)中科大镜像源
+4)上海交通大学镜像源
+5)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-5):" NUM
+ case ${NUM} in
+ 1)
+ nju
+ set_yum_rocky8
+ ;;
+ 2)
+ netease
+ set_yum_rocky8
+ ;;
+ 3)
+ ustc
+ set_yum_rocky8
+ ;;
+ 4)
+ sjtu
+ set_yum_rocky8
+ ;;
+ 5)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-5)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos8_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)搜狐镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_epel_centos8
+ ;;
+ 2)
+ huawei
+ set_epel_centos8
+ ;;
+ 3)
+ tencent
+ set_epel_centos8
+ ;;
+ 4)
+ tuna
+ set_epel_centos8
+ ;;
+ 5)
+ sohu
+ set_epel_2_centos8
+ ;;
+ 6)
+ nju
+ set_epel_centos8
+ ;;
+ 7)
+ ustc
+ set_epel_centos8
+ ;;
+ 8)
+ sjtu
+ set_epel_3_centos8
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos7_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)搜狐镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_epel_centos7
+ ;;
+ 2)
+ huawei
+ set_epel_centos7
+ ;;
+ 3)
+ tencent
+ set_epel_centos7
+ ;;
+ 4)
+ tuna
+ set_epel_centos7
+ ;;
+ 5)
+ sohu
+ set_epel_2_centos7
+ ;;
+ 6)
+ nju
+ set_epel_centos7
+ ;;
+ 7)
+ ustc
+ set_epel_centos7
+ ;;
+ 8)
+ sjtu
+ set_epel_3_centos7
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos6_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)腾讯镜像源
+2)Fedora镜像源
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ tencent
+ set_epel_centos6
+ ;;
+ 2)
+ fedora
+ set_epel_2_centos6
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)base仓库
+2)epel仓库
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ if [ ${OS_RELEASE_VERSION} == "8" -a ${OS_NAME} == "Stream" ] &> /dev/null;then
+ centos8_stream_base_menu
+ elif [ ${OS_RELEASE_VERSION} == "8" -a ${OS_NAME} == "Linux" ] &> /dev/null;then
+ centos8_base_menu
+ elif [ ${OS_RELEASE_VERSION} == "7" ] &> /dev/null;then
+ centos7_base_menu
+ else
+ centos6_base_menu
+ fi
+ ;;
+ 2)
+ if [ ${OS_RELEASE_VERSION} == "8" ] &> /dev/null;then
+ centos8_epel_menu
+ elif [ ${OS_RELEASE_VERSION} == "7" ] &> /dev/null;then
+ centos7_epel_menu
+ else
+ centos6_epel_menu
+ fi
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+rocky_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)base仓库
+2)epel仓库
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ rocky8_base_menu
+ ;;
+ 2)
+ centos8_epel_menu
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_apt(){
+ mv /etc/apt/sources.list /etc/apt/sources.list.bak
+ cat > /etc/apt/sources.list <<-EOF
+deb http://${URL}/ubuntu/ $(lsb_release -cs) main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs) main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-security main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-security main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-updates main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-updates main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-proposed main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-proposed main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-backports main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-backports main restricted universe multiverse
+EOF
+ apt update
+ ${COLOR}"${OS_ID} ${OS_RELEASE} APT源设置完成!"${END}
+}
+
+apt_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_apt
+ ;;
+ 2)
+ huawei
+ set_apt
+ ;;
+ 3)
+ tencent
+ set_apt
+ ;;
+ 4)
+ tuna
+ set_apt
+ ;;
+ 5)
+ netease
+ set_apt
+ ;;
+ 6)
+ nju
+ set_apt
+ ;;
+ 7)
+ ustc
+ set_apt
+ ;;
+ 8)
+ sjtu
+ set_apt
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_package_repository(){
+ if [ ${OS_ID} == "CentOS" ]&> /dev/null;then
+ centos_menu
+ elif [ ${OS_ID} == "Rocky" ]&> /dev/null;then
+ rocky_menu
+ else
+ apt_menu
+ fi
+}
+
+centos_minimal_install(){
+ ${COLOR}'开始安装“Minimal安装建议安装软件包”,请稍等......'${END}
+ yum -y install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} Minimal安装建议安装软件包已安装完成!"${END}
+}
+
+ubuntu_minimal_install(){
+ ${COLOR}'开始安装“Minimal安装建议安装软件包”,请稍等......'${END}
+ apt -y install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc openssh-server iotop unzip zip
+ ${COLOR}"${OS_ID} ${OS_RELEASE} Minimal安装建议安装软件包已安装完成!"${END}
+}
+
+minimal_install(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ centos_minimal_install
+ else
+ ubuntu_minimal_install
+ fi
+}
+
+set_mail(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q postfix &> /dev/null || { yum -y install postfix &> /dev/null; systemctl enable --now postfix &> /dev/null; }
+ rpm -q mailx &> /dev/null || yum -y install mailx &> /dev/null
+ else
+ dpkg -s mailutils &> /dev/null || apt -y install mailutils
+ fi
+ read -p "请输入邮箱地址:" MAIL
+ read -p "请输入邮箱授权码:" AUTH
+ SMTP=`echo ${MAIL} |awk -F"@" '{print $2}'`
+ cat >~/.mailrc <<-EOF
+set from=${MAIL}
+set smtp=smtp.${SMTP}
+set smtp-auth-user=${MAIL}
+set smtp-auth-password=${AUTH}
+set smtp-auth=login
+set ssl-verify=ignore
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 邮件设置完成,请重新登录后才能生效!"${END}
+}
+
+set_sshd_port(){
+ disable_selinux
+ disable_firewall
+ read -p "请输入端口号:" PORT
+ sed -i 's/#Port 22/Port '${PORT}'/' /etc/ssh/sshd_config
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 更改SSH端口号已完成,请重启系统后生效!"${END}
+}
+
+set_centos_eth(){
+ ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
+ #修改网卡名称配置文件
+ sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0 biosdevname=0"@' /etc/default/grub
+ grub2-mkconfig -o /boot/grub2/grub.cfg >& /dev/null
+
+ #修改网卡文件名
+ mv /etc/sysconfig/network-scripts/ifcfg-${ETHNAME} /etc/sysconfig/network-scripts/ifcfg-eth0
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 网卡名已修改成功,请重新启动系统后才能生效!"${END}
+}
+
+set_ubuntu_eth(){
+ #修改网卡名称配置文件
+ sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@net.ifnames=0 biosdevname=0"@' /etc/default/grub
+ grub-mkconfig -o /boot/grub/grub.cfg >& /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 网卡名已修改成功,请重新启动系统后才能生效!"${END}
+}
+
+set_eth(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ if [ ${OS_RELEASE_VERSION} == 6 ];then
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 不用修改网卡名"${END}
+ else
+ set_centos_eth
+ fi
+ else
+ set_ubuntu_eth
+ fi
+}
+
+check_ip(){
+ local IP=$1
+ VALID_CHECK=$(echo ${IP}|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
+ if echo ${IP}|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
+ if [ ${VALID_CHECK} == "yes" ]; then
+ echo "IP ${IP} available!"
+ return 0
+ else
+ echo "IP ${IP} not available!"
+ return 1
+ fi
+ else
+ echo "IP format error!"
+ return 1
+ fi
+}
+
+set_centos_ip(){
+ while true; do
+ read -p "请输入IP地址:" IP
+ check_ip ${IP}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" C_PREFIX
+ while true; do
+ read -p "请输入网关地址:" GATEWAY
+ check_ip ${GATEWAY}
+ [ $? -eq 0 ] && break
+ done
+ cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<-EOF
+DEVICE=eth0
+NAME=eth0
+BOOTPROTO=none
+ONBOOT=yes
+IPADDR=${IP}
+PREFIX=${C_PREFIX}
+GATEWAY=${GATEWAY}
+DNS1=223.5.5.5
+DNS2=180.76.76.76
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} IP地址和网关地址已修改成功,请重新启动系统后生效!"${END}
+}
+
+set_ubuntu_ip(){
+ while true; do
+ read -p "请输入IP地址:" IP
+ check_ip ${IP}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" U_PREFIX
+ while true; do
+ read -p "请输入网关地址:" GATEWAY
+ check_ip ${GATEWAY}
+ [ $? -eq 0 ] && break
+ done
+ cat > /etc/netplan/01-netcfg.yaml <<-EOF
+network:
+ version: 2
+ renderer: networkd
+ ethernets:
+ eth0:
+ addresses: [${IP}/${U_PREFIX}]
+ gateway4: ${GATEWAY}
+ nameservers:
+ addresses: [223.5.5.5, 180.76.76.76]
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} IP地址和网关地址已修改成功,请重新启动系统后生效!"${END}
+}
+
+set_ip(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ set_centos_ip
+ else
+ set_ubuntu_ip
+ fi
+}
+
+set_hostname_all(){
+ read -p "请输入主机名:" HOST
+ hostnamectl set-hostname ${HOST}
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 主机名设置成功,请重新登录生效!"${END}
+}
+
+set_hostname6(){
+ read -p "请输入主机名:" HOST
+ sed -i.bak -r '/^HOSTNAME/s#^(HOSTNAME=).*#\1'${HOST}'#' /etc/sysconfig/network
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 主机名设置成功,请重新登录生效!"${END}
+}
+
+set_hostname(){
+ if [ ${OS_RELEASE_VERSION} == 6 ] &> /dev/null;then
+ set_hostname6
+ else
+ set_hostname_all
+ fi
+}
+
+red(){
+ P_COLOR=31
+}
+
+green(){
+ P_COLOR=32
+}
+
+yellow(){
+ P_COLOR=33
+}
+
+blue(){
+ P_COLOR=34
+}
+
+violet(){
+ P_COLOR=35
+}
+
+cyan_blue(){
+ P_COLOR=36
+}
+
+random_color(){
+ P_COLOR="$[RANDOM%7+31]"
+}
+
+centos_ps1_1(){
+ C_PS1_1=$(echo "PS1='\[\e[1;${P_COLOR}m\][\u@\h \W]\\$ \[\e[0m\]'" >> /etc/profile.d/env.sh)
+}
+
+centos_ps1_2(){
+ C_PS1_2=$(echo "PS1='\[\e[1;${P_COLOR}m\][\u@\h \W]\\$ \[\e[0m\]'" > /etc/profile.d/env.sh)
+}
+
+centos_vim(){
+ echo "export EDITOR=vim" >> /etc/profile.d/env.sh
+}
+
+centos_history(){
+ echo 'export HISTTIMEFORMAT="%F %T "' >> /etc/profile.d/env.sh
+}
+
+ubuntu_ps1(){
+ U_PS1=$(echo 'PS1="\[\e[1;'''${P_COLOR}'''m\]${debian_chroot:+($debian_chroot)}\u@\h:\w\\$ \[\e[0m\]"' >> ~/.bashrc)
+}
+
+ubuntu_vim(){
+ echo "export EDITOR=vim" >> ~/.bashrc
+}
+
+ubuntu_history(){
+ echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
+}
+
+set_env(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ];then
+ if [ -a /etc/profile.d/env.sh ] && grep -Eqi "(^PS1|.*EDITOR|.*HISTTIMEFORMAT)" /etc/profile.d/env.sh;then
+ sed -i -e '/^PS1/d' -e '/.*EDITOR/d' -e '/.*HISTTIMEFORMAT/d' /etc/profile.d/env.sh
+ centos_ps1_1
+ centos_vim
+ centos_history
+ else
+ centos_ps1_2
+ centos_vim
+ centos_history
+ fi
+ fi
+ if [ ${OS_ID} == "Ubuntu" ];then
+ if grep -Eqi "(^PS1|.*EDITOR|.*HISTTIMEFORMAT)" ~/.bashrc;then
+ sed -i -e '/^PS1/d' -e '/.*EDITOR/d' -e '/.*HISTTIMEFORMAT/d' ~/.bashrc
+ ubuntu_ps1
+ ubuntu_vim
+ ubuntu_history
+ else
+ ubuntu_ps1
+ ubuntu_vim
+ ubuntu_history
+ fi
+ fi
+}
+
+set_ps1(){
+ TIPS="${COLOR}${OS_ID} ${OS_RELEASE} PS1和系统环境变量已设置完成,请重新登录生效!${END}"
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)31 红色
+2)32 绿色
+3)33 黄色
+4)34 蓝色
+5)35 紫色
+6)36 青色
+7)随机颜色
+8)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入颜色编号(1-8)" NUM
+ case ${NUM} in
+ 1)
+ red
+ set_env
+ ${TIPS}
+ ;;
+ 2)
+ green
+ set_env
+ ${TIPS}
+ ;;
+ 3)
+ yellow
+ set_env
+ ${TIPS}
+ ;;
+ 4)
+ blue
+ set_env
+ ${TIPS}
+ ;;
+ 5)
+ violet
+ set_env
+ ${TIPS}
+ ;;
+ 6)
+ cyan_blue
+ set_env
+ ${TIPS}
+ ;;
+ 7)
+ random_color
+ set_env
+ ${TIPS}
+ ;;
+ 8)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_swap(){
+ sed -ri 's/.*swap.*/#&/' /etc/fstab
+ if [ ${OS_ID} == "Ubuntu" -a ${OS_RELEASE_VERSION} == 20 ];then
+ SD_NAME=`lsblk|awk -F"[ └─]" '/SWAP/{printf $3}'`
+ systemctl mask dev-${SD_NAME}.swap &> /dev/null
+ fi
+ swapoff -a
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 禁用swap成功!"${END}
+}
+
+set_kernel(){
+ cat > /etc/sysctl.conf <<-EOF
+# Controls source route verification
+net.ipv4.conf.default.rp_filter = 1
+net.ipv4.ip_nonlocal_bind = 1
+net.ipv4.ip_forward = 1
+
+# Do not accept source routing
+net.ipv4.conf.default.accept_source_route = 0
+
+# Controls the System Request debugging functionality of the kernel
+kernel.sysrq = 0
+
+# Controls whether core dumps will append the PID to the core filename.
+# Useful for debugging multi-threaded applications.
+kernel.core_uses_pid = 1
+
+# Controls the use of TCP syncookies
+net.ipv4.tcp_syncookies = 1
+
+# Disable netfilter on bridges.
+net.bridge.bridge-nf-call-ip6tables = 0
+net.bridge.bridge-nf-call-iptables = 0
+net.bridge.bridge-nf-call-arptables = 0
+
+# Controls the default maxmimum size of a mesage queue
+kernel.msgmnb = 65536
+
+# Controls the maximum size of a message, in bytes
+kernel.msgmax = 65536
+
+# Controls the maximum shared segment size, in bytes
+kernel.shmmax = 68719476736
+
+# Controls the maximum number of shared memory segments, in pages
+kernel.shmall = 4294967296
+
+# TCP kernel paramater
+net.ipv4.tcp_mem = 786432 1048576 1572864
+net.ipv4.tcp_rmem = 4096 87380 4194304
+net.ipv4.tcp_wmem = 4096 16384 4194304
+net.ipv4.tcp_window_scaling = 1
+net.ipv4.tcp_sack = 1
+
+# socket buffer
+net.core.wmem_default = 8388608
+net.core.rmem_default = 8388608
+net.core.rmem_max = 16777216
+net.core.wmem_max = 16777216
+net.core.netdev_max_backlog = 262144
+net.core.somaxconn = 20480
+net.core.optmem_max = 81920
+
+# TCP conn
+net.ipv4.tcp_max_syn_backlog = 262144
+net.ipv4.tcp_syn_retries = 3
+net.ipv4.tcp_retries1 = 3
+net.ipv4.tcp_retries2 = 15
+
+# tcp conn reuse
+net.ipv4.tcp_tw_reuse = 1
+net.ipv4.tcp_tw_recycle = 0
+net.ipv4.tcp_fin_timeout = 30
+net.ipv4.tcp_timestamps = 0
+
+net.ipv4.tcp_max_tw_buckets = 20000
+net.ipv4.tcp_max_orphans = 3276800
+net.ipv4.tcp_synack_retries = 1
+net.ipv4.tcp_syncookies = 1
+
+# keepalive conn
+net.ipv4.tcp_keepalive_time = 300
+net.ipv4.tcp_keepalive_intvl = 30
+net.ipv4.tcp_keepalive_probes = 3
+net.ipv4.ip_local_port_range = 10001 65000
+
+# swap
+vm.overcommit_memory = 0
+vm.swappiness = 10
+
+#net.ipv4.conf.eth1.rp_filter = 0
+#net.ipv4.conf.lo.arp_ignore = 1
+#net.ipv4.conf.lo.arp_announce = 2
+#net.ipv4.conf.all.arp_ignore = 1
+#net.ipv4.conf.all.arp_announce = 2
+EOF
+ sysctl -p &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 优化内核参数成功!"${END}
+}
+
+set_limits(){
+ cat >> /etc/security/limits.conf <<-EOF
+root soft core unlimited
+root hard core unlimited
+root soft nproc 1000000
+root hard nproc 1000000
+root soft nofile 1000000
+root hard nofile 1000000
+root soft memlock 32000
+root hard memlock 32000
+root soft msgqueue 8192000
+root hard msgqueue 8192000
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 优化资源限制参数成功!"${END}
+}
+
+set_root_login(){
+ read -p "请输入密码: " PASSWORD
+ echo ${PASSWORD} |sudo -S sed -ri 's@#(PermitRootLogin )prohibit-password@\1yes@' /etc/ssh/sshd_config
+ sudo systemctl restart sshd
+ sudo -S passwd root <<-EOF
+${PASSWORD}
+${PASSWORD}
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} root用户登录已设置完成,请重新登录后生效!"${END}
+}
+
+ubuntu_remove(){
+ apt purge ufw lxd lxd-client lxcfs liblxc-common
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 无用软件包卸载完成!"${END}
+}
+
+menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+************************************************************
+* 初始化脚本菜单 *
+* 1.禁用SELinux 12.修改IP地址和网关地址 *
+* 2.关闭防火墙 13.设置主机名 *
+* 3.优化SSH 14.设置PS1和系统环境变量 *
+* 4.设置系统别名 15.禁用SWAP *
+* 5.1-4全设置 16.优化内核参数 *
+* 6.设置vimrc配置文件 17.优化资源限制参数 *
+* 7.设置软件包仓库 18.Ubuntu设置root用户登录 *
+* 8.Minimal安装建议安装软件 19.Ubuntu卸载无用软件包 *
+* 9.安装邮件服务并配置邮件 20.重启系统 *
+* 10.更改SSH端口号 21.关机 *
+* 11.修改网卡名 22.退出 *
+************************************************************
+EOF
+ echo -e '\E[0m'
+
+ read -p "请选择相应的编号(1-22): " choice
+ case ${choice} in
+ 1)
+ disable_selinux
+ ;;
+ 2)
+ disable_firewall
+ ;;
+ 3)
+ optimization_sshd
+ ;;
+ 4)
+ set_alias
+ ;;
+ 5)
+ disable_selinux
+ disable_firewall
+ optimization_sshd
+ set_alias
+ ;;
+ 6)
+ set_vimrc
+ ;;
+ 7)
+ set_package_repository
+ ;;
+ 8)
+ minimal_install
+ ;;
+ 9)
+ set_mail
+ ;;
+ 10)
+ set_sshd_port
+ ;;
+ 11)
+ set_eth
+ ;;
+ 12)
+ set_ip
+ ;;
+ 13)
+ set_hostname
+ ;;
+ 14)
+ set_ps1
+ ;;
+ 15)
+ set_swap
+ ;;
+ 16)
+ set_kernel
+ ;;
+ 17)
+ set_limits
+ ;;
+ 18)
+ set_root_login
+ ;;
+ 19)
+ ubuntu_remove
+ ;;
+ 20)
+ reboot
+ ;;
+ 21)
+ shutdown -h now
+ ;;
+ 22)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-22)!"${END}
+ ;;
+ esac
+ done
+}
+
+main(){
+ os
+ menu
+}
+
+main
diff --git a/reset/reset_v3.sh b/reset/reset_v3.sh
new file mode 100644
index 0000000..bf3d64e
--- /dev/null
+++ b/reset/reset_v3.sh
@@ -0,0 +1,1714 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2022-05-10
+#FileName: reset_v3.sh
+#URL: raymond.blog.csdn.net
+#Description: reset for CentOS 6/7/8/stream 8 & Ubuntu 18.04/20.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+os(){
+ if grep -Eqi "Centos" /etc/issue && [ $(sed -rn 's#^.* ([0-9]+)\..*#\1#p' /etc/redhat-release) == 6 ] ;then
+ OS_ID=`sed -rn 's#^([[:alpha:]]+) .*#\1#p' /etc/redhat-release`
+ OS_RELEASE=`sed -rn 's#^.* ([0-9.]+).*#\1#p' /etc/redhat-release`
+ OS_RELEASE_VERSION=`sed -rn 's#^.* ([0-9]+)\..*#\1#p' /etc/redhat-release`
+ else
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+ OS_NAME=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+) (.*)"$@\2@p' /etc/os-release`
+ OS_RELEASE=`sed -rn '/^VERSION_ID=/s@.*="?([0-9.]+)"?@\1@p' /etc/os-release`
+ OS_RELEASE_VERSION=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
+ fi
+}
+
+disable_selinux(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ if [ `getenforce` == "Enforcing" ];then
+ sed -ri.bak 's/^(SELINUX=).*/\1disabled/' /etc/selinux/config
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux已禁用,请重新启动系统后才能生效!"${END}
+ else
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux已被禁用,不用设置!"${END}
+ fi
+ else
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SELinux默认没有安装,不用设置!"${END}
+ fi
+}
+
+disable_firewall(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q firewalld &> /dev/null && { systemctl disable --now firewalld &> /dev/null; ${COLOR}"${OS_ID} ${OS_RELEASE} Firewall防火墙已关闭!"${END}; } || { service iptables stop ; chkconfig iptables off; ${COLOR}"${OS_ID} ${OS_RELEASE} iptables防火墙已关闭!"${END}; }
+ else
+ dpkg -s ufw &> /dev/null && { systemctl disable --now ufw &> /dev/null; ${COLOR}"${OS_ID} ${OS_RELEASE} ufw防火墙已关闭!"${END}; } || ${COLOR}"${OS_ID} ${OS_RELEASE} 没有ufw防火墙服务,不用关闭!"${END}
+ fi
+}
+
+optimization_sshd(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ sed -ri.bak -e 's/^#(UseDNS).*/\1 no/' -e 's/^(GSSAPIAuthentication).*/\1 no/' /etc/ssh/sshd_config
+ else
+ sed -ri.bak -e 's/^#(UseDNS).*/\1 no/' -e 's/^#(GSSAPIAuthentication).*/\1 no/' /etc/ssh/sshd_config
+ fi
+ if [ ${OS_RELEASE_VERSION} == "6" ] &> /dev/null;then
+ service sshd restart
+ else
+ systemctl restart sshd
+ fi
+ ${COLOR}"${OS_ID} ${OS_RELEASE} SSH已优化完成!"${END}
+}
+
+set_centos_alias(){
+ cat >>~/.bashrc <<-EOF
+alias cdnet="cd /etc/sysconfig/network-scripts"
+alias vie0="vim /etc/sysconfig/network-scripts/ifcfg-eth0"
+alias vie1="vim /etc/sysconfig/network-scripts/ifcfg-eth1"
+alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 系统别名已设置成功,请重新登陆后生效!"${END}
+}
+
+set_ubuntu_alias(){
+ cat >>~/.bashrc <<-EOF
+alias cdnet="cd /etc/netplan"
+alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 系统别名已设置成功,请重新登陆后生效!"${END}
+}
+
+set_alias(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ];then
+ if grep -Eqi "(.*cdnet|.*vie0|.*vie1|.*scandisk)" ~/.bashrc;then
+ sed -i -e '/.*cdnet/d' -e '/.*vie0/d' -e '/.*vie1/d' -e '/.*scandisk/d' ~/.bashrc
+ set_centos_alias
+ else
+ set_centos_alias
+ fi
+ fi
+ if [ ${OS_ID} == "Ubuntu" ];then
+ if grep -Eqi "(.*cdnet|.*scandisk)" ~/.bashrc;then
+ sed -i -e '/.*cdnet/d' -e '/.*scandisk/d' ~/.bashrc
+ set_ubuntu_alias
+ else
+ set_ubuntu_alias
+ fi
+ fi
+}
+
+set_vimrc(){
+ read -p "请输入作者名:" AUTHOR
+ read -p "请输入QQ号:" QQ
+ read -p "请输入网址:" V_URL
+ cat >~/.vimrc <<-EOF
+set ts=4
+set expandtab
+set ignorecase
+set cursorline
+set autoindent
+autocmd BufNewFile *.sh exec ":call SetTitle()"
+func SetTitle()
+ if expand("%:e") == 'sh'
+ call setline(1,"#!/bin/bash")
+ call setline(2,"#")
+ call setline(3,"#**********************************************************************************************")
+ call setline(4,"#Author: ${AUTHOR}")
+ call setline(5,"#QQ: ${QQ}")
+ call setline(6,"#Date: ".strftime("%Y-%m-%d"))
+ call setline(7,"#FileName: ".expand("%"))
+ call setline(8,"#URL: ${V_URL}")
+ call setline(9,"#Description: The test script")
+ call setline(10,"#Copyright (C): ".strftime("%Y")." All rights reserved")
+ call setline(11,"#*********************************************************************************************")
+ call setline(12,"")
+ endif
+endfunc
+autocmd BufNewFile * normal G
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} vimrc设置完成,请重新系统启动才能生效!"${END}
+}
+
+aliyun(){
+ URL=mirrors.aliyun.com
+}
+
+huawei(){
+ URL=repo.huaweicloud.com
+}
+
+tencent(){
+ URL=mirrors.cloud.tencent.com
+}
+
+tuna(){
+ URL=mirrors.tuna.tsinghua.edu.cn
+}
+
+netease(){
+ URL=mirrors.163.com
+}
+
+sohu(){
+ URL=mirrors.sohu.com
+}
+
+fedora(){
+ URL=archives.fedoraproject.org
+}
+
+nju(){
+ URL=mirrors.nju.edu.cn
+}
+
+ustc(){
+ URL=mirrors.ustc.edu.cn
+}
+
+sjtu(){
+ URL=mirrors.sjtug.sjtu.edu.cn
+}
+
+set_yum_centos8_stream(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[BaseOS]
+name=BaseOS
+baseurl=https://${URL}/centos/\$releasever-stream/BaseOS/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[AppStream]
+name=AppStream
+baseurl=https://${URL}/centos/\$releasever-stream/AppStream/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos/\$releasever-stream/extras/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos/\$releasever-stream/centosplus/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/centos/\$releasever-stream/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_yum_centos8(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[BaseOS]
+name=BaseOS
+baseurl=https://${URL}/centos-vault/centos/\$releasever/BaseOS/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[AppStream]
+name=AppStream
+baseurl=https://${URL}/centos-vault/centos/\$releasever/AppStream/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos-vault/centos/\$releasever/extras/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos-vault/centos/\$releasever/centosplus/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/centos-vault/centos/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora-epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora-epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_3_centos8(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora/epel/\$releasever/Everything/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_centos7(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[base]
+name=base
+baseurl=https://${URL}/centos/\$releasever/os/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos/\$releasever/extras/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[updates]
+name=updates
+baseurl=https://${URL}/centos/\$releasever/updates/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos/\$releasever/centosplus/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora-epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora-epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_3_centos7(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/fedora/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/fedora/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_centos6(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[base]
+name=base
+baseurl=https://${URL}/centos-vault/centos/\$releasever/os/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[extras]
+name=extras
+baseurl=https://${URL}/centos-vault/centos/\$releasever/extras/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[updates]
+name=updates
+baseurl=https://${URL}/centos-vault/centos/\$releasever/updates/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+
+[centosplus]
+name=centosplus
+baseurl=https://${URL}/centos-vault/centos/\$releasever/centosplus/\$basearch/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+set_epel_centos6(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://${URL}/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_epel_2_centos6(){
+ cat > /etc/yum.repos.d/epel.repo <<-EOF
+[epel]
+name=epel
+baseurl=https://${URL}/pub/archive/epel/\$releasever/\$basearch/
+gpgcheck=1
+gpgkey=https://$(tencent)/epel/RPM-GPG-KEY-EPEL-\$releasever
+EOF
+ yum clean all &> /dev/null
+ yum repolist &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} EPEL源设置完成!"${END}
+}
+
+set_yum_rocky8(){
+ [ -d /etc/yum.repos.d/backup ] || mkdir /etc/yum.repos.d/backup
+ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
+ cat > /etc/yum.repos.d/base.repo <<-EOF
+[BaseOS]
+name=BaseOS
+baseurl=https://${URL}/rocky/\$releasever/BaseOS/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[AppStream]
+name=AppStream
+baseurl=https://${URL}/rocky/\$releasever/AppStream/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[extras]
+name=extras
+baseurl=https://${URL}/rocky/\$releasever/extras/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[plus]
+name=plus
+baseurl=https://${URL}/rocky/\$releasever/plus/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+
+[PowerTools]
+name=PowerTools
+baseurl=https://${URL}/rocky/\$releasever/PowerTools/\$basearch/os/
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
+EOF
+ dnf clean all &> /dev/null
+ dnf makecache &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} YUM源设置完成!"${END}
+}
+
+centos8_stream_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)搜狐镜像源
+7)南京大学镜像源
+8)中科大镜像源
+9)上海交通大学镜像源
+10)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-10):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_yum_centos8_stream
+ ;;
+ 2)
+ huawei
+ set_yum_centos8_stream
+ ;;
+ 3)
+ tencent
+ set_yum_centos8_stream
+ ;;
+ 4)
+ tuna
+ set_yum_centos8_stream
+ ;;
+ 5)
+ netease
+ set_yum_centos8_stream
+ ;;
+ 6)
+ sohu
+ set_yum_centos8_stream
+ ;;
+ 7)
+ nju
+ set_yum_centos8_stream
+ ;;
+ 8)
+ ustc
+ set_yum_centos8_stream
+ ;;
+ 9)
+ sjtu
+ set_yum_centos8_stream
+ ;;
+ 10)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-10)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos8_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)搜狐镜像源
+7)南京大学镜像源
+8)中科大镜像源
+9)上海交通大学镜像源
+10)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-10):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_yum_centos8
+ ;;
+ 2)
+ huawei
+ set_yum_centos8
+ ;;
+ 3)
+ tencent
+ set_yum_centos8
+ ;;
+ 4)
+ tuna
+ set_yum_centos8
+ ;;
+ 5)
+ netease
+ set_yum_centos8
+ ;;
+ 6)
+ sohu
+ set_yum_centos8
+ ;;
+ 7)
+ nju
+ set_yum_centos8
+ ;;
+ 8)
+ ustc
+ set_yum_centos8
+ ;;
+ 9)
+ sjtu
+ set_yum_centos8
+ ;;
+ 10)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-10)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos7_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)搜狐镜像源
+7)南京大学镜像源
+8)中科大镜像源
+9)上海交通大学镜像源
+10)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-10):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_yum_centos7
+ ;;
+ 2)
+ huawei
+ set_yum_centos7
+ ;;
+ 3)
+ tencent
+ set_yum_centos7
+ ;;
+ 4)
+ tuna
+ set_yum_centos7
+ ;;
+ 5)
+ netease
+ set_yum_centos7
+ ;;
+ 6)
+ sohu
+ set_yum_centos7
+ ;;
+ 7)
+ nju
+ set_yum_centos7
+ ;;
+ 8)
+ ustc
+ set_yum_centos7
+ ;;
+ 9)
+ sjtu
+ set_yum_centos7
+ ;;
+ 10)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-10)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos6_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)腾讯镜像源
+2)搜狐镜像源
+3)阿里镜像源
+4)清华镜像源
+5)南京大学镜像源
+6)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-6):" NUM
+ case ${NUM} in
+ 1)
+ tencent
+ set_yum_centos6
+ ;;
+ 2)
+ sohu
+ set_yum_centos6
+ ;;
+ 3)
+ aliyun
+ set_yum_centos6
+ ;;
+ 4)
+ tuna
+ set_yum_centos6
+ ;;
+ 5)
+ nju
+ set_yum_centos6
+ ;;
+ 6)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-6)!"${END}
+ ;;
+ esac
+ done
+}
+
+rocky8_base_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)南京大学镜像源
+2)网易镜像源
+3)中科大镜像源
+4)上海交通大学镜像源
+5)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-5):" NUM
+ case ${NUM} in
+ 1)
+ nju
+ set_yum_rocky8
+ ;;
+ 2)
+ netease
+ set_yum_rocky8
+ ;;
+ 3)
+ ustc
+ set_yum_rocky8
+ ;;
+ 4)
+ sjtu
+ set_yum_rocky8
+ ;;
+ 5)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-5)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos8_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)搜狐镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_epel_centos8
+ ;;
+ 2)
+ huawei
+ set_epel_centos8
+ ;;
+ 3)
+ tencent
+ set_epel_centos8
+ ;;
+ 4)
+ tuna
+ set_epel_centos8
+ ;;
+ 5)
+ sohu
+ set_epel_2_centos8
+ ;;
+ 6)
+ nju
+ set_epel_centos8
+ ;;
+ 7)
+ ustc
+ set_epel_centos8
+ ;;
+ 8)
+ sjtu
+ set_epel_3_centos8
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos7_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)搜狐镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_epel_centos7
+ ;;
+ 2)
+ huawei
+ set_epel_centos7
+ ;;
+ 3)
+ tencent
+ set_epel_centos7
+ ;;
+ 4)
+ tuna
+ set_epel_centos7
+ ;;
+ 5)
+ sohu
+ set_epel_2_centos7
+ ;;
+ 6)
+ nju
+ set_epel_centos7
+ ;;
+ 7)
+ ustc
+ set_epel_centos7
+ ;;
+ 8)
+ sjtu
+ set_epel_3_centos7
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos6_epel_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)腾讯镜像源
+2)Fedora镜像源
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ tencent
+ set_epel_centos6
+ ;;
+ 2)
+ fedora
+ set_epel_2_centos6
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+centos_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)base仓库
+2)epel仓库
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ if [ ${OS_RELEASE_VERSION} == "8" -a ${OS_NAME} == "Stream" ] &> /dev/null;then
+ centos8_stream_base_menu
+ elif [ ${OS_RELEASE_VERSION} == "8" -a ${OS_NAME} == "Linux" ] &> /dev/null;then
+ centos8_base_menu
+ elif [ ${OS_RELEASE_VERSION} == "7" ] &> /dev/null;then
+ centos7_base_menu
+ else
+ centos6_base_menu
+ fi
+ ;;
+ 2)
+ if [ ${OS_RELEASE_VERSION} == "8" ] &> /dev/null;then
+ centos8_epel_menu
+ elif [ ${OS_RELEASE_VERSION} == "7" ] &> /dev/null;then
+ centos7_epel_menu
+ else
+ centos6_epel_menu
+ fi
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+rocky_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)base仓库
+2)epel仓库
+3)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-3):" NUM
+ case ${NUM} in
+ 1)
+ rocky8_base_menu
+ ;;
+ 2)
+ centos8_epel_menu
+ ;;
+ 3)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-3)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_apt(){
+ mv /etc/apt/sources.list /etc/apt/sources.list.bak
+ cat > /etc/apt/sources.list <<-EOF
+deb http://${URL}/ubuntu/ $(lsb_release -cs) main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs) main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-security main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-security main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-updates main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-updates main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-proposed main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-proposed main restricted universe multiverse
+
+deb http://${URL}/ubuntu/ $(lsb_release -cs)-backports main restricted universe multiverse
+deb-src http://${URL}/ubuntu/ $(lsb_release -cs)-backports main restricted universe multiverse
+EOF
+ apt update
+ ${COLOR}"${OS_ID} ${OS_RELEASE} APT源设置完成!"${END}
+}
+
+apt_menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)阿里镜像源
+2)华为镜像源
+3)腾讯镜像源
+4)清华镜像源
+5)网易镜像源
+6)南京大学镜像源
+7)中科大镜像源
+8)上海交通大学镜像源
+9)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入镜像源编号(1-9):" NUM
+ case ${NUM} in
+ 1)
+ aliyun
+ set_apt
+ ;;
+ 2)
+ huawei
+ set_apt
+ ;;
+ 3)
+ tencent
+ set_apt
+ ;;
+ 4)
+ tuna
+ set_apt
+ ;;
+ 5)
+ netease
+ set_apt
+ ;;
+ 6)
+ nju
+ set_apt
+ ;;
+ 7)
+ ustc
+ set_apt
+ ;;
+ 8)
+ sjtu
+ set_apt
+ ;;
+ 9)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_package_repository(){
+ if [ ${OS_ID} == "CentOS" ]&> /dev/null;then
+ centos_menu
+ elif [ ${OS_ID} == "Rocky" ]&> /dev/null;then
+ rocky_menu
+ else
+ apt_menu
+ fi
+}
+
+centos_minimal_install(){
+ ${COLOR}'开始安装“Minimal安装建议安装软件包”,请稍等......'${END}
+ yum -y install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} Minimal安装建议安装软件包已安装完成!"${END}
+}
+
+ubuntu_minimal_install(){
+ ${COLOR}'开始安装“Minimal安装建议安装软件包”,请稍等......'${END}
+ apt -y install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc openssh-server iotop unzip zip
+ ${COLOR}"${OS_ID} ${OS_RELEASE} Minimal安装建议安装软件包已安装完成!"${END}
+}
+
+minimal_install(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ centos_minimal_install
+ else
+ ubuntu_minimal_install
+ fi
+}
+
+set_mail(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q postfix &> /dev/null || { yum -y install postfix &> /dev/null; systemctl enable --now postfix &> /dev/null; }
+ rpm -q mailx &> /dev/null || yum -y install mailx &> /dev/null
+ else
+ dpkg -s mailutils &> /dev/null || apt -y install mailutils
+ fi
+ read -p "请输入邮箱地址:" MAIL
+ read -p "请输入邮箱授权码:" AUTH
+ SMTP=`echo ${MAIL} |awk -F"@" '{print $2}'`
+ cat >~/.mailrc <<-EOF
+set from=${MAIL}
+set smtp=smtp.${SMTP}
+set smtp-auth-user=${MAIL}
+set smtp-auth-password=${AUTH}
+set smtp-auth=login
+set ssl-verify=ignore
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 邮件设置完成,请重新登录后才能生效!"${END}
+}
+
+set_sshd_port(){
+ disable_selinux
+ disable_firewall
+ read -p "请输入端口号:" PORT
+ sed -i 's/#Port 22/Port '${PORT}'/' /etc/ssh/sshd_config
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 更改SSH端口号已完成,请重启系统后生效!"${END}
+}
+
+set_centos_eth(){
+ ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
+ #修改网卡名称配置文件
+ sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0 biosdevname=0"@' /etc/default/grub
+ grub2-mkconfig -o /boot/grub2/grub.cfg >& /dev/null
+
+ #修改网卡文件名
+ mv /etc/sysconfig/network-scripts/ifcfg-${ETHNAME} /etc/sysconfig/network-scripts/ifcfg-eth0
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 网卡名已修改成功,请重新启动系统后才能生效!"${END}
+}
+
+set_ubuntu_eth(){
+ #修改网卡名称配置文件
+ sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@net.ifnames=0 biosdevname=0"@' /etc/default/grub
+ grub-mkconfig -o /boot/grub/grub.cfg >& /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 网卡名已修改成功,请重新启动系统后才能生效!"${END}
+}
+
+set_eth(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ if [ ${OS_RELEASE_VERSION} == 6 ];then
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 不用修改网卡名"${END}
+ else
+ set_centos_eth
+ fi
+ else
+ set_ubuntu_eth
+ fi
+}
+
+check_ip(){
+ local IP=$1
+ VALID_CHECK=$(echo ${IP}|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
+ if echo ${IP}|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
+ if [ ${VALID_CHECK} == "yes" ]; then
+ echo "IP ${IP} available!"
+ return 0
+ else
+ echo "IP ${IP} not available!"
+ return 1
+ fi
+ else
+ echo "IP format error!"
+ return 1
+ fi
+}
+
+set_centos_ip(){
+ while true; do
+ read -p "请输入IP地址:" IP
+ check_ip ${IP}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" C_PREFIX
+ while true; do
+ read -p "请输入网关地址:" GATEWAY
+ check_ip ${GATEWAY}
+ [ $? -eq 0 ] && break
+ done
+ cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<-EOF
+DEVICE=eth0
+NAME=eth0
+BOOTPROTO=none
+ONBOOT=yes
+IPADDR=${IP}
+PREFIX=${C_PREFIX}
+GATEWAY=${GATEWAY}
+DNS1=223.5.5.5
+DNS2=180.76.76.76
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} IP地址和网关地址已修改成功,请重新启动系统后生效!"${END}
+}
+
+set_ubuntu_ip(){
+ while true; do
+ read -p "请输入IP地址:" IP
+ check_ip ${IP}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" U_PREFIX
+ while true; do
+ read -p "请输入网关地址:" GATEWAY
+ check_ip ${GATEWAY}
+ [ $? -eq 0 ] && break
+ done
+ cat > /etc/netplan/01-netcfg.yaml <<-EOF
+network:
+ version: 2
+ renderer: networkd
+ ethernets:
+ eth0:
+ addresses: [${IP}/${U_PREFIX}]
+ gateway4: ${GATEWAY}
+ nameservers:
+ addresses: [223.5.5.5, 180.76.76.76]
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} IP地址和网关地址已修改成功,请重新启动系统后生效!"${END}
+}
+
+set_ip(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ set_centos_ip
+ else
+ set_ubuntu_ip
+ fi
+}
+
+set_dual_centos_ip(){
+ while true; do
+ read -p "请输入第一块网卡IP地址:" IP
+ check_ip ${IP}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" C_PREFIX
+ while true; do
+ read -p "请输入网关地址:" GATEWAY
+ check_ip ${GATEWAY}
+ [ $? -eq 0 ] && break
+ done
+ cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<-EOF
+DEVICE=eth0
+NAME=eth0
+BOOTPROTO=none
+ONBOOT=yes
+IPADDR=${IP}
+PREFIX=${C_PREFIX}
+GATEWAY=${GATEWAY}
+DNS1=223.5.5.5
+DNS2=180.76.76.76
+EOF
+ while true; do
+ read -p "请输入第二块网卡IP地址:" IP2
+ check_ip ${IP2}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" C_PREFIX2
+ cat > /etc/sysconfig/network-scripts/ifcfg-eth1 <<-EOF
+DEVICE=eth1
+NAME=eth1
+BOOTPROTO=none
+ONBOOT=yes
+IPADDR=${IP2}
+PREFIX=${C_PREFIX2}
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} IP地址和网关地址已修改成功,请重新启动系统后生效!"${END}
+}
+
+set_dual_ubuntu_ip(){
+ while true; do
+ read -p "请输入第一块网卡IP地址:" IP
+ check_ip ${IP}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" U_PREFIX
+ while true; do
+ read -p "请输入网关地址:" GATEWAY
+ check_ip ${GATEWAY}
+ [ $? -eq 0 ] && break
+ done
+ while true; do
+ read -p "请输入第二块网卡IP地址:" IP2
+ check_ip ${IP2}
+ [ $? -eq 0 ] && break
+ done
+ read -p "请输入子网掩码位数:" U_PREFIX2
+ cat > /etc/netplan/01-netcfg.yaml <<-EOF
+network:
+ version: 2
+ renderer: networkd
+ ethernets:
+ eth0:
+ dhcp4: no
+ dhcp6: no
+ addresses: [${IP}/${U_PREFIX}]
+ gateway4: ${GATEWAY}
+ nameservers:
+ addresses: [223.5.5.5, 180.76.76.76]
+ eth1:
+ dhcp4: no
+ dhcp6: no
+ addresses: [${IP2}/${U_PREFIX2}]
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} IP地址和网关地址已修改成功,请重新启动系统后生效!"${END}
+}
+
+set_dual_ip(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ set_dual_centos_ip
+ else
+ set_dual_ubuntu_ip
+ fi
+}
+
+set_hostname_all(){
+ read -p "请输入主机名:" HOST
+ hostnamectl set-hostname ${HOST}
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 主机名设置成功,请重新登录生效!"${END}
+}
+
+set_hostname6(){
+ read -p "请输入主机名:" HOST
+ sed -i.bak -r '/^HOSTNAME/s#^(HOSTNAME=).*#\1'${HOST}'#' /etc/sysconfig/network
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 主机名设置成功,请重新登录生效!"${END}
+}
+
+set_hostname(){
+ if [ ${OS_RELEASE_VERSION} == 6 ] &> /dev/null;then
+ set_hostname6
+ else
+ set_hostname_all
+ fi
+}
+
+red(){
+ P_COLOR=31
+}
+
+green(){
+ P_COLOR=32
+}
+
+yellow(){
+ P_COLOR=33
+}
+
+blue(){
+ P_COLOR=34
+}
+
+violet(){
+ P_COLOR=35
+}
+
+cyan_blue(){
+ P_COLOR=36
+}
+
+random_color(){
+ P_COLOR="$[RANDOM%7+31]"
+}
+
+centos_ps1_1(){
+ C_PS1_1=$(echo "PS1='\[\e[1;${P_COLOR}m\][\u@\h \W]\\$ \[\e[0m\]'" >> /etc/profile.d/env.sh)
+}
+
+centos_ps1_2(){
+ C_PS1_2=$(echo "PS1='\[\e[1;${P_COLOR}m\][\u@\h \W]\\$ \[\e[0m\]'" > /etc/profile.d/env.sh)
+}
+
+centos_vim(){
+ echo "export EDITOR=vim" >> /etc/profile.d/env.sh
+}
+
+centos_history(){
+ echo 'export HISTTIMEFORMAT="%F %T "' >> /etc/profile.d/env.sh
+}
+
+ubuntu_ps1(){
+ U_PS1=$(echo 'PS1="\[\e[1;'''${P_COLOR}'''m\]${debian_chroot:+($debian_chroot)}\u@\h:\w\\$ \[\e[0m\]"' >> ~/.bashrc)
+}
+
+ubuntu_vim(){
+ echo "export EDITOR=vim" >> ~/.bashrc
+}
+
+ubuntu_history(){
+ echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
+}
+
+set_env(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ];then
+ if [ -a /etc/profile.d/env.sh ] && grep -Eqi "(^PS1|.*EDITOR|.*HISTTIMEFORMAT)" /etc/profile.d/env.sh;then
+ sed -i -e '/^PS1/d' -e '/.*EDITOR/d' -e '/.*HISTTIMEFORMAT/d' /etc/profile.d/env.sh
+ centos_ps1_1
+ centos_vim
+ centos_history
+ else
+ centos_ps1_2
+ centos_vim
+ centos_history
+ fi
+ fi
+ if [ ${OS_ID} == "Ubuntu" ];then
+ if grep -Eqi "(^PS1|.*EDITOR|.*HISTTIMEFORMAT)" ~/.bashrc;then
+ sed -i -e '/^PS1/d' -e '/.*EDITOR/d' -e '/.*HISTTIMEFORMAT/d' ~/.bashrc
+ ubuntu_ps1
+ ubuntu_vim
+ ubuntu_history
+ else
+ ubuntu_ps1
+ ubuntu_vim
+ ubuntu_history
+ fi
+ fi
+}
+
+set_ps1(){
+ TIPS="${COLOR}${OS_ID} ${OS_RELEASE} PS1和系统环境变量已设置完成,请重新登录生效!${END}"
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+1)31 红色
+2)32 绿色
+3)33 黄色
+4)34 蓝色
+5)35 紫色
+6)36 青色
+7)随机颜色
+8)退出
+EOF
+ echo -e '\E[0m'
+
+ read -p "请输入颜色编号(1-8)" NUM
+ case ${NUM} in
+ 1)
+ red
+ set_env
+ ${TIPS}
+ ;;
+ 2)
+ green
+ set_env
+ ${TIPS}
+ ;;
+ 3)
+ yellow
+ set_env
+ ${TIPS}
+ ;;
+ 4)
+ blue
+ set_env
+ ${TIPS}
+ ;;
+ 5)
+ violet
+ set_env
+ ${TIPS}
+ ;;
+ 6)
+ cyan_blue
+ set_env
+ ${TIPS}
+ ;;
+ 7)
+ random_color
+ set_env
+ ${TIPS}
+ ;;
+ 8)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-9)!"${END}
+ ;;
+ esac
+ done
+}
+
+set_swap(){
+ sed -ri 's/.*swap.*/#&/' /etc/fstab
+ if [ ${OS_ID} == "Ubuntu" -a ${OS_RELEASE_VERSION} == 20 ];then
+ SD_NAME=`lsblk|awk -F"[ └─]" '/SWAP/{printf $3}'`
+ systemctl mask dev-${SD_NAME}.swap &> /dev/null
+ fi
+ swapoff -a
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 禁用swap成功!"${END}
+}
+
+set_kernel(){
+ cat > /etc/sysctl.conf <<-EOF
+# Controls source route verification
+net.ipv4.conf.default.rp_filter = 1
+net.ipv4.ip_nonlocal_bind = 1
+net.ipv4.ip_forward = 1
+
+# Do not accept source routing
+net.ipv4.conf.default.accept_source_route = 0
+
+# Controls the System Request debugging functionality of the kernel
+kernel.sysrq = 0
+
+# Controls whether core dumps will append the PID to the core filename.
+# Useful for debugging multi-threaded applications.
+kernel.core_uses_pid = 1
+
+# Controls the use of TCP syncookies
+net.ipv4.tcp_syncookies = 1
+
+# Disable netfilter on bridges.
+net.bridge.bridge-nf-call-ip6tables = 0
+net.bridge.bridge-nf-call-iptables = 0
+net.bridge.bridge-nf-call-arptables = 0
+
+# Controls the default maxmimum size of a mesage queue
+kernel.msgmnb = 65536
+
+# Controls the maximum size of a message, in bytes
+kernel.msgmax = 65536
+
+# Controls the maximum shared segment size, in bytes
+kernel.shmmax = 68719476736
+
+# Controls the maximum number of shared memory segments, in pages
+kernel.shmall = 4294967296
+
+# TCP kernel paramater
+net.ipv4.tcp_mem = 786432 1048576 1572864
+net.ipv4.tcp_rmem = 4096 87380 4194304
+net.ipv4.tcp_wmem = 4096 16384 4194304
+net.ipv4.tcp_window_scaling = 1
+net.ipv4.tcp_sack = 1
+
+# socket buffer
+net.core.wmem_default = 8388608
+net.core.rmem_default = 8388608
+net.core.rmem_max = 16777216
+net.core.wmem_max = 16777216
+net.core.netdev_max_backlog = 262144
+net.core.somaxconn = 20480
+net.core.optmem_max = 81920
+
+# TCP conn
+net.ipv4.tcp_max_syn_backlog = 262144
+net.ipv4.tcp_syn_retries = 3
+net.ipv4.tcp_retries1 = 3
+net.ipv4.tcp_retries2 = 15
+
+# tcp conn reuse
+net.ipv4.tcp_tw_reuse = 1
+net.ipv4.tcp_tw_recycle = 0
+net.ipv4.tcp_fin_timeout = 30
+net.ipv4.tcp_timestamps = 0
+
+net.ipv4.tcp_max_tw_buckets = 20000
+net.ipv4.tcp_max_orphans = 3276800
+net.ipv4.tcp_synack_retries = 1
+net.ipv4.tcp_syncookies = 1
+
+# keepalive conn
+net.ipv4.tcp_keepalive_time = 300
+net.ipv4.tcp_keepalive_intvl = 30
+net.ipv4.tcp_keepalive_probes = 3
+net.ipv4.ip_local_port_range = 10001 65000
+
+# swap
+vm.overcommit_memory = 0
+vm.swappiness = 10
+
+#net.ipv4.conf.eth1.rp_filter = 0
+#net.ipv4.conf.lo.arp_ignore = 1
+#net.ipv4.conf.lo.arp_announce = 2
+#net.ipv4.conf.all.arp_ignore = 1
+#net.ipv4.conf.all.arp_announce = 2
+EOF
+ sysctl -p &> /dev/null
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 优化内核参数成功!"${END}
+}
+
+set_limits(){
+ cat >> /etc/security/limits.conf <<-EOF
+root soft core unlimited
+root hard core unlimited
+root soft nproc 1000000
+root hard nproc 1000000
+root soft nofile 1000000
+root hard nofile 1000000
+root soft memlock 32000
+root hard memlock 32000
+root soft msgqueue 8192000
+root hard msgqueue 8192000
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 优化资源限制参数成功!"${END}
+}
+
+set_localtime(){
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ];then
+ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+ else
+ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+ cat >> /etc/default/locale <<-EOF
+LC_TIME=en_DK.UTF-8
+EOF
+ fi
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 系统时区已设置成功,请重启系统后生效!"${END}
+}
+
+set_root_login(){
+ read -p "请输入密码: " PASSWORD
+ echo ${PASSWORD} |sudo -S sed -ri 's@#(PermitRootLogin )prohibit-password@\1yes@' /etc/ssh/sshd_config
+ sudo systemctl restart sshd
+ sudo -S passwd root <<-EOF
+${PASSWORD}
+${PASSWORD}
+EOF
+ ${COLOR}"${OS_ID} ${OS_RELEASE} root用户登录已设置完成,请重新登录后生效!"${END}
+}
+
+ubuntu_remove(){
+ apt purge ufw lxd lxd-client lxcfs liblxc-common
+ ${COLOR}"${OS_ID} ${OS_RELEASE} 无用软件包卸载完成!"${END}
+}
+
+menu(){
+ while true;do
+ echo -e "\E[$[RANDOM%7+31];1m"
+ cat <<-EOF
+********************************************************************
+* 初始化脚本菜单 *
+* 1.禁用SELinux 13.修改IP地址和网关地址(双网卡) *
+* 2.关闭防火墙 14.设置主机名 *
+* 3.优化SSH 15.设置PS1和系统环境变量 *
+* 4.设置系统别名 16.禁用SWAP *
+* 5.1-4全设置 17.优化内核参数 *
+* 6.设置vimrc配置文件 18.优化资源限制参数 *
+* 7.设置软件包仓库 19.设置系统时区 *
+* 8.Minimal安装建议安装软件 20.Ubuntu设置root用户登录 *
+* 9.安装邮件服务并配置邮件 21.Ubuntu卸载无用软件包 *
+* 10.更改SSH端口号 22.重启系统 *
+* 11.修改网卡名 23.关机 *
+* 12.修改IP地址和网关地址(单网卡) 24.退出 *
+********************************************************************
+EOF
+ echo -e '\E[0m'
+
+ read -p "请选择相应的编号(1-24): " choice
+ case ${choice} in
+ 1)
+ disable_selinux
+ ;;
+ 2)
+ disable_firewall
+ ;;
+ 3)
+ optimization_sshd
+ ;;
+ 4)
+ set_alias
+ ;;
+ 5)
+ disable_selinux
+ disable_firewall
+ optimization_sshd
+ set_alias
+ ;;
+ 6)
+ set_vimrc
+ ;;
+ 7)
+ set_package_repository
+ ;;
+ 8)
+ minimal_install
+ ;;
+ 9)
+ set_mail
+ ;;
+ 10)
+ set_sshd_port
+ ;;
+ 11)
+ set_eth
+ ;;
+ 12)
+ set_ip
+ ;;
+ 13)
+ set_dual_ip
+ ;;
+ 14)
+ set_hostname
+ ;;
+ 14)
+ set_ps1
+ ;;
+ 16)
+ set_swap
+ ;;
+ 17)
+ set_kernel
+ ;;
+ 18)
+ set_limits
+ ;;
+ 19)
+ set_localtime
+ ;;
+ 20)
+ set_root_login
+ ;;
+ 21)
+ ubuntu_remove
+ ;;
+ 22)
+ reboot
+ ;;
+ 23)
+ shutdown -h now
+ ;;
+ 24)
+ break
+ ;;
+ *)
+ ${COLOR}"输入错误,请输入正确的数字(1-24)!"${END}
+ ;;
+ esac
+ done
+}
+
+main(){
+ os
+ menu
+}
+
+main
\ No newline at end of file
diff --git a/ssh_key/ssh_key.sh b/ssh_key/ssh_key.sh
new file mode 100644
index 0000000..32c12e4
--- /dev/null
+++ b/ssh_key/ssh_key.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-12-20
+#FileName: ssh_key.sh
+#URL: raymond.blog.csdn.net
+#Description: ssh_key for CentOS 7/8 & Ubuntu 18.04/24.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+#基于key验证多主机ssh互相访问
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+PASS=123456
+#设置网段最后的地址,4-255之间,越小扫描越快
+END=254
+
+IP=`ip a s eth0 | awk -F'[ /]+' 'NR==3{print $3}'`
+NET=${IP%.*}.
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+}
+
+ssh_key_push(){
+ rm -f /root/.ssh/id_rsa
+ [ -e ./SCANIP.log ] && rm -f SCANIP.log
+ for((i=3;i<="$END";i++));do
+ ping -c 1 -w 1 ${NET}${i} &> /dev/null && echo "${NET}${i}" >> SCANIP.log &
+ done
+ wait
+ ssh-keygen -f /root/.ssh/id_rsa -P '' &> /dev/null
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q sshpass &> /dev/null || { ${COLOR}"安装sshpass软件包"${END};yum -y install sshpass &> /dev/null; }
+ else
+ dpkg -S sshpass &> /dev/null || { ${COLOR}"安装sshpass软件包"${END};apt -y install sshpass &> /dev/null; }
+ fi
+ sshpass -p ${PASS} ssh-copy-id -o StrictHostKeyChecking=no ${IP}
+
+ AliveIP=(`cat SCANIP.log`)
+ for n in ${AliveIP[*]};do
+ sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}:
+ done
+
+ #把.ssh/known_hosts拷贝到所有主机,使它们第一次互相访问时不需要输入回车
+ for n in ${AliveIP[*]};do
+ scp /root/.ssh/known_hosts ${n}:.ssh/
+ done
+}
+
+main(){
+ os
+ ssh_key_push
+}
+
+main
\ No newline at end of file
diff --git a/ssh_key/ssh_key_push.sh b/ssh_key/ssh_key_push.sh
new file mode 100644
index 0000000..a9d8402
--- /dev/null
+++ b/ssh_key/ssh_key_push.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-11-19
+#FileName: ssh_key_push.sh
+#URL: raymond.blog.csdn.net
+#Description: ssh_key_push for CentOS 7/8 & Ubuntu 18.04/24.04 & Rocky 8
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+COLOR="echo -e \\033[01;31m"
+END='\033[0m'
+
+export SSHPASS=123456
+HOSTS="
+172.31.0.6
+172.31.0.7
+172.31.2.18
+172.31.2.20"
+
+os(){
+ OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
+}
+
+ssh_key_push(){
+ rm -rf ~/.ssh/id_rsa*
+ ssh-keygen -f /root/.ssh/id_rsa -P '' &> /dev/null
+ if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
+ rpm -q sshpass &> /dev/null || { ${COLOR}"安装sshpass软件包"${END};yum -y install sshpass &> /dev/null; }
+ else
+ dpkg -S sshpass &> /dev/null || { ${COLOR}"安装sshpass软件包"${END};apt -y install sshpass &> /dev/null; }
+ fi
+ for i in $HOSTS;do
+ {
+ sshpass -e ssh-copy-id -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub $i &> /dev/null
+ [ $? -eq 0 ] && echo $i is finished || echo $i is false
+ }&
+ done
+ wait
+}
+
+main(){
+ os
+ ssh_key_push
+}
+
+main
diff --git a/颁发证书/certificate.sh b/颁发证书/certificate.sh
new file mode 100644
index 0000000..52827cb
--- /dev/null
+++ b/颁发证书/certificate.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-11-16
+#FileName: certificate.sh
+#URL: raymond.blog.csdn.net
+#Description: The test script
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+CA_SUBJECT="/O=raymonds/CN=ca.raymonds.cc"
+CA_EXPIRE=3650
+SUBJECT="/C=CN/ST=Shaanxi/L=xi'an/O=raymonds/CN=*.raymonds.cc"
+SERIAL=01
+EXPIRE=365
+FILE=httpd
+
+openssl req -x509 -newkey rsa:2048 -subj ${CA_SUBJECT} -keyout ca.key -nodes -days ${CA_EXPIRE} -out ca.crt
+
+openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key -subj ${SUBJECT} -out ${FILE}.csr
+
+openssl x509 -req -in ${FILE}.csr -CA ca.crt -CAkey ca.key -set_serial ${SERIAL} -days ${EXPIRE} -out ${FILE}.crt
+
+chmod 600 ${FILE}.key ca.key
diff --git a/颁发证书/certificate2.sh b/颁发证书/certificate2.sh
new file mode 100644
index 0000000..c738c72
--- /dev/null
+++ b/颁发证书/certificate2.sh
@@ -0,0 +1,68 @@
+#!/bin/bash
+#
+#**********************************************************************************************
+#Author: Raymond
+#QQ: 88563128
+#Date: 2021-11-19
+#FileName: certificate2.sh
+#URL: raymond.blog.csdn.net
+#Description: The test script
+#Copyright (C): 2021 All rights reserved
+#*********************************************************************************************
+#证书存放目录
+DIR=/data
+
+#每个证书信息
+declare -A CERT_INFO
+CERT_INFO=([subject0]="/O=raymond/CN=ca.raymonds.cc" \
+ [keyfile0]="cakey.pem" \
+ [crtfile0]="cacert.pem" \
+ [key0]=2048 \
+ [expire0]=3650 \
+ [serial0]=0 \
+ [subject1]="/C=CN/ST=shaanxi/L=xi'an/O=it/CN=master.raymonds.cc" \
+ [keyfile1]="master.key" \
+ [crtfile1]="master.crt" \
+ [key1]=2048 \
+ [expire1]=365
+ [serial1]=1 \
+ [csrfile1]="master.csr" \
+ [subject2]="/C=CN/ST=shaanxi/L=xi'an/O=sales/CN=slave.raymonds.cc" \
+ [keyfile2]="slave.key" \
+ [crtfile2]="slave.crt" \
+ [key2]=2048 \
+ [expire2]=365 \
+ [serial2]=2 \
+ [csrfile2]="slave.csr" )
+
+COLOR="echo -e \\E[1;32m"
+END="\\E[0m"
+
+#证书编号最大值
+N=`echo ${!CERT_INFO[*]} |grep -o subject|wc -l`
+
+cd $DIR
+
+for((i=0;i/dev/null
+
+ else
+ openssl req -newkey rsa:${CERT_INFO[key${i}]} -nodes -subj ${CERT_INFO[subject${i}]} \
+ -keyout ${CERT_INFO[keyfile${i}]} -out ${CERT_INFO[csrfile${i}]} &>/dev/null
+
+ openssl x509 -req -in ${CERT_INFO[csrfile${i}]} -CA ${CERT_INFO[crtfile0]} \
+ -CAkey ${CERT_INFO[keyfile0]} -set_serial ${CERT_INFO[serial${i}]} \
+ -days ${CERT_INFO[expire${i}]} -out ${CERT_INFO[crtfile${i}]} &>/dev/null
+ fi
+ $COLOR"**************************************生成证书信息**************************************"$END
+ openssl x509 -in ${CERT_INFO[crtfile${i}]} -noout -subject -dates -serial
+ echo
+done
+chmod 600 *.key
+echo "证书生成完成"
+$COLOR"**************************************生成证书文件如下**************************************"$END
+echo "证书存放目录: "$DIR
+echo "证书文件列表: "`ls $DIR`