Files
debian-first-boot-setup/README.md

153 lines
4.7 KiB
Markdown

# GetGit - Git Repository Setup Tool
A simple bash script that helps users set up SSH keys and clone repositories from a private git server.
## Features
- **SSH Key Generation**: Automatically generates SSH keys if they don't exist
- **Dynamic User Support**: Works with any username on the git server
- **Repository Discovery**: Automatically discovers available repositories for the user
- **Interactive Selection**: Allows users to choose which repository to clone
- **Dotfiles Support**: Special handling for dotfiles repositories with automatic setup execution
## Usage
1. Make the script executable:
```bash
chmod +x setup.sh
```
2. Run the script:
```bash
./setup.sh
```
3. Follow the prompts:
- Enter your git username
- Generate SSH key (if needed)
- Add the SSH key to your git account
- Select which repository to clone
## How It Works
### 1. Username Input
The script prompts for your git username, which is used to:
- Discover available repositories
- Construct repository URLs
- Set up proper directory structure
### 2. SSH Key Management
- Checks for existing SSH key (`~/.ssh/id_ed25519`)
- Generates a new key if none exists
- Displays the public key for copying to your git account
### 3. Repository Discovery
The script discovers ALL accessible repositories through multiple methods:
**Primary Method - API Access:**
- Attempts to use GitLab/Gitea API to fetch all repositories you have access to
- Includes both owned and shared repositories
- Automatically detects read/write permissions
**Fallback Method - Pattern Scanning:**
- Scans your own repositories: `username/dotfiles`, `username/scripts`, etc.
- Checks common shared repositories from users like: `admin`, `shared`, `public`, `team`, `common`, `devops`, `infrastructure`
- Discovers additional project repositories: `website`, `api`, `frontend`, `backend`, `database`, `monitoring`, etc.
- Tests SSH access to determine if you have read access to each repository
**Repository Types Discovered:**
- **Your repositories**: All repos you own
- **Shared repositories**: Repos you have read/write access to
- **Public repositories**: Publicly accessible repos on the server
- **Team repositories**: Organization/team repos you're a member of
### 4. Repository Selection
Users can:
- Select from numbered list of all discovered repositories (owned and shared)
- Press Enter to use `username/dotfiles` (if available)
- Type `custom` to enter a custom repository path
- See access type indicators: `(owner)`, `(shared)`, etc.
### 5. Cloning and Setup
- Clones the selected repository to the appropriate directory
- For dotfiles repositories: runs `setup.sh` automatically
- For other repositories: simply clones to `~/repository-name`
## Configuration
The script can be configured by modifying the settings at the top:
```bash
### === SETTINGS === ###
GIT_SERVER="git.del-c.net" # Change to your git server
```
## Directory Structure
- **Dotfiles**: `~/.dotfiles/`
- **Other repos**: `~/repository-name/`
## Requirements
- Bash shell
- Git installed
- SSH client
- Access to the configured git server
## Example Flow
```
$ ./setup.sh
[?] Enter your git username:
Username: john
[+] No SSH key found. Need to generate a new SSH key...
[+] If you are using the correct user, please enter your email for the SSH key.
Enter your email for the SSH key: john@example.com
[*] Add the following public key to your GitHub account:
----------------------------------------
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGx... john@example.com
----------------------------------------
Press Enter after you've added the key...
[+] Fetching all accessible git projects...
[*] Attempting to fetch repositories via API...
[*] Found repositories via API:
1. john/dotfiles (owner)
2. john/scripts (owner)
3. team/shared-configs (shared)
4. admin/common-tools (shared)
5. public/templates (shared)
[?] Which project would you like to download?
Enter the number of the repository from the list above, or:
- Press Enter to use john/dotfiles (if available)
- Type 'custom' to enter a custom repository path
Enter your choice: 3
[*] Selected repository: git@git.del-c.net:team/shared-configs.git
[*] Download directory: /Users/john/shared-configs
[+] Cloning selected repository...
[*] Repository cloned successfully to: /Users/john/shared-configs
```
## Troubleshooting
### SSH Key Issues
- Ensure the SSH key is added to your git account
- Check SSH connection: `ssh -T git@git.del-c.net`
### Repository Not Found
- Verify the repository exists on the server
- Check username spelling
- Ensure you have access to the repository
### Permission Denied
- Confirm SSH key is properly added to git account
- Verify you have read access to the repository
## Contributing
Feel free to submit issues and enhancement requests!