I'm studying database concepts and there are 3 concepts that I don't understand. Canonical cover, extraneous functional dependency and closure. I read the definition about canonical cover but I don't get the picture how it relates to 3NF and BCNF. The definition of canonical cover appears to be that there are no extraneous attributes and extraneous attributes mean attributes that don't change the closure of the set of functional dependencies and closure is the set of all functional dependencies implied by F, a set of functional dependencies.

But all this is a little fuzzy and I'd like both an intuitive definition and how to calculate

Canonical cover

Closure

Extraneous attribute

Functional dependencies I believe I understand what it is, it's like what would have been the PK in a table if we had those attributes in a table.

To calculate the canonical cover, follow this algorithm. You need to look at your list of functional dependencies:

Left reduction: try to remove all attributes of the left side of the arrow that are not necessary to create the same closure.
To make the first example, AB → C, you can calculate ABs closure, which would be ABCDEF. You then try to remove A, ending up with B → C. Now you calculate the closure of B only, which is still ABCDEF -> you can remove A.
At the end of this step, your FD should look like {B → C, B → E, C F → D, C → A, B → F, C E → F, C D → B, B → C, G → G}.

Now you make the same thing for the right hand side. Note that you can remove all attributes here if you want, ending up with the empty set. As an example, look at B → F: the closure of B is ABCDEF. If you remove the F from the functional dependency, ending up with B → ∅, you still got the same closure for B as before. Repeat that for the other FDs.
You should end up with {B →∅, B → E, C F → D, C → A, B →∅, C E → F, C D → B, B → C, G →∅}.

What happened to "G"? Its absence here is significant. Do you know why?

If I'm not mistaken then BCDEFG is a super key (”the whole key”) in
1NF/2NF but is it minimal (3NF)?

Superkey (one word, no spaces) doesn't mean the whole key; it just means a key. The set of all attributes is a trivial superkey, so {ABCDEFG} is a trivial superkey.

Since B->C and C->A (a transitive dependency), you can reduce the trivial superkey to {BCDEFG}. Several more reductions are possible, so {BCDEFG} isn't a minimal superkey. {BCDEFG} is a reducible superkey.

One of the minimal superkeys is {BG}. (I could say, "{BG} is an irreducible superkey.") There are other minimal superkeys.

What else should be done to normalize this example to 1NF, 2NF and 3NF
with the help of closures and canonical cover?

Just in case you have a common misunderstanding of this, it's not generally possible to normalize to 2NF and no higher, or to normalize to 3NF and no higher. Eliminating partial-key dependencies ("normalizing to 2NF") can leave all your relations in 5NF.

The next step is to determine all the candidate keys (all the irreducible superkeys).